如何:按下按钮后从 JTextField 获取输入

How to: get input from JTextField after button is pressed

我对 Java 还很陌生,只是想问一下 ActionListener 方法。 我创建了一个 GUI,在一个面板中我想要求用户输入 x 的值并按下提交。它看起来像这样: f(x)= [输入字段] - [输入字段] ^2(提交按钮) 我迷路了,不知道在 ActionPerformed 方法中放入什么来获取用户输入的值 (如果相关的话,我创建面板、文本字段等的方法也是私有的)

我已经尝试过 x1.getText(),但它似乎无法访问变量,因为 JPanel 方法是私有的,而 ActionPerformed 是 public


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

        }
    } 

根据您的描述,我推断 panel2 是一种方法,JTextfields x1 和 x2 都是方法 panel2 的局部变量,无法在其外部访问。

您需要全局声明 x1 和 x2,如果您希望它们是私有的,请将 getter 和 setter 与它们相关联并在 actionperformed 方法中使用它。

  1. {} 符号代表代码块,如果您在 inside-block 你不能直接访问它。
  2. 此外,您无法直接从按钮事件中提取 x1 或 x2 的值。

如果你不想改变No.1,你可以在方法内部定义一个内联函数,如下所示:

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

需要Java 1.8+