2013-03-24 4 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

Это потому, что вы добавляете JTextField объект также в message[].

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

На самом деле, я хочу получить данные от пользователя. Но это объясняет. –

+0

Если вы хотите использовать только ввод от использования, тогда не отправляйте 'filename' как сообщение ..' JOptionPane.inputDialog' делает это автоматически для вас. –

+0

Итак, как я могу проверить, нажал ли пользователь Ok или Cancel? –

2

Диалог ввода по умолчанию содержит текстовое поле, поэтому вам не нужно добавлять другой. Попробуйте, может быть, таким образом

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

Итак, как я могу проверить, нажал ли пользователь Ok или Cancel? –

+0

@ user2059238 Если пользователь нажал Отмена 'name' будет' null'. Вы можете проверить, если с 'if (name == null)' или даже лучше 'if (name == null || name.isEmpty())' в случае, если пользователь нажал OK, не набрав ничего. – Pshemo

Смежные вопросы