2

Swing-GUI (Netbeans GUI-Builder で構築) があり、矢印キーを使用して移動するラベルがあります。スペースキーを押すと、別のクラスが呼び出されます。このクラスからラベルにアクセスして、たとえば位置を取得するにはどうすればよいですか?

助けてくれてありがとう!2 番目のクラスのコード例:

    public class Xy extends Thread {
      private Window s; // this is the jFrame-form
      public Xy(Window s) {
        this.s = s;
        s.setBackground(Color.yellow); // works
}


public void run() {
          // here i want to use the position of a label which is located on the form s
}
4

2 に答える 2

2

JLabel を公開する必要がない場合は、JLabel を公開しないことが最善の方法です。他のクラスにラベルの位置を変更させたい場合は、ラベルを保持するクラスに、外部クラスがこれを実行できるようにするメソッドを提供します。他のクラスがラベルの位置を照会する必要がある場合は、外側のコードが (ラベル自体ではなく) 位置データを取得できるように、含まれるクラスに public getter メソッドを指定します。このようにすると、後で JLabel を使用せずに別のコンポーネントを表示することにした場合でも、他のクラスのコードを壊すことはありません。

または、MVC モデルに基づいて GUI を作成し、モデル内の論理ラベルの位置を変更します。ビューはオブザーバー パターンを介してモデルの変更をリッスンし、ビュー自体がラベルの位置を変更できます。

これらすべての鍵となるのは、いつでも可能な限り疎結合を使用することです。

于 2012-05-16T19:11:21.847 に答える
1

これを行うには、次の 2 つの方法があります。

  1. JLabel への参照を必要なクラスに渡します。たとえば、JLabel をパラメーターとして取り、それをインスタンス変数に設定するメソッドを作成できます。
  2. JLabel を SomeClass のプライベート インスタンス変数にし、「getter」メソッド (getJLabel() など) を使用してアクセスします。
  3. JLabel を SomeClass (あなたの JLabel/JFrame?) のパブリック インスタンス変数にし、SomeClass.label を使用してアクセスします。

最初のものは、おそらくより良いプログラミングの実践と考えられます。

于 2012-05-16T11:50:20.690 に答える