0

要点を言えば、外部の ActionListener クラスから static double 変数または JTextField に書き込むことはできません。私は高度な計算機を作成しています。物事を簡単にするために、GUI を作成し、そのボタンやその他の機能を実装しようとしています。また、ActionListeners を別のクラスに配置しようとしています。日食では、電卓の変数を静的にする必要があると言われていますが、それらを静的にすると、それらに書き込むことができなくなり、回答を表示できなくなります。これは私が持っているコードです:

public static JButton num0, num1, num2, num3, num4, num5, num6, num7, num8, num9;
public static double tempNum1;
public static double tempNum2;
public static boolean pointOn = false;
public static int APC = 1;

public GUI(){
    GUINumListener numListener = new GUINumListener();

    num0.addActionListener(numListener);
    num1.addActionListener(numListener);
    num2.addActionListener(numListener);
    num3.addActionListener(numListener);
    num4.addActionListener(numListener);
    num5.addActionListener(numListener);
    num6.addActionListener(numListener);
    num7.addActionListener(numListener);
    num8.addActionListener(numListener);
    num9.addActionListener(numListener);
}

そして GUINumListener クラスで:

public class GUINumListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if (e.getActionCommand().equals(GUI.num0)){
            GUI.tempNum2 *= 10;
        }else if (e.getActionCommand().equals(GUI.num1)){
            if (GUI.pointOn = false){
                GUI.tempNum2 = (GUI.tempNum2 * 10) + 1;
            }else{
                GUI.tempNum2 = (GUI.tempNum2 * Math.pow(10, GUI.APC) + 1) / Math.pow(10, GUI.APC);
                GUI.APC++;
            }
            GUI.ansField.setText(Double.toString(GUI.tempNum2));
        }
    }

プログラム内の数値をクリックしても ansField フィールドに出力されません。ヘルプ!ありがとう

4

2 に答える 2

1

問題はあなたのif小切手です:e.getActionCommand().equals(GUI.num0)

getActionCommand()Stringaを返し、num0aJButtonです。それらは同じクラスタイプではないため、equals常に返されます。false

これを解決する 1 つの方法は、ボタンのラベルを確認することです。getActionCommand()

したがって、ifステートメントは次のようになります。

e.getActionCommand().equals(GUI.num0.getActionCommand())

于 2013-07-13T14:40:24.667 に答える