从当前JFrame打开一个新的JFrame

时间:2014-04-04 17:07:17

标签: java swing jframe actionlistener popupwindow

我正在创建一个Java应用程序,我将要有一个按钮。按下该按钮后,我想要一个表单,其中包含usernamepassword等字段以及其他各种字段。在该表单中有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上Save按钮的代码:

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

这对我来说效果不错,但我觉得我根本就没有做到这一点,因为我每次创建一个新对象,我可能会创建一个内存泄漏。我正在做的是正确的还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

确实不是最好的方式!

如果要从用户输入中收集一些数据,可以在输入对话框中使用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);
    }
}