Java 如何在JOptionPane.showInputDialog中删除默认文本字段?

Java 如何在JOptionPane.showInputDialog中删除默认文本字段?,java,swing,textfield,joptionpane,gridbaglayout,Java,Swing,Textfield,Joptionpane,Gridbaglayout,我正在创建一个简单的选项窗格,它要求多个用户输入。我已经指定了标签和文本字段,但是在我的选项窗格的末尾,有一个文本字段不属于任何变量,所以我猜它是在指定选项窗格时出现的 这是我的密码: JTextField locationField = new JTextField(10); JTextField usedByField = new JTextField(5); JTextField commentField = new JTextField(50); ...

我正在创建一个简单的选项窗格,它要求多个用户输入。我已经指定了标签和文本字段,但是在我的选项窗格的末尾,有一个文本字段不属于任何变量,所以我猜它是在指定选项窗格时出现的

这是我的密码:

    JTextField locationField = new JTextField(10);
    JTextField usedByField = new JTextField(5);
    JTextField commentField = new JTextField(50);

    ...

    myPanel.add(new JLabel("Location: ");
    myPanel.add(locationField);

    myPanel.add(new JLabel("Used By: ");
    myPanel.add(usedByField);

    myPanel.add(new JLabel("Comments: ");
    myPanel.add(commentField);

    ...

    JOptionPane.showInputDialog(myPanel);
我的对话框最终看起来是这样的,正如您所看到的,在我的窗格底部有一个游离的文本字段:

我的问题是,在我的代码中,我会在哪里秘密地指定这个?我不认为我是,所以我该如何处理这个我不需要的文本字段


谢谢。

解决方案很简单:不要使用
JOptionPane.showInputDialog(…)
。而是使用
JOptionPane.showMessageDialog(…)

showInputDialog用于从用户获取单个字符串输入,因此它的结构是为了显示用于此目的的嵌入式JTextField,并返回输入到该字段中的字符串,即您不使用的字符串

另一方面,showMessageDialog不执行此操作,而是根据按下的按钮返回一个int

请看一下,了解更多信息

编辑:我错了。如果希望对话框提供对话框处理按钮,如“确定”、“取消”或“是”和“否”,并允许用户按下这些按钮,然后从按钮获取输入,请使用
JOptionPane.showConfirmDialog(…)

例如:

final JTextField userNameField = new JTextField(10);
final JPasswordField passwordField = new JPasswordField(10);
JPanel pane = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, 
        GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 
        new Insets(2, 2, 2, 2), 0, 0);
pane.add(new JLabel("User Name:"), gbc);

gbc.gridy = 1;
pane.add(new JLabel("Password:"), gbc);

gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
pane.add(userNameField, gbc);

gbc.gridy = 1;
pane.add(passwordField, gbc);

int reply = JOptionPane.showConfirmDialog(null, pane, "Please Log-In", 
        JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (reply == JOptionPane.OK_OPTION) {
    // get user input
    String userName = userNameField.getText();

    // ****** WARNING ******
    // ** The line below is unsafe code and makes a password potentially discoverable
    String password = new String(passwordField.getPassword());

    System.out.println("user name: " + userName);
    System.out.println("passowrd:  " + password);
}
其中显示:


太棒了,非常感谢。我会更深入地研究它,但现在它正按照我所希望的那样工作。它工作得很好,我只使用一个按钮来保存我所有的输入。不过,感谢您的帮助,我一定会留意以下信息:)