2016-04-19 15 views
-1

JFrameに問題があります。私がしたいのは、ボタン付きのログイン用のJFrameを作成することと、ボタンを押すとログインフレームを閉じてプログラムフレームを開くことだけです。Java JFrameはすべてのフレームを閉じることができません

これは私のログインフレームです:

public static void main(String[] args) { 

    JFrame frame = new JFrame("My Program"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     LoginPanel primary = new LoginPanel(frame); 

     frame.setPreferredSize (new Dimension (650, 500)); 
     frame.getContentPane().add(primary); 
     frame.pack(); 
     frame.setVisible(true); 

} 

コンストラクタにフレームを渡すことによって、ログインパネルを開き、ログインパネル:

public class LoginPanel extends JPanel { 

JFrame fr; 

class submitButton implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     ProgramFrame programFrame = new ProgramFrame(); 
     programFrame.setVisible(true); 
     fr.setVisible(false); 
     fr.dispose(); 
    } 
    } 

public LoginPanel(JFrame frame) { 

    fr = frame; 

    JButton submit = new JButton("Button Login"); 
    submit.addActionListener(new submitButton()); 
    add(submit);  
} 

これは問題ですLoginPanelのボタン "ボタンログイン"をクリックすると、新しいProgramFrameが正常に開きますが、すべての古いフレーム(LoginFrame)で閉じることはありません。 LoginFrameは小さく、非常に少ないとなりますが、残り:助けを事前に

enter image description here

ありがとう! :)

+0

「CardLayout」を使用して1つのフレームのみを使用して、異なるパネルを切り替えることをお勧めします。 'EventQueue.invokeLater'を使ってあなたのスイングコードをEDTに掲示する必要があります。 'ProgramFrame'クラスを教えてください。 –

+0

私はほとんどあなたにUbuntuを使用するための+1を与えました;) – khandelwaldeval

+0

1)[複数のJFramesの使い方、良い/悪い練習を参照](http://stackoverflow.com/q/9554636/418556)2)より良いヘルプ早く、[MCVE]または[短く、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 –

答えて

2
class submitButton implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     ProgramFrame programFrame = new ProgramFrame(); 
     programFrame.setVisible(true); 
     this.dispose(); //changed line 
    } 
    } 

だけでなく、あなたのpaneljframe BT閉じているが、まだ私は今、あなたのコードにいくつかの変更を加えたの両方があなたが最初の完全JFrameを初期化

0

同時に配置されますjpanel なしで開かれ、だから内部の後にJButtonイベントを最初にクリックしてくださいJFrame後でそれを処分します。

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class HideLoginPage{ 

    public static void main(String[] args){ 
     HideLoginPage loginPage = new HideLoginPage(); 

     JFrame frame = new JFrame(); 
     frame.setUndecorated(true); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setBounds(200, 200, 200, 100); 
     loginPage.setPane(frame); 
     frame.setVisible(true); 
    } 

    public void setPane(final JFrame frame){ 
     JPanel panel = new JPanel(); 
     panel.setLayout(new FlowLayout()); 

     JButton submit = new JButton("Login"); 
     submit.setSize(100, 30); 
     panel.add(submit); 

     submit.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent evt){ 
       JFrame newFrame = new JFrame(); 
       newFrame.setBounds(400, 200, 400, 400); 
       newFrame.setVisible(true); 

       frame.setVisible(false); 
       frame.dispose(); 
      } 
     }); 

     frame.getContentPane().add(panel); 
    } 
} 
関連する問題