【问题标题】:Text Field shows twice in JOptionPane.showInputDialog. Why?文本字段在 JOptionPane.showInputDialog 中显示两次。为什么?
【发布时间】:2013-03-14 01:42:06
【问题描述】:

所以,我正在创建一个简单的对话框来获取用户输入,但文本字段显示了两次。这是一个 SSCCE。

public static void main(String[] args) {
    JTextField fileName = new JTextField();
    Object[] message = {"File name", fileName};
    String option = JOptionPane.showInputDialog(null, message, "Add New", JOptionPane.OK_CANCEL_OPTION);
    System.out.println(fileName.getText());
}

这里的代码有什么问题?

【问题讨论】:

    标签: java swing jframe jtextfield joptionpane


    【解决方案1】:

    这样做是因为您也在message[] 中添加JTextField 对象。

    Object[] message = {"File name", fileName};//sending filename as message

    因此,显示的第一个 JTextField 是 inputDialog 中固有的一个,另一个是您自己作为消息发送的 JTextField

    我猜你想将fileName 的内容发送到消息中。在这种情况下,您的代码应该是这样的:

    public static void main(String[] args) {
        JTextField fileName = new JTextField();
        Object[] message = {"File name", fileName.getText()};//send text of filename
        String option = JOptionPane.showInputDialog(null, message, "Add New", JOptionPane.OK_CANCEL_OPTION);
        System.out.println(fileName.getText());
    }
    

    更新
    如果您只想接受输入,则无需将对象filename 作为消息发送。您应该简单地进行如下操作:

    public static void main(String[] args) {
            //JTextField fileName = new JTextField();
            Object[] message = {"File name"};
            String option = JOptionPane.showInputDialog(null, message, "Add New", JOptionPane.OK_CANCEL_OPTION);
            if (option == null)
            System.out.println("Cancell is clicked..");
            else
            System.out.println(option+ " is entered by user");
        }
    

    【讨论】:

    • 其实我想从用户那里得到输入。但这可以解释。
    • 如果您只想从使用中输入,请不要将filename 作为消息发送。JOptionPane.inputDialog 会自动为您执行此操作。
    • 那么我如何检查用户点击的是确定还是取消?
    • @user2059238 查看我更新的代码。简而言之 .. 如果 optionnull 这意味着用户有 cancelled 否则用户输入了一些值。
    • 啊哈.. 在这里添加,option.length() == 0 也是必需的。
    【解决方案2】:

    默认情况下输入对话框包含文本字段,因此您无需添加另一个。试试这样吧

    String name = JOptionPane.showInputDialog(null, "File name",
            "Add New", JOptionPane.OK_CANCEL_OPTION);
    System.out.println(name);
    

    【讨论】:

    • 那么我如何检查用户点击的是确定还是取消?
    • @user2059238 如果用户单击取消,name 将是 null。您可以使用if (name==null) 或更好的if (name==null || name.isEmpty()) 进行测试,以防用户在不输入任何内容的情况下单击“确定”。
    猜你喜欢
    • 2019-02-10
    • 2020-11-13
    • 2015-05-11
    • 1970-01-01
    • 2020-03-06
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多