在单独的类中使用 ActionListener 使用原始类中 JTextfield 的数据

Cod*_*ein 3 java swing awt actionlistener jtextfield

我正在尝试学习 Swing 和 JFrame,因此我正在创建一个非常简单的程序,它会询问您的姓名,然后显示一个框,告诉您输入的内容。我正在尝试使用第一个类中的一个单独的类来充当 ActionListener 并显示输入的名称。但是它对我不起作用。我尝试在第二个类中创建一个构造函数,将实例变量设置为 JTextfield 中采用的值,但它没有按我的预期显示。请看一看;

提示画面

我希望它显示“您已提交名称 Imray”

这是我的代码(我已正确导入所有库,但出于空间原因省略了)

这是主要课程...

public class NamePrompt extends JFrame{


    private static final long serialVersionUID = 1L;

    String name;

    public NamePrompt(){

        setLayout(new BorderLayout());

        JLabel enterYourName = new JLabel("Enter Your Name Here:");
        JTextField textBoxToEnterName = new JTextField(21);
        JPanel panelTop = new JPanel();
        panelTop.add(enterYourName);
        panelTop.add(textBoxToEnterName);

        JButton submit = new JButton("Submit");
        submit.addActionListener(new SubmitButton(textBoxToEnterName.getText()));
        JPanel panelBottom = new JPanel();
        panelBottom.add(submit);

        //Add panelTop to JFrame
        add(panelTop, BorderLayout.NORTH);
        add(panelBottom, BorderLayout.SOUTH);

        //JFrame set-up
        setTitle("Name Prompt Program");
        //setSize(300, 150);
        pack();
        setLocationRelativeTo(null);


    }



public static void main(String[] args) {
    NamePrompt promptForName = new NamePrompt();
    promptForName.setVisible(true); 
}
Run Code Online (Sandbox Code Playgroud)

}

这是 ActionListener 类:

public class SubmitButton implements ActionListener {

    String nameInput;

    public SubmitButton(String textfield){
        nameInput = textfield;
    }

    @Override
    public void actionPerformed(ActionEvent submitClicked) {
        Component frame = new JFrame();
        JOptionPane.showMessageDialog(frame , "You've Submitted the name " + nameInput );
    }
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*eus 5

您在创建类时将空值传递StringActionListener类,并且一旦文本发生更改,它就永远不会更新,因此不会显示任何内容。SubmitButtonJTextField textBoxToEnterName

您可以在需要时传递textBoxToEnterName JTextField来访问该值:

class SubmitButtonListener implements ActionListener {

    private JTextField textfield;

    public SubmitButtonListener(JTextField textfield) {
        this.textfield = textfield;
    }

    @Override
    public void actionPerformed(ActionEvent submitClicked) {
        Component frame = new JFrame();
        JOptionPane.showMessageDialog(frame, "You've Submitted the name "
                + textfield.getText());
    }
}
Run Code Online (Sandbox Code Playgroud)