簡體   English   中英

Java ActionListener類不寫入靜態變量

[英]Java ActionListener class not writing to static variable

為了達到目的,我無法通過外部ActionListener類寫入靜態雙vareable或JTextField。 我正在制作一個高級計算器,為了使事情變得更容易,我正在嘗試創建GUI,模仿其按鈕和其他功能,我正在嘗試將ActionListeners放在一個類中。 在eclipse中,它說我需要讓計算器的靜態可變,但是讓它們靜態,我不能再寫入它們,並顯示答案。 這是我的代碼:

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字段中輸出它。 救命! 謝謝

問題是你的if檢查: e.getActionCommand().equals(GUI.num0)

getActionCommand()返回一個Stringnum0是一個JButton 因此, equals將始終返回false因為它們不是同一類類型。

解決此問題的一種方法是檢查按鈕的標簽: getActionCommand()

所以if語句應該是:

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

不要使用靜態字段,也要封裝它們。

對於ActionListener如果唯一的范圍是外部類或Anoymous Classes我總是使用內部私有Anoymous Classes

此外,您似乎有一個Button集合,您可以考慮分組到集合中。

示例(我在代碼中發表評論):

private List<JButton> buttons;
private double tempNum1;
private double tempNum2;
private boolean pointOn = false;
private int APC = 1; 
//make them private why public and static? 


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

    //initiliatze buttons  

    int size=10;
    buttons= new ArrayList<>(size);

    for(int i=0;i<size;i++){
         JButton button = new JButton();
         button.addActionListener(numListener);
         buttons.add(button);             
    } 

}


private class GUINumListener implements ActionListener{
 @Override
 public void actionPerformed(ActionEvent e){
        if (e.getSource() == buttons.get(0)){ // actionCommand returns string you have to use getSource() or setting an actionCommand to the button and compare num0.getActionCommand()
             tempNum2 *= 10;
        }else if (e.getSource() == buttons.get(1)){
            if (!pointOn){ // u were assigning pointOn = false
                tempNum2 = (tempNum2 * 10) + 1;
            }else{
                tempNum2 = (tempNum2 * Math.pow(10, APC) + 1) / Math.pow(10, APC);
                APC++;
            }
            ansField.setText(Double.toString(tempNum2));
        }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM