2017-03-23 5 views
0

Ich habe ein Problem in meinem Code bei der actionPerformed. Der Code sollte 2 Etiketten und ein Textfeld zeigen, mein Problem hier ist, dass das Label q = new JLabel(x + " x " + y) zeigt x und y der vorherigen Aktion durchgeführt, was bedeutet, dass x und y der Beschriftung einen Schritt zurück sind, versuchte ich, die Stelle der Beschriftung aber zu manipulieren ich konnte keine Lösung finden, ich brauche nur das Etikett mit den aktuellen Werten von x aktualisiert werden und y.Here ist mein Code ..Spätes Update der Variablen in JLabel Java

public class Multiplication extends JFrame implements ActionListener { 
/** 
* 
*/ 
private static final long serialVersionUID = 5551059254300001091L; 
private int x, y, z, i; 
private JLabel q, w; 
private JTextField a; 
    public Multiplication(){ 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new FlowLayout()); 
     q = new JLabel(x + " x " + y); 
     w = new JLabel("Score = 0"); 
     a = new JTextField(5); 
     add(q); 
     add(a); 
     add(w); 
     pack(); 
     setVisible(true); 
     a.addActionListener(this); 
    } 

@Override 
public void actionPerformed(ActionEvent e) { 
    Random random = new Random(); 
    x = random.nextInt(10) + 1; 
    y = random.nextInt(10) + 1; 
    q.setText(x + " x " + y); 
    z = x*y; 
    int s = Integer.parseInt(a.getText()); 
    if(s == z){ 
     w.setText("Score = "+ i++); 
    } 
    else{ 
     JOptionPane.showMessageDialog(null, "Correct answer is: " + z); 
    } 
} 
public static void main(String[] args){ 
    new Multiplication(); 
} 

}

+0

Sie sollten zuerst Ihren Code debuggen. Hast du? – Omore

Antwort

1

Es sieht aus wie Sie das ändern Werte von x und y, bevor Sie überhaupt Eingaben lesen. Wenn Sie die Zeilen, die die Eingabe mit den Zeilen, die neue Zahlen generieren, wechseln, sollte es funktionieren.

public void actionPerformed(ActionEvent e) { 
    int s = Integer.parseInt(a.getText()); 
    if(s == z){ 
     w.setText("Score = "+ i++); 
    } 
    else{ 
     JOptionPane.showMessageDialog(null, "Correct answer is: " + z); 
    } 

    Random random = new Random(); 
    x = random.nextInt(10) + 1; 
    y = random.nextInt(10) + 1; 
    q.setText(x + " x " + y); 
    z = x*y; 
} 
+0

Ja, es funktioniert jetzt. Vielen Dank – Ohemid