java - JFrame 不 dispose()

标签 java

所以,我有一个登录 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(); 

但是您的内容位于登录窗口上,而不是登录框架上。

我能够通过执行以下操作来处理用户名窗口。

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

关于java - JFrame 不 dispose(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42745217/

相关文章:

java - 如何返回带有 ActionErrors 的多个表单的 JSP?

java - 在 Groovy 中查找一个月的第 n 个工作日

java - e.getY() 返回值高于预期

java - JPA 连接查询不起作用

java - 将 CURL 转换为 Java 代码

java - HashMap 中的条目被完全不同的键覆盖?

java - 根据登录用户在运行时更改数据库架构

java - 如何使用java递归获取JSON的键?

c# - 如何将流从 Java applet 发送到 ASP .NET 网站?

java - 如何从不同的 jar 加载相同的类