Присвоить значения текстовому полю на основе текста кнопок - PullRequest
0 голосов
/ 15 сентября 2018

Я создаю программу, которая принимает входной файл, анализирует эту информацию и строит графический калькулятор на основе этой информации.В настоящее время программа работает хорошо, за исключением случаев, когда я реализую ActionListener для кнопок, которые должны установить текстовое поле в значение метода getText () кнопок.

Я пробовал несколько различных конструкций цикла, используя for и while,но все они, которые я реализовал, не нашли, где i или счетчик равен синтаксическому анализу int из numPad.getText () или вернул 0 для всех кнопок.

Проблема, с которой я столкнулся при тестированииявляется то, что переменная я никогда не соответствует NumPoint.Логически мой подход состоит в уменьшении i, чтобы цикл продолжал искать совпадения, но никогда не делает этого.Тестовые операторы вывода бесконечного цикла «-1» для i и «7» для numPoint.Как примечание, массив numPad находится не в порядке, но вместо этого элементы выглядят следующим образом: {7, 8, 9, 4, 5, 6, 1, 2, 3, 0}.

Я понимаю, что этоцикл не может быть логически правильным, но мне трудно найти решение, которое работает.Я хочу избежать жесткого кодирования операторов if (например, i == Integer(parseInt.numPad[0].getText()), которые будут работать.

Это цикл, который создает новые кнопки и добавляет их в массив, устанавливает текст на основе списка, созданного иззначения входного файла и добавляет 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 голосов
/ 16 сентября 2018

Есть несколько способов сделать это, но давайте начнем с основ

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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...