JOptionPane.ShowInputDialog中的多个JTextFields



我想把几个JTextFields放在一个JOptionPane中,这样我就可以验证放在其中的信息。我知道showInputDialog()会产生一个Input,但我该如何实现3/4

编辑:(运行时只显示一个输入字段)

    //JDIALOG(FOR END PAYMENT)
    dialogPanel = new JPanel();
    creditCardNoInput = new JTextField();
    sortCodeInput = new JTextField();
    secNoInput = new JTextField();
    cardHolderName = new JTextField();
    dialogPanel.add(creditCardNoInput);
    dialogPanel.add(sortCodeInput);
    dialogPanel.add(secNoInput);
    dialogPanel.add(cardHolderName);
   int result = JOptionPane.showConfirmDialog(null, dialogPanel, 
                   "Please Enter your card details",    JOptionPane.OK_CANCEL_OPTION);
         if (result == JOptionPane.OK_OPTION) {
             //Execute desired code

使用JPanel。

将您的JTextFields和JLabels(因为您可能也需要这些)放入一个或多个JPanel中,并将主JPanel放入JOptionPane中。您可以将一个完整的复杂GUI放入JPanels中,并根据需要将其显示在JOptionPane中。

例如:

import java.awt.*;
import java.awt.event.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
@SuppressWarnings("serial")
public class ComplexOptionPane extends JPanel {
   private PlayerEditorPanel playerEditorPanel = new PlayerEditorPanel();
   private JTextArea textArea = new JTextArea(12, 30);
   public ComplexOptionPane() {
      textArea.setEditable(false);
      textArea.setFocusable(false);
      textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 16));
      JPanel bottomPanel = new JPanel();
      bottomPanel.add(new JButton(new AbstractAction("Get Player Information") {
         @Override
         public void actionPerformed(ActionEvent arg0) {
            int result = JOptionPane.showConfirmDialog(null, playerEditorPanel,
                  "Edit Player JOptionPane", JOptionPane.OK_CANCEL_OPTION,
                  JOptionPane.PLAIN_MESSAGE);
            if (result == JOptionPane.OK_OPTION) {
               for (PlayerEditorPanel.FieldTitle fieldTitle : PlayerEditorPanel.FieldTitle
                     .values()) {
                  textArea.append(String.format("%10s: %s%n",
                        fieldTitle.getTitle(),
                        playerEditorPanel.getFieldText(fieldTitle)));
               }
            }
         }
      }));
      setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
      setLayout(new BorderLayout(5, 5));
      add(new JScrollPane(textArea), BorderLayout.CENTER);
      add(bottomPanel, BorderLayout.PAGE_END);
   }
   private static void createAndShowGui() {
      ComplexOptionPane mainPanel = new ComplexOptionPane();
      JFrame frame = new JFrame("ComplexOptionPane");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
@SuppressWarnings("serial")
class PlayerEditorPanel extends JPanel {
   enum FieldTitle {
      NAME("Name"), SPEED("Speed"), STRENGTH("Strength"), HEALTH("Health");
      private String title;
      private FieldTitle(String title) {
         this.title = title;
      }
      public String getTitle() {
         return title;
      }
   };
   private static final Insets WEST_INSETS = new Insets(5, 0, 5, 5);
   private static final Insets EAST_INSETS = new Insets(5, 5, 5, 0);
   private Map<FieldTitle, JTextField> fieldMap = new HashMap<FieldTitle, JTextField>();
   public PlayerEditorPanel() {
      setLayout(new GridBagLayout());
      setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createTitledBorder("Player Editor"),
            BorderFactory.createEmptyBorder(5, 5, 5, 5)));
      GridBagConstraints gbc;
      for (int i = 0; i < FieldTitle.values().length; i++) {
         FieldTitle fieldTitle = FieldTitle.values()[i];
         gbc = createGbc(0, i);
         add(new JLabel(fieldTitle.getTitle() + ":", JLabel.LEFT), gbc);
         gbc = createGbc(1, i);
         JTextField textField = new JTextField(10);
         add(textField, gbc);
         fieldMap.put(fieldTitle, textField);
      }
   }
   private GridBagConstraints createGbc(int x, int y) {
      GridBagConstraints gbc = new GridBagConstraints();
      gbc.gridx = x;
      gbc.gridy = y;
      gbc.gridwidth = 1;
      gbc.gridheight = 1;
      gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
      gbc.fill = (x == 0) ? GridBagConstraints.BOTH
            : GridBagConstraints.HORIZONTAL;
      gbc.insets = (x == 0) ? WEST_INSETS : EAST_INSETS;
      gbc.weightx = (x == 0) ? 0.1 : 1.0;
      gbc.weighty = 1.0;
      return gbc;
   }
   public String getFieldText(FieldTitle fieldTitle) {
      return fieldMap.get(fieldTitle).getText();
   }
}

