Множественный ввод в JOptionPane.showInputDialog

Есть ли способ создать несколько входов в JOptionPane.showInputDialog вместо одного входа?


person siaooo    schedule 02.07.2011    source источник


Ответы (2)


да. Вы знаете, что вы можете поместить любой Object в параметр Object большинства JOptionPane.showXXX methods, и часто Object оказывается JPanel.

В вашей ситуации, возможно, вы могли бы использовать JPanel, в котором есть несколько JTextFields:

import javax.swing.*;

public class JOptionPaneMultiInput {
   public static void main(String[] args) {
      JTextField xField = new JTextField(5);
      JTextField yField = new JTextField(5);

      JPanel myPanel = new JPanel();
      myPanel.add(new JLabel("x:"));
      myPanel.add(xField);
      myPanel.add(Box.createHorizontalStrut(15)); // a spacer
      myPanel.add(new JLabel("y:"));
      myPanel.add(yField);

      int result = JOptionPane.showConfirmDialog(null, myPanel, 
               "Please Enter X and Y Values", JOptionPane.OK_CANCEL_OPTION);
      if (result == JOptionPane.OK_OPTION) {
         System.out.println("x value: " + xField.getText());
         System.out.println("y value: " + yField.getText());
      }
   }
}
person Hovercraft Full Of Eels    schedule 02.07.2011
comment
+1, и я добавлю ссылку на Dialog Focus (tips4java. wordpress.com/2010/03/14/dialog-focus), который включает простой класс для установки фокуса на текстовом поле, которое может оказаться полезным. - person camickr; 02.07.2011
comment
@Marco: Пожалуйста, ознакомьтесь с учебными пособиями по Swing и в частности раздел, посвященный JPanels. - person Hovercraft Full Of Eels; 04.07.2011
comment
Как я могу добавить ярлык один под другим? Я сделал вертикальную стойку, но это не сработало. Хорошее решение кстати. - person Kostas Thanasis; 24.03.2020
comment
@KostasThanasis: используйте правильный менеджер компоновки для JPanel, содержащего JLabels. Может работать new GridLayout(0, 1), 0, 1 обозначает переменное количество строк 0 и 1 столбец, 1. - person Hovercraft Full Of Eels; 24.03.2020

это мое решение

JTextField username = new JTextField();
JTextField password = new JPasswordField();
Object[] message = {
    "Username:", username,
    "Password:", password
};

int option = JOptionPane.showConfirmDialog(null, message, "Login", JOptionPane.OK_CANCEL_OPTION);
if (option == JOptionPane.OK_OPTION) {
    if (username.getText().equals("h") && password.getText().equals("h")) {
        System.out.println("Login successful");
    } else {
        System.out.println("login failed");
    }
} else {
    System.out.println("Login canceled");
}
person smidhonza    schedule 28.02.2013
comment
Простое, быстрое решение. Большое спасибо. Очень полезно. - person DeanMWake; 13.04.2015