0

私はJavaでのOOPアプローチの初心者であり、システムにいくつか問題があります。私は現在、単純なGUIシステムを実行しています。jFormでは、手続き型のアプローチとして、すべてのコードをそこに記述しなければならないでしょう。しかし、別のクラス(OOP)でコーディングしてみたいと思います。そして、メインフォームで行う必要があるのは、他のクラスで作成したメソッドを呼び出すことだけです。しかし、私の主な問題は、フォームから別のクラスへのオブジェクトをどのように呼び出したり呼び出したりするかです。

ここに例があります...

public void checkUser(){
    try {
        sql = "SELECT accessLevel FROM user_accounts WHERE userName = 'admin'";
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        rs.first();
        int accessLvl = rs.getInt(1);
        if (accessLvl != 1){
            btnAddUser.setEnabled(false);
            jPanel3.setEnabled(false);
        }
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null, "Exception on Verifying User");
    }
}

checkUser()このメソッド( )をメインフォーム内に配置するのではなく、別のクラスで記述したいと思います。しかし、私の問題は、メインフォームで開始されたオブジェクトbtnAddUser(ボタン名)と(パネル名)にアクセスできないことです。JPanel13また、直接使用する場合、他のクラスにアクセスできるように、これらのオブジェクトにアクセスするにはどうすればよいですか。

4

4 に答える 4

0

あなたのcheckUser方法は:

  • チェックするユーザー名であるパラメーターを受け入れます(これを行う場合は、をに置き換えてください)java.sql.Statementjava.sql.PreparedStatement
  • 必要に応じて、呼び出し元のコード(フォーム)がコンポーネントを有効または無効にするために使用するブール値を返します。
  • 呼び出し元のコード(フォーム)がメッセージダイアログをキャッチして表示できるという例外をスローします。

特に、OOPは関心の分離に関するものです。フォームはUIをcheckUser扱い、メソッドを持つクラスはユーザー認証を扱います。

余談ですが、checkUser通常は例外をスローするような関数は、認証が失敗します。これは、メソッドを使用している誰かが戻り値のチェックに失敗し、認証されていないユーザーがシステムに入るのを許可するのは非常に簡単だからです。

于 2013-01-16T11:38:33.570 に答える
0

しかし、私の問題は、メインフォームで開始されたオブジェクトbtnAddUser(ボタン名)とJPanel13(パネル名)にアクセスできないことです。

これをクラスのクラス変数として宣言し、適切なgetterメソッドとsetterメソッドを割り当ててから、このクラスをインスタンス化して値を取得する必要があります。

さらにニックが言ったように、コードを論理的に分離する必要があります。これにより、完全な設計がモジュール化されます。ここでは、データベースコードを別のDataAccessクラスに移動し、クエリのメソッドを公開できます。接続オブジェクトはコンストラクターで作成できます。

于 2013-01-16T11:50:44.277 に答える
0

このメソッドを静的なものとして別のクラスに書き込むことができます。たとえば、以下のように、JButtonともう1つがJPanelの場合に2つのパラメーターを受け入れます。

 public static void checkUser(JButton btnAddUser,JPanel jPanel3){
   try {
      sql = "SELECT accessLevel FROM user_accounts WHERE userName = 'admin'";
      stmt = conn.createStatement();
      rs = stmt.executeQuery(sql);
      rs.first();
      int accessLvl = rs.getInt(1);
      if (accessLvl != 1){
          btnAddUser.setEnabled(false);
          jPanel3.setEnabled(false);
      }
  }
  catch(Exception e){
    JOptionPane.showMessageDialog(null, "Exception on Verifying User");
  }

}

そして、あなたは前にコードを書いたところからこのメソッドを呼び出すことができます

 NewClass.checkUser(btnAddUser,jPanel3);

NewClassは、このcheckUser()メソッドを記述したクラスです。

また、sql string、Statement、ResultSetオブジェクトなどのメソッドにパラメーターを渡すか、静的として宣言して、クラス名を使用してどこからでも簡単にアクセスできるようにする必要があります。

于 2013-01-16T11:52:24.517 に答える
0

このチュートリアルは、いくつかの洞察を提供し、正しい道にあなたを導くかもしれません。そこにはもっとたくさんの異なる解決策とチュートリアルがあります。

于 2013-01-16T12:25:24.997 に答える