【问题标题】:How do I get rid of the default text field in JOptionPane.showInputDialog?如何摆脱 JOptionPane.showInputDialog 中的默认文本字段?
【发布时间】:2017-04-10 16:02:40
【问题描述】:

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

这是我的代码:

    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);

我的对话框最终看起来像这样,您可以看到我的窗格底部有一个杂散的文本字段:

我的问题是,我会在我的代码中的什么地方偷偷指定这个?我不认为我是,所以我该如何去摆脱这个我不需要的杂散文本字段。

谢谢。

【问题讨论】:

    标签: java swing textfield joptionpane gridbaglayout


    【解决方案1】:

    解决方法很简单:不要使用JOptionPane.showInputDialog(...)。请改用JOptionPane.showMessageDialog(...)。

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

    另一方面,showMessageDialog 不这样做,而是根据按下的按钮返回一个 int。

    请查看JOptionPane API 了解更多信息。

    编辑:我错了。如果您希望对话框提供对话框处理按钮,例如“确定”、“取消”或“是”和“否”,并允许用户按下这些按钮,然后从按钮获取输入,请使用 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);
    }
    

    显示:

    【讨论】:

    • 太棒了,非常感谢。我会对其进行更多研究,但目前它正在按照我的意愿工作。
    • 它工作正常,我只使用一个按钮来保存我的所有输入。不过感谢您的帮助,我一定会注意这些信息:)
    猜你喜欢
    • 2013-01-02
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多