Как: получить ввод из JTextField после нажатия кнопки - PullRequest
0 голосов
/ 21 октября 2019

Я новичок в Java и просто хотел спросить о методе ActionListener. Я создал графический интерфейс, и на одной панели я хочу попросить пользователя ввести значения x и нажать «Отправить». Это выглядит так: f (x) = [поле ввода] - [поле ввода] ^ 2 (кнопка отправки) Я потерян и не знаю, что добавить в метод ActionPerformed, чтобы получить значения, которые вводит пользователь (также методв которой я создал панель, текстовые поля и т. д. являются частными, если это уместно)

Я уже пробовал x1.getText (), но, похоже, он не может получить доступ к переменной, поскольку метод JPanel является закрытым,и ActionPerformed является общедоступным


private JPanel panel2() 
    {    
        inputPanel.setLayout(new FlowLayout());

        JTextField  x1 = new JTextField();
        JTextField  x2 = new JTextField();

        JLabel f = new JLabel ("F(x)= ");
        JLabel f2= new JLabel (" - ");
        JLabel f3 = new JLabel (" ^2 ");
        JButton submit1 = new JButton("Submit values");

        submit1.addActionListener(this);

        inputPanel.add(f);
        inputPanel.add(x1);
        inputPanel.add(f2);
        inputPanel.add(x2);
        inputPanel.add(f3);
        inputPanel.add(submit1);
      }
    {
        if("submit1".equals(e.getActionCommand()))
        {
           // and that's where I get lost

        }
    } 

Ответы [ 2 ]

0 голосов
/ 22 октября 2019
  1. {} обозначают блоки кода, и если вы определите какой-либо объект во внутреннем блоке, вы не сможете напрямую получить к нему доступ.
  2. Кроме того, вы не можете извлечь значение x1 или x2 непосредственно из события кнопки.

Если вы не собираетесь менять № 1, вы можете определить встроенную функциювнутри метода, как вы можете видеть ниже:

submit1.addActionListener(e -> {
        System.err.println("x1 : " + x1.getText());
        System.err.println("x2 : " + x2.getText());
    });

Требуется Java 1.8 +

0 голосов
/ 22 октября 2019

Из вашего описания я понимаю, что panel2 - это метод, а JTextfields x1 и x2 - локальные переменные метода panel2, которые не будут доступны вне его.

Вам нужно будет объявить x1 и x2глобально, и если вы хотите, чтобы они были частными, свяжите с ними методы получения и установки и используйте их в действии actionperformed.

...