我找不到任何直接的答案来回答我的问题,希望你们能找到!
我在“aClass”中创建了一个名为“aclass”的类,它是一个操作处理程序,其中包含一堆根据数据库检查输入值的 if 语句。
我想要做的是通过在 if 语句之一中使用 theFrame.setVIsible(false) 来隐藏在“aClass”中创建的 JFrame“theFrame”,但是它不会让我这样做,“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 的声明移出构造函数(即作为成员变量,如 Submit JButton),要么将其传递给 Handler。传递给 Handle 的一种方法是在 Handler 类中有一个接受 JFrame 的构造函数。
关于java - setVIsible(假);从 JFrame 内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718198/