2014-04-04 54 views
0

我正在创建一个Java应用程序,我将要有一个按钮。当按下该按钮时,我想要一个表单,其中包含usernamepassword等各种字段。在这种形式下,有按钮,当按下时将所有内容保存到文件并切换回第一个JFrame。从当前JFrame中打开一个新的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); 
    } 
} 

此作品不够好,我,但我有一种感觉,我没有这样做,我可能会创建一个内存泄漏,因为我每次都创建一个新对象。我做的是正确的还是有更好的方法?

+3

参见[?*多JFrames,好/坏的做法的使用*](http://stackoverflow.com/q/9554636/230513) – trashgod

+0

是;这是许多平台上的[leak](http://stackoverflow.com/q/6309407/230513)。 – trashgod

回答

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

我想我现在明白了。基本上,我在“Dialog”中放置了一个新面板,而不是全部创建新的“JFrame”。谢谢。确实是 –

+0

。 JOptionPane有许多有趣的对话框,可以完全自定义! – JajaDrinker

+0

我决定把整个面板放在一个不同的类中,以使我的代码看起来更清晰,但问题在于,当我按下OK按钮时,无法访问JFrame中的字段。我可以在面板上有另一个按钮叫做'save',但是有这样的额外按钮看起来很糟糕,按下'OK'后有没有办法访问JPanel中存储的值?我已经尝试过'myPanel.xField',但netbeans不允许我将成员变量从private改为public。 –