Java 从当前JFrame打开新JFrame

Java 从当前JFrame打开新JFrame,java,swing,jframe,actionlistener,popupwindow,Java,Swing,Jframe,Actionlistener,Popupwindow,我正在创建一个Java应用程序,其中有一个按钮。当按下该按钮时,我希望在其中输入一个包含用户名、密码等字段的表单。在这种形式下,有一个Save按钮,按下该按钮后,将所有内容保存到一个文件中,并切换回第一个JFrame 我现在就是这样做的。这是第一个JFrame的按钮代码: public class FirstJFrame extends JFrame { private void newJFrameActionPerformed(java.awt.event.ActionEven

我正在创建一个Java应用程序,其中有一个按钮。当按下该按钮时,我希望在其中输入一个包含
用户名
密码
等字段的表单。在这种形式下,有一个
Save
按钮,按下该按钮后,将所有内容保存到一个文件中,并切换回第一个JFrame

我现在就是这样做的。这是第一个JFrame的按钮代码:

public class FirstJFrame extends JFrame {    
    private void newJFrameActionPerformed(java.awt.event.ActionEvent evt) {                                          
        SecondJFrame pan = new SecondJFrame();
        this.setVisible(false);
        pan.setVisible(true);
    }
}
这是第二个JFrame上的
保存
按钮的代码:

public class SecondJFrame extends javax.swing.JFrame {
    private void goBackActionPerformed(java.awt.event.ActionEvent evt) {                                       
        SecondJFrame pan = new SecondJFrame();
        this.setVisible(false);
        pan.setVisible(true);
    }
}

这对我来说已经足够好了,但我有一种感觉,我根本没有做好这件事,我可能会造成内存泄漏,因为我每次都在创建一个新对象。我所做的是正确的还是有更好的方法?

这确实不是最好的方法

如果您想从用户输入中收集一些数据,可以在“输入”对话框中使用JOptionPane。下面是一个代码示例,可以向您展示以下方法:

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

public class ShowInputDialog{
    public static void main(String[] args){
        JFrame frame = new JFrame("Input Dialog Box Frame");
        JButton button = new JButton("Show Input Dialog Box");
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae){
                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());
                }
            }
        });
        JPanel panel = new JPanel();
        panel.add(button);
        frame.add(panel);
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

见是;在很多平台上都是这样的,我想我现在明白了。基本上,我在
对话框中放置了一个新面板,而不是一起创建一个新的
JFrame
。谢谢你,真的。JOptionPane有许多有趣的对话框,完全可以自定义!我决定将整个面板放在一个不同的类中,以使我的代码看起来更干净,但问题是当我按下OK按钮时,我无法从JFrame访问字段。我可以在面板中有另一个名为
save
的按钮,但是如果有这样的额外按钮,那就太糟糕了,在按下
OK
之后,有没有办法访问JPanel中存储的值?我已经尝试了
myPanel.xField
,但netbeans不允许我将成员变量从private更改为public。您必须将pannel作为参数传递给新类。最好创建另一个类,这样代码看起来更可读。只需将它传递给构造函数,您就可以使用它了