2012-05-23 89 views
0

我找不到任何直接的答案我的問題,希望你們可以!setVIsible(false);從JFrame內

我在'aClass'內創建了一個名爲'aclass'的類,它是一個包含一堆if語句的操作處理程序,它檢查輸入的數據庫值。

我想要做的就是隱藏在'aClass'中創建的JFrame'theFrame',在if語句中使用了frame.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讓它工作,如果我需要任何幫助,再次編輯!

+0

-removed comment- 實際上你不應該在實現'ActionListener'的類中創建你的JFrame。 –

回答

1

方法的actionPerformed()不知道loginFrame的存在,因爲loginFrame的範圍是局部的到構造函數。因此,要麼將loginFrame的聲明從構造函數中移出(即作爲成員變量,如submit JButton),要麼將其傳遞給Handler。一種傳遞的方式是Handle在Handler類中有一個帶有JFrame的構造函數。

1

如何將loginFrame變量從aClass()轉換爲actionPerformed

和是的,我會建議同樣的事情,在這裏不使用框架,去JDialogJOptionPane

相關問題