设置VIsible(假);从JFrame内部



我找不到任何直接的答案,希望你们可以!

我在"aClass"中创建了一个名为"aclass"的类,这是一个操作处理程序,其中包含一堆 if 语句,这些语句根据数据库检查输入的值。

我想做的是隐藏在"aClass"中创建的JFrame"theFrame",方法是在其中一个if语句中使用theFrame.setVIsible(false),但是它不允许我,"theFrame"似乎超出了范围,我的IDE不允许我。

代码的当前版本(请参阅下面的"这将不起作用"):

public class aClass{
static JTextField USER_NAME;
static JPasswordField PASSWORD;
static JButton submit;
private static class Handler implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        String USER_NAME_I = USER_NAME.getText();   
        String PASSWORD_I = PASSWORD.getText();   
        try {
           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(aClass.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/fake",
             /*DB USER_NAME*/       "fakeuname", 
             /*DB password*/       "fakepassword");              
            Statement st = con.createStatement();
            String FindQuery = "SELECT acc_pass FROM users where acc_name='"+USER_NAME_I+"'";      
            //System.out.println(FindQuery);                        
            ResultSet rs = st.executeQuery(FindQuery);              
            if(rs.next())                                           
            {
                String PASSWORD_DB = rs.getString(1);                   
                if(PASSWORD_DB.equals(PASSWORD_I))                         
                {   
                    //THIS WILL NOT WORK
                    loginFrame.setVisible(false);

                    //do something       
                }
                else                                                
                {
                    JOptionPane.showMessageDialog(null,
                            "Wrong Password",
                            "Error",1);
                }//end else
           }//end if (rs.next())
            else                                                    
            {
                JOptionPane.showMessageDialog(null,
                        "Wrong Username",
                        "Error",1);
            }//end else
        } catch (SQLException ex) 
        {
            Logger.getLogger(aClass.class.getName()).log(Level.SEVERE, null, ex);
        }//end catch (SQLException ex)
    }//end ActionEvent
}//end ActionListener

aClass(){                                                   
    JFrame loginFrame = new JFrame("Logon");                        
    loginFrame.setVisible(true);                                    
    loginFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);   
    USER_NAME = new JTextField(10);                                     
    PASSWORD = new JPasswordField(10);                                 
    loginFrame.setLayout(new GridLayout(0,1));
    JPanel loginPanel = new JPanel();                               
    loginFrame.add(loginPanel);
    loginPanel.add(new JLabel("User Name: "));                       
    loginPanel.add(USER_NAME);                                          
    loginPanel.add(new JLabel("Password: "));                      
    loginPanel.add(PASSWORD);                                         
    submit = new JButton("Submit");                                 
    loginPanel.add(submit);                                         
    submit.addActionListener(new Handler());                        
 }//end aClass
public static void main(String args[])
{
    new aClass();                           
}//end main
}//end class
编辑

:我对这个主题的知识是有限的,上面的代码是我找到的在线教程的编辑版本。我会摆弄一些,看看我是否可以让它使用 JOptionPane 工作,如果我需要任何帮助,可以再次编辑!

方法actionPerformed()不知道loginFrame的存在,因为loginFrame的范围是构造函数的本地。因此,要么将 loginFrame 的声明移出构造函数(即作为成员变量,如提交 JButton),要么将其传递给 Handler。传递到 Handle 的一种方法是在 Handler 类中有一个采用 JFrame 的构造函数。

如何使用loginFrame变量从aClass()actionPerformed

是的,我会建议同样的事情,不要在这里使用框架,去JDialogJOptionPane

最新更新