gpt4 book ai didi

Java ActionListener 类不写入静态变量

转载 作者:行者123 更新时间:2023-12-02 06:54:03 26 4
gpt4 key购买 nike

说到重点,我无法从外部 ActionListener 类写入静态双变量或 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 字段中。帮助!谢谢

最佳答案

不要使用静态字段,也要封装它们。

对于ActionListener,如果唯一的范围是外部类或匿名类,我总是使用内部私有(private)类。

而且您似乎有一个 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));
}

}

关于Java ActionListener 类不写入静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com