Java:JButton打开另一个我可以输入的JFrame

Java:JButton打开另一个我可以输入的JFrame,java,swing,Java,Swing,我希望能够从JFrame中单击一个JButton,打开另一个窗口,在第二个窗口中,我希望能够在该窗口的文本字段中输入一些内容,并从该文本字段中获取信息 JButton myButton = new JButton("Click Here!"); public void actionPerformed (ActionEvent event) { if (event.getSource() == myButton) { // open the new window } 我知道如何定义这个新JFra

我希望能够从JFrame中单击一个JButton,打开另一个窗口,在第二个窗口中,我希望能够在该窗口的文本字段中输入一些内容,并从该文本字段中获取信息

JButton myButton = new JButton("Click Here!");
public void actionPerformed (ActionEvent event)
{
if (event.getSource() == myButton) {
// open the new window }
我知道如何定义这个新JFrame的组件,但是由于不允许嵌套模块,我将如何为这个新窗口编写actionPerformed事件

有没有办法自定义模式对话框窗口的内容?例如,如果我想在弹出窗口中有两个文本字段(这样它可以接受两个输入)?如果我想更改“确定”/“取消”按钮,使其具有不同的标签和/或行为方式,该怎么办

模态对话框(JDialog)或JOptionPane(如JFrame)可以容纳一个JPanel,它具有最复杂的GUI,包括嵌套其他JPanel,这些JPanel使用任何必要的布局并包含多个组件。例如,以下代码创建了JOptionPane,其中显示了一个JPanel,其中包含许多JTextFields,这些字段在JOptionPane返回后都可以提取:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;

public class ComplexDialogPanel extends JPanel {
   public static final String[] LABEL_TEXTS = { "Last Name", "First Name",
         "Address", "City", "State", "Zip" };
   public static final int COLS = 8;
   private Map<String, JTextField> labelFieldMap = new HashMap<>();

   public ComplexDialogPanel() {
      setLayout(new GridBagLayout());
      for (int i = 0; i < LABEL_TEXTS.length; i++) {
         String labelTxt = LABEL_TEXTS[i];
         add(new JLabel(labelTxt), createGbc(0, i));

         JTextField textField = new JTextField(COLS);
         labelFieldMap.put(labelTxt, textField);
         add(textField, createGbc(1, i));
      }

      setBorder(BorderFactory.createTitledBorder("Enter User Information"));
   }

   public String getText(String labelText) {
      JTextField textField = labelFieldMap.get(labelText);
      if (textField != null) {
         return textField.getText();
      } else {
         throw new IllegalArgumentException(labelText);
      }
   }

   public static GridBagConstraints createGbc(int x, int y) {
      GridBagConstraints gbc = new GridBagConstraints();
      gbc.gridx = x;
      gbc.gridy = y;
      gbc.weightx = 1.0;
      gbc.weighty = gbc.weightx;
      if (x == 0) {
         gbc.anchor = GridBagConstraints.LINE_START;
         gbc.fill = GridBagConstraints.BOTH;
         gbc.insets = new Insets(3, 3, 3, 8);
      } else {
         gbc.anchor = GridBagConstraints.LINE_END;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets(3, 3, 3, 3);
      }
      return gbc;
   }

   private static void createAndShowGui() {
      ComplexDialogPanel mainPanel = new ComplexDialogPanel();

      int optionType = JOptionPane.DEFAULT_OPTION;
      int messageType = JOptionPane.PLAIN_MESSAGE;
      Icon icon = null;
      String[] options = { "Submit", "Cancel" };
      Object initialValue = options[0];
      int reply = JOptionPane.showOptionDialog(null, mainPanel,
            "Get User Information", optionType, messageType, icon, options,
            initialValue);
      if (reply == 0) {
         System.out.println("Selections:");
         for (String labelText : LABEL_TEXTS) {
            System.out.printf("%12s: %s%n", labelText,
                  mainPanel.getText(labelText));
         }

      }
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

导入java.awt.gridbag约束;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.util.HashMap;
导入java.util.Map;
导入javax.swing.*;
公共类ComplexDialogPanel扩展了JPanel{
公共静态最终字符串[]LABEL_text={“Last Name”,“First Name”,
“地址”、“城市”、“州”、“邮编”};
公共静态最终整数=8;
私有映射labelFieldMap=newHashMap();
公共ComplexDialogPanel(){
setLayout(新的GridBagLayout());
对于(int i=0;i
您在哪一步上卡住了?打开第二个窗口(顺便说一下,它应该是一个模式对话框)?从第二个窗口获取信息?如果可能的话,请展示更多的代码。我不完全确定如何定义第二个窗口(我需要与之交互),我是使用另一个JFrame还是有其他方法?我会将与新窗口的交互放在同一个actionPerformed方法中,还是在同一个类中定义另一个actionPerformed方法会起作用?如果在新窗口中只需要一个文本字段,那么来自
JOptionPane
类的输入对话框可能正好满足您的需要。如果你真的需要一个新窗口,那么按照HovercraftFullOfEels的建议创建一个模态对话框(JDialog)。@lootu谢谢,JOptionPane就是我一直在寻找的那种东西。请注意,作为将来的参考,JOptionPane实际上只是模态对话框窗口的一种特殊形式。谢谢,这就是我要找的东西。我很好奇为什么将JPanel扩展到JFrame上?还有哪一行描述了“提交”和“取消”按钮的功能?