[英]Java:Using an Actionlistener in one class that refrences a variable in another class
[英]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()
返回一個String
, num0
是一個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.