当前位置: 首页 > 面试题库 >

如何从按钮关闭的Java摆动窗口返回值?

顾跃
2023-03-14
问题内容

基本上,我在主代码中的某处有这行代码

editwindow clubeditwindow = new editwindow(1,"Club Edit");

这行代码将打开一个新的JFrame,它基本上可以编辑来自主类的大量信息。我有2个名为“保存”和“取消”的按钮。单击“保存”后,我想从文本字段中获取值,然后将其放入新对象中,然后将其返回给主类,然后关闭窗口。单击取消时,我希望它什么都不做,这很简单。

提前致谢。


问题答案:

不要将窗口显示为JFrame,而是将其显示为模式对话框。然后,在不再可见后,主GUI可以查询对象以获取其持有的任何信息。最简单的方法是使用JOptionPane
-如果正确使用,它们就是聪明的小野兽。

这是我的意思的例子。JOptionPane包含使用GridBagLayout显示信息的JPane。

ComplexOptionPane.java:显示主JFrame。

import java.awt.event.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class ComplexOptionPane extends JPanel {
   private PlayerEditorPanel playerEditorPanel = new PlayerEditorPanel();
   private JTextArea textArea = new JTextArea(20, 40);

   public ComplexOptionPane() {
      add(new JScrollPane(textArea));
      add(new JButton(new AbstractAction("Get Player Information") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            int result = JOptionPane.showConfirmDialog(null, playerEditorPanel,
                  "Edit Player", 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)));
               }
            }
         }
      }));
   }

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

PlayerEditorPanel.java,它保存在JOptionPane中显示的JPanel

import java.awt.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;

@SuppressWarnings("serial")
class PlayerEditorPanel extends JPanel {
   enum FieldTitle {
      NAME("Name"), SPEED("Speed"), STRENGTH("Strength");
      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();
   }

}


 类似资料:
  • 作为Java的新手,多年的iOS和。NET的经验,我发现这是非常令人困惑。我想要的是一个非常简单的对话框(从主窗口调用),带有OK和Cancel按钮。单击“确定”时,它会执行一些操作,然后关闭对话框。单击“取消”时,它只会取消对话框。 然而,使用SWT shell对话框类来实现这一点并不明显。如何获得一个按钮来关闭对话框,并将执行返回到主窗口?

  • 问题内容: 你好, 我正在使用Java Swing,并且想在单击按钮时关闭一个窗口。我不知道使用动作侦听器作为执行此操作的最佳方法,但是目前我正在编译错误,因此它一定是不正确的。 这是我的代码: 我遇到的问题是列出的最后一个类,它实际上只是关闭当前窗口,因此再次显示主菜单屏幕。我需要在该类中创建的静态引用。但是将其更改为静态是无效的修饰符吗? 我该如何解决? 问题答案: 试试这个 并发送一个实例给

  • 我有一个Jframe(美因茨), 它有一个按钮(showDialog), 当用户单击该按钮时, jdialog (Dialogz) 将显示, 那个jdialog有一个按钮 如何从该按钮关闭jdialog(在jdialog内部)? 我可以在创建对话框的实例后更改对话框的模式吗? 我需要阻止jdialog的所有者 我试着。。。 非常感谢你的任何帮助

  • 脚本: 单击父窗口中的审核按钮 子窗口已加载 将控件切换到子窗口 单击子窗口中的“确定”按钮 窗口关闭 从父窗口继续测试 在这里,我面临的挑战是在单击“确定”按钮后切换到父窗口。当窗户关闭时。 硒网络驱动程序:2.48

  • 问题内容: 我在询问用户名和密码时有一个小框。单击主窗口中的按钮将打开该框架。 然后,我有两个按钮:确定和取消。 当我单击“取消”按钮时,我需要关闭此框架而不退出应用程序。 我怎样才能做到这一点? 问题答案: 您可以使用Frame.hide()或Frame.dispose()。我还建议研究JDialog或JOptionPane 更正:hide()已过时。应该使用SetVisible(false)代