2014-04-04 82 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。 –