我正在创建一个程序,该程序接受一个输入文件,解析该信息并根据该信息构建一个GUI计算器。目前,该程序运行良好,除了在按钮上实现ActionListener时,该按钮应将文本字段设置为按钮getText()方法的值。
我尝试了一些使用for和while的不同循环构造,但是我实现的所有构造都没有找到i或计数器等于numPad.getText()解析的int的位置,或者对于所有的返回0按钮。
我在测试时遇到的问题是变量我从未匹配numPoint。从逻辑上讲,我的方法是减少i,以便循环将继续查找匹配项,但绝不会这样做。测试输出语句对i的无限循环“ -1”和对numPoint的“ 7”。请注意,numPad数组不是顺序排列的,而是元素如下{7、8、9、4、5、6、1、2、3、0}。
我意识到这个循环在逻辑上可能并不正确,但是我很难找到一个可行的解决方案。我想避免对if语句(例如i == Integer(parseInt.numPad[0].getText()
)进行有效的硬编码。
这是创建新按钮并将其添加到Array,基于从输入文件的值创建的列表设置文本并添加ActionListener的循环。
for (int i = 0; i < run.buttons.size(); i++) {
numPad[i] = new JButton();
numPad[i].setText(run.buttons.get(i));
numPad[i].addActionListener(new ButtonActionListener());
panel1.add(numPad[i]);
}
这是创建应该进行分配的循环的最新尝试。
public static class ButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int i;
int numPoint;
for (i = 0; i < numPad.length; i++) {
numPoint = Integer.parseInt(numPad[i].getText());
if (i == numPoint) {
//Match, assign
System.out.println("works");
break;
} else {
//Decrement and continue
i--;
System.out.println("test statement" + i + " " + numPoint);
continue;
}
}
}
}
答案 0 :(得分:1)
您可以通过多种方式进行此操作,但让我们从基础开始吧
for (int i = 0; i < run.buttons.size(); i++) {
numPad[i] = new JButton();
numPad[i].setText(run.buttons.get(i));
// You don't "have" to do this, as the action command defaults
// to the text of the button, but this is away to provide some
// kind of identifier to the action which might be
// different from the text
numPad[i].setActionCommand(run.buttons.get(i))
numPad[i].addActionListener(new ButtonActionListener());
panel1.add(numPad[i]);
}
然后进入您的ActionListener
...
public static class ButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
int numPoint = Integer.parseInt(command);
// Perform what ever action you need
}