0

私の質問に対する簡単な答えが見つかりませんでした。

「aClass」内に「aclass」というクラスを作成しました。これは、データベースに対して入力された値をチェックする一連の if ステートメントを含むアクション ハンドラーです。

私がやりたかったのは、if ステートメントの 1 つで 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 で動作するかどうかを確認し、助けが必要な場合は再度編集します。

4

2 に答える 2

1

loginFrameのスコープはコンストラクターに対してローカルであるため、メソッドactionPerformed()はloginFrameの存在を認識しません。したがって、loginFrameの宣言をコンストラクターの外に移動するか(つまり、submit JButtonのようなメンバー変数として)、それをHandlerに渡します。そして、渡す1つの方法は、Handleに、JFrameを受け取るHandlerクラスのコンストラクターを持たせることです。

于 2012-05-23T10:56:19.647 に答える
1

loginFrame変数 from aClass()intoをどのように使用できますactionPerformedか??

ええ、私は同じことを提案します。ここではフレームを使用しないでくださいJDialogJOptionPane

于 2012-05-23T10:47:49.910 に答える