2013-03-24 77 views
0

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

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

enter image description here

有什么不对这里的代码?

回答

4

它这样做是因为您在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()); 
} 

UPDATE
如果你想只取输入,则没有必要发送对象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"); 
    } 
+0

其实,我想从用户的输入。但是这解释了。 – 2013-03-24 15:36:59

+0

如果你只想使用输入,那么不要发送'filename'作为消息。“JOptionPane.inputDialog”会自动为你做。 – 2013-03-24 15:39:08

+0

那么如何检查用户是否点击确定或取消? – 2013-03-24 15:54:34

2

默认情况下,输入对话框包含文本字段,因此您不需要添加另一个对话框。尝试也许这种方式

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

那么如何检查用户是否点击确定或取消? – 2013-03-24 15:51:14

+0

@ user2059238如果用户单击Cancel'name'将为'null'。如果用户点击确定而不输入任何内容,你可以用'if(name == null)'或者更好的if(name == null || name.isEmpty())'来测试。 – Pshemo 2013-03-24 15:55:00

相关问题