2016-11-26 3 views
3

Я создаю простую панель параметров, которая запрашивает несколько пользовательских входов. Я указал метки и текстовые поля, но в конце моей панели параметров находится текстовое поле, которое не принадлежит какой-либо переменной, поэтому я предполагаю, что это происходит при указании панели параметров.Как избавиться от текстового поля по умолчанию в JOptionPane.showInputDialog?

Вот мой код:

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

диалог Мой заканчивает тем, как это, и как вы можете видеть, что есть шальная текстовое поле в нижней части моей панели:

enter image description here

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

спасибо.

ответ

4

Решение прост: не используйте JOptionPane.showInputDialog(...). Вместо этого используйте JOptionPane.showMessageDialog(...).

showInputDialog создан для получения единого ввода String от пользователя и поэтому он предназначен для отображения встроенного 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); 
} 

, который отображает:

enter image description here

+0

Awesome, спасибо так много. Я буду больше смотреть на него, но пока он работает так, как я этого хотел. – juiceb0xk

+0

@ juiceb0xk: ты очень рад и удачи! –

+0

@ juiceb0xk: Я был неправ. См. Править. –

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