想知道如何获得stepProgram();在我的gui上工作
非常感谢!
这是GUI类:
package maskin;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class mGUI extends JFrame implements ActionListener {
private JButton knapp;
private JTextField instruksjona, PCa, RAMa;
private int l;
public M instruksjon, PC, RAM[], R;
private M maskin;
M mObject = new M();
public static void main(String[] args) {
mGUI vindu = new mGUI();
vindu.setTitle("Maskin");
vindu.setDefaultCloseOperation(EXIT_ON_CLOSE);
vindu.opprettGUI();
vindu.setSize(600, 600);
vindu.pack();
vindu.setVisible(true);
}
public void getValue(){
}
public void opprettGUI() {
setLayout(new FlowLayout());
JPanel knappePanel = new JPanel();
JButton knapp = new JButton("Step PROGRAM");
knappePanel.add(knapp);
knapp.addActionListener(this);
//knapp.addActionListener(this);
//M reg = new R(R);
instruksjona = new JTextField(10);
add(instruksjona);
PCa = new JTextField(10);
add(PCa);
RAMa = new JTextField(10);
add(RAMa);
add(knapp);
}
@Override
public void actionPerformed(ActionEvent e) {
instruksjona.setText("3" );
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
这是包含stepProgram的代码:
package maskin;
import java.io.*;
import java.util.*;
import static javax.swing.JOptionPane.*;
import static java.lang.Integer.*;
public class M extends Object {
private static final int IREAD = 10; // Flere ...
private final int RAM_SIZE = 256;
private int[] RAM = new int[RAM_SIZE]; // Eller holder det med en byte-array?
private int R; // Register
private int PC = 0; // Programteller
private int instruksjon = RAM[PC];
// Flere instansvariabler?
public M(int R, int PC, int instruksjon, int[] RAM) {
this.RAM = RAM;
this.PC = PC;
this.R = R;
this.instruksjon = instruksjon;
/*
* Initialisering av instansvariabler
*/
}
public M() {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public void setVerdi(int R, int PC, int instruksjon, int[] RAM) {
this.R = R;
this.PC = PC;
this.instruksjon = instruksjon;
this.RAM = RAM;
}
public int getR(){
return R;
}
public int getPC(){
return PC;
}
public int getInstruksjon(){
return instruksjon;
}
public int[] getRAM(){
return RAM;
}
public int lesInn() {
String tallTxt = showInputDialog("Skriv inn helltall:");
int tall = parseInt(tallTxt);
return tall;
}
public void loadProgram(String fileName) {
try {
File test1 = new File(fileName);
Scanner leser = new Scanner(test1);
int i = 0;
while (leser.hasNextLine()) {
String linje = leser.nextLine();
String[] splitter = linje.split(" ");
RAM[i] = Integer.parseInt(splitter[0]);
if (splitter.length > 1) {
RAM[i + 1] = Integer.parseInt(splitter[1]);
}
i += 2;
}
leser.close();
} catch (IOException e1) {
System.out.println("FEIL" + e1.toString());
}
//visMemory();
/*
* Nullstill instansvariabler Åpne fil Les inn program fra fil, linje
* for linje Lukk fil
*/
}
public void visMemory() {
for (int i = 0; i < RAM.length; i++) {
System.out.println(RAM[i]);
}
}
public void stepProgram() {
int instruksjon = RAM[PC];
int verdi = RAM[PC + 1];
if (instruksjon == 10) {
String tallTxt = showInputDialog("Skriv inn helltall:");
int tall = parseInt(tallTxt);
R = tall;
PC += 2;
} else if (instruksjon == 11) {
showMessageDialog(null, "Helltall er: " + R);
PC += 2;
} else if (instruksjon == 12){
String ta = showInputDialog(null, "Skriv inn tall");
RAM[verdi] = Integer.parseInt(ta);
PC +=2;
} else if (instruksjon == 20) {
R = RAM[verdi];
PC += 2;
} else if (instruksjon == 21) {
RAM[verdi] = R;
PC += 2;
} else if (instruksjon == 22) {
R = verdi;
PC += 2;
} else if (instruksjon == 30) {
R += RAM[verdi];
PC += 2;
}else if(instruksjon == 31){
R -= RAM[verdi];
PC +=2;
}else if(instruksjon == 32){
R *= RAM[verdi];
PC+=2;
}else if (instruksjon == 33) {
R /= RAM[verdi];
PC+= RAM[verdi];
} else if (instruksjon == 40) {
PC = verdi;
} else if (instruksjon == 42) {
if (R == 0) {
PC = verdi;
} else {
PC += 2;
}
} else if (instruksjon == 50) {
System.exit(0);
}
System.out.println("Dette er instruksjon: " + instruksjon);
System.out.println("Dette er register: " + R);
System.out.println("Dette er programteller: " + PC);
/*
* Les neste instruksjon fra RAM Utfør instruksjonen (og oppdater
* programtelleren)
*/
}
public void executeProgram() {
while (true) {
stepProgram();
}
/*
* Så lenge programmet ikke er avsluttet Utfør neste instruksjon
* (stepProgram) Vis avsluttende melding
*/
}
public static void main(String[] args) {
M maskin = new M();
maskin.loadProgram("navn.txt");
maskin.stepProgram();
/*
* Hent filnavn fra kommandolinje (args[0]) Lag et M-objekt Last program
* fra fil (loadProgram) Utfør programmet (executeProgram)
*/
}
void setText(String antall_klikk__) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
/*
* Eventuelle hjelpemetoder
*/
我想让按钮stepProgram将系统上所有的数字放在M类的println中。
最佳答案
要在mObject上调用stepProgram():
mObject.stepProgram();