2012-05-23 5 views
0

제 질문에 대한 직접적인 답을 찾지 못했습니다.setVIsible (false); from JFrame

'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을 사용하여 worki로 가져올 수 있는지 살펴보고 도움이 필요한 경우 다시 편집합니다.

+0

-removed comment- 실제로'ActionListener'를 구현하는 클래스에서 JFrame을 생성하면 안됩니다. –

답변

1

방법의 actionPerformed() loginFrame의 범위가 로컬 때문에, loginFrame의 존재에 대해 알고하지 않습니다 갈 생성자에게. 따라서 loginFrame 선언을 생성자 (예 : 제출 JButton과 같은 멤버 변수) 밖으로 옮기거나 처리기로 전달하십시오. Handle에 전달하는 한 가지 방법은 Handler 클래스에 JFrame을 사용하는 생성자를 갖는 것입니다.

1

aClass()의 변수 loginFrame을 어떻게 사용할 수 있습니까? actionPerformed ??

와 그래 내가 같은 일을 건의 할 것, 여기에 프레임을 사용하지 않는, JDialog 또는 JOptionPane