根据按钮文本将值分配给文本字段

时间:2018-09-15 19:50:22

标签: java swing user-interface

我正在创建一个程序,该程序接受一个输入文件,解析该信息并根据该信息构建一个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;
            }
        }

    }       
}

1 个答案:

答案 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
    }