还有——这个答案


MCVE使用您的代码示例:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.*;
import javax.swing.border.Border;
public class Foo1 {
   private static final Insets WEST_INSETS = new Insets(5, 0, 5, 5);
   private static final Insets EAST_INSETS = new Insets(5, 5, 5, 0);
   private JPanel dialogPanel;
   private JTextField creditCardNoInput;
   private JTextField sortCodeInput;
   private JTextField secNoInput;
   private JTextField cardHolderName;
   public Foo1() {
      dialogPanel = new JPanel(new GridBagLayout());
      Border titleBorder = BorderFactory.createTitledBorder("Credit Card Information");
      Border emptyBorder = BorderFactory.createEmptyBorder(10, 10, 10, 10);
      Border combinedBorder = BorderFactory.createCompoundBorder(titleBorder, emptyBorder);
      dialogPanel.setBorder(combinedBorder);
      creditCardNoInput = new JTextField(5);
      sortCodeInput = new JTextField(5);
      secNoInput = new JTextField(5);
      cardHolderName = new JTextField(5);
      dialogPanel.add(new JLabel("Credit Card Number:"), createGbc(0, 0));
      dialogPanel.add(creditCardNoInput, createGbc(1, 0));
      dialogPanel.add(new JLabel("Sort Code:"), createGbc(0, 1));
      dialogPanel.add(sortCodeInput, createGbc(1, 1));
      dialogPanel.add(new JLabel("Second Number:"), createGbc(0, 2));
      dialogPanel.add(secNoInput, createGbc(1, 2));
      dialogPanel.add(new JLabel("Cardholder Name:"), createGbc(0, 3));
      dialogPanel.add(cardHolderName, createGbc(1, 3));
      int result = JOptionPane.showConfirmDialog(null, dialogPanel,
            "Please Enter your card details", JOptionPane.OK_CANCEL_OPTION,
            JOptionPane.PLAIN_MESSAGE);
      if (result == JOptionPane.OK_OPTION) {
         // Execute desired code
      }
   }
   private static GridBagConstraints createGbc(int x, int y) {
      GridBagConstraints gbc = new GridBagConstraints();
      gbc.gridx = x;
      gbc.gridy = y;
      gbc.gridwidth = 1;
      gbc.gridheight = 1;
      gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
      gbc.fill = (x == 0) ? GridBagConstraints.BOTH
            : GridBagConstraints.HORIZONTAL;
      gbc.insets = (x == 0) ? WEST_INSETS : EAST_INSETS;
      gbc.weightx = (x == 0) ? 0.1 : 1.0;
      gbc.weighty = 1.0;
      return gbc;
   }
   private static void createAndShowGui() {
      new Foo1();
   }
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

解决方案:

当我运行我的代码时,出于某种原因,它更喜欢启动我的另一个GUI。当我注释掉代码并且JOptionPane仍在执行时,我才发现这一点,所以我手动选择了我的GUI,运行它,4框出现了。

p.S请投票给我,这样我就可以得到徽章了。谢谢!:)

相关内容

  • 没有找到相关文章

最新更新