2017-03-23 6 views
0

私はactionPerformedで自分のコードに問題があります。コードは2つのラベルと1つのテキストフィールドを表示する必要があります。私の問題はラベルq = new JLabel(x + " x " + y)が前のアクションのxとyを表示していることです。実行されます。つまり、ラベルのxとyは1ステップ後です。私はあなたが変化しているように見えます..私はちょうどラベルがxの現在の値で更新する必要があるとy.Hereは私のコードで、JLabelの変数の更新が遅れています

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

まずコードをデバッグする必要があります。あなたは? – Omore

答えて

1

を解決策を見つけることができませんでした入力を読み取る前のxとyの値。新しい行を生成している行を使って行のチェック入力を切り替えると、それはうまくいくはずです。

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

はい、今動作します。ありがとう – Ohemid

関連する問題