繁体   English   中英

JFrame不处理()

[英]JFrame doesn't dispose()

因此,我有一个登录JFrame,它在运行代码时显示。 问题是,如果用户输入正确的用户名和密码,则在显示另一个框架时就需要丢弃此登录框架,但实际上并没有。 我尝试了dispose()setVisible = false ,但是仍然没有机会被隐藏或处置。

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

有些人,为简洁起见,我认为不显示不重要的陈述

我相信您将“ loginWindow”与“ loginFrame”混淆了。 您尝试使用

loginFrame.dispose(); 

但您的内容位于loginWindow上,而不是loginFrame上。

我能够执行以下操作来配置用户名窗口。

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("Нэр эсвэл нууц үг буруу байна.");
                    }

                }

您还必须更改此设置:

JFrame loginWindow = new LoggingWindow(); 

至:

 loginWindow = new LoggingWindow();

您始终可以将“ close”事件调度到JFrame对象:

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

我绝对与loginFrame混淆确实是没用的。 我创建了一个类变量:static JFrame loginWindow; 但结果为NullPointerException。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM