2017-03-12 16 views
0

コードを実行すると表示されるログインJFrameがあります。問題は、他のフレームが表示されているにもかかわらず、このログイン・フレームを廃棄する必要がある正しいユーザー名とパスワードをユーザーが入力した場合です。私はdispose()setVisible = falseを試しましたが、まだ隠れたり、処分される機会はありません。JFrameはdispose()しません

class LoggingWindow extends JFrame { 


    static JFrame loginFrame = new JFrame(); 
    JPanel loginPanel = new JPanel(); 
    JTextField loginNameFld = new JTextField(10); 
    JPasswordField loginPassFld = new JPasswordField(10); 
    JTextField statusFld = new JTextField(11); 
    String userName = "user"; 
    String password = "password"; 

    //Initialize loginFrame 

    public static void initLoginFrame() {  
    JFrame loginWindow = new LoggingWindow(); 
    //loginFrame.setTitle("\"Moflo Registration\""); 
    loginWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    loginWindow.setResizable(false); 
    loginWindow.setUndecorated(true); 
    loginWindow.setVisible(true); 
    loginWindow.getRootPane().setWindowDecorationStyle(JRootPane.NONE); 
    loginWindow.setSize(new Dimension(220, 290)); 
    loginWindow.setLocationRelativeTo(null); 
    loginWindow.pack(); 

    LoggingWindow() { 

     loginFrame.add(loginPanel); 
     loginPanel.setLayout(new GridBagLayout()); 
     GridBagConstraints gbb = new GridBagConstraints(); 
     gbb.insets = new Insets(1, 1, 1, 1); 
     gbb.anchor = GridBagConstraints.CENTER; 


     JPanel loginNameAndPasswordPanel = new JPanel(); 
     loginPanel.add(loginNameAndPasswordPanel,gbb); 
     gbb.gridx = 0; 
     gbb.gridy = 2; 


     loginNameAndPasswordPanel.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.LINE_END; 
     gbc.insets = new Insets(0,0,0,0); 

     JLabel loginNameLab = new JLabel("Нэр :   "); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     loginNameAndPasswordPanel.add(loginNameLab, gbc); 

     JLabel loginPassLab = new JLabel("Нууц үг :  "); 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     loginNameAndPasswordPanel.add(loginPassLab, gbc); 

     loginNameFld.setHorizontalAlignment(JTextField.CENTER); 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     loginNameAndPasswordPanel.add(loginNameFld, gbc); 

     loginPassFld.setHorizontalAlignment(JTextField.CENTER); 
     gbc.gridx = 1; 
     gbc.gridy = 1; 
     loginNameAndPasswordPanel.add(loginPassFld, gbc); 

     statusFld.setEditable(false); 

     loginNameAndPasswordPanel.add(statusFld, gbc); 
     statusFld.setHorizontalAlignment(JTextField.CENTER); 

     JPanel buttonsPanel = new JPanel(); 
     loginPanel.add(buttonsPanel,gbb); 
     gbb.gridx = 0; 
     gbb.gridy = 3; 
     buttonsPanel.setLayout(new GridBagLayout()); 
     GridBagConstraints gba = new GridBagConstraints(); 
     gba.anchor = GridBagConstraints.LINE_END; 
     gba.insets = new Insets(2, 2, 2, 2); 

     JButton loginBtn = new JButton("Нэвтрэх"); 
     gba.gridx = 0; 
     gba.gridy = 0; 
     buttonsPanel.add(loginBtn, gba);  

     loginBtn.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) { 

     String name = loginNameFld.getText(); 
     String pass = loginPassFld.getText(); 

    if(event.getSource() == loginBtn){ 
    if (name.equals(userName) && pass.equals(password)) { 
        initMainFrame(); 
        loginFrame.dispose(); 
    JOptionPane.showMessageDialog(null, "Системд нэвтэрлээ. Өнөөдөр " + showDate, " ", JOptionPane.INFORMATION_MESSAGE); 

    } else { 
     statusFld.setText("Нэр эсвэл нууц үг буруу байна."); 
    } 

     } 
     } 
    }); 

     JButton closeBtn = new JButton("  Хаах "); 
     gba.gridx = 1; 
     gba.gridy = 0; 
     buttonsPanel.add(closeBtn, gba); 
     add(loginPanel); 
     closeBtn.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) { 
      System.exit(0); 
     } 
    }); 
} 
      //Main method 
public static void main(String[] args) { 

    SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 

     initLoginFrame(); 
    } 
    }); 
    } 
    } 

    public class MainFrame extends JFrame { 

//Initialzie mainFrame 
public static void initMainFrame() { 
    JFrame mainFrame = new MainFrame(); 


    mainFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
    mainFrame.setVisible(true); 
    mainFrame.setExtendedState(Frame.MAXIMIZED_BOTH); 
    mainFrame.setMinimumSize(new Dimension(800, 600)); 
    mainFrame.setLocationRelativeTo(null); 
} 

いくつかは、私には重要でない文は簡潔にするために示されていないと思います

答えて

1

私はあなたが混乱して信じています"loginWindow"には "loginFrame"を指定します。あなたは使用しようとしました

loginFrame.dispose(); 

あなたのコンテンツはloginWindowではなくloginFrameにあります。

私は次のことを行うユーザー名ウィンドウを破棄することができました。

JFrame loginWindow = new LoggingWindow(); 

::また、これを変更する必要があります

static JFrame loginWindow; <--- create as class variable, not local. 
//loginFrame.add(loginPanel); <--- doesn't appear that this is actually used 

if(event.getSource() == loginBtn){ 
        if (name.equals(userName) && pass.equals(password)) { 
         MainFrame.initMainFrame(); 
         //loginFrame.dispose(); <--- again, not used 
         loginWindow.dispose();  <--- want to dispose 
         JOptionPane.showMessageDialog(null, "Системд нэвтэрлээ. Өнөөдөр " , " ", JOptionPane.INFORMATION_MESSAGE); 

        } else { 
         statusFld.setText("Нэр эсвэл нууц үг буруу байна."); 
        } 

       } 

私は間違いなくloginFrameと混同

loginWindow = new LoggingWindow(); 
+0

こんにちは、お返事ありがとうございます。はい、私は間違いなくloginFrameと混同して、本当に無駄でした。私はクラス変数を作成しました:static JFrame loginWindow;あなたが言ったように、それはNullPointerの例外を作ります。 –

+0

こんにちは。また、JFrameのloginWindow = new LoggingWindow()も変更する必要があります。 to loginWindow =新しいLoggingWindow();あなたがしなかった場合は、nullポインタの例外が発生します。これは、loginWindowという1つのローカル変数と1つのクラスという2つの変数があり、クラス変数が使用されなかったためです。 –

0

あなたはJFrameのオブジェクトに「近い」イベントを送出常にすることができます

loginFrame.dispatchEvent(new WindowEvent(loginFrame, WindowEvent.WINDOW_CLOSING)); 
0

は本当に役に立ちませんでした。私はクラス変数を作成しました:static JFrame loginWindow; NullPointerExceptionが発生します。

関連する問題