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


这是我的代码(我已正确导入所有库,但出于空间原因省略了)
这是主要课程...
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)
您在创建类时将空值传递String给ActionListener类,并且一旦文本发生更改,它就永远不会更新,因此不会显示任何内容。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)