Java 使用JDialog作为输入

Java 使用JDialog作为输入,java,swing,jdialog,Java,Swing,Jdialog,我试图使用JDialog作为字符串的输入。但是我得到的文本是在我点击按钮之前 这是我的对话: public class AddMemberDialog extends JDialog { private JTextField name; public AddMemberDialog() { super(new JFrame("Add Member"), "Add Member"); this.setDefaultCloseOperation(J

我试图使用
JDialog
作为
字符串的输入。但是我得到的文本是在我点击按钮之前

这是我的对话:

public class AddMemberDialog extends JDialog {

    private JTextField name;

    public AddMemberDialog() {
        super(new JFrame("Add Member"), "Add Member");
        this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        this.setMinimumSize(new Dimension(500, 500));
        this.name = new JTextField();

        JButton add = new JButton("Add");
        add.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {
                close();            
            }
        });
        this.setLayout(new GridLayout(2, 1, 5, 5));

        this.add(name);
        this.add(add);
        this.pack();
    }

    private void close(){   this.dispose(); }

    public String getName(){    return this.name.getText(); }
}
下面是我用来访问
字符串的内容:

AddMemberDialog input = new AddMemberDialog();
input.setLocationRelativeTo(this);
input.setVisible(true);
String txt = input.getName();

您可以使用JOptionPane进行此操作

import javax.swing.JOptionPane;

public class TestClass
{

  public static void main(String[] args)
  {
    String input = JOptionPane.showInputDialog("Add Member");
    System.out.println(input);
  }
}
好的,基本上,你的问题是,如果你只留下代码

              AddMemberDialog input = new AddMemberDialog();
              input.setLocationRelativeTo(this);
              input.setVisible(true);
              String txt = input.getName();

当IDE到达代码行时,它将自动接收您的输入。也就是说,除非您在IDE到达之前(IDE在毫秒内到达)将某些内容放入其中,否则在那之后它将不再接受任何输入。因此,为了补偿,在我们准备好之前,我们不会让程序接收输入,因此需要一个按钮。在我上面的代码中,我创建了一个新的
JButton
,并将其命名为
takeInput
。还为它提供了一个
ActionListener
,并在该
ActionListener
中,让它按照您的要求执行。现在,我可以控制输入何时发生。

您需要为按钮创建一个ActionListener,然后只在按下按钮后获取代码。我的代码也有类似的问题,或者更确切地说,制作另一个按钮来处理这个问题,因为我看到这个按钮是用于关闭构造函数的,添加“setModal(true);”但我的意思是这个
String txt=input.getName()
在对话框打开时获取值,我希望在对话框关闭时获取值,因为它是自动执行的,从打开的那一刻起,它就接收输入。我是说,在按下按钮或其他东西之前,不要接受输入,否则,你将无法获得输入
              AddMemberDialog input = new AddMemberDialog();
              input.setLocationRelativeTo(this);
              input.setVisible(true);
              String txt = input.getName();