1

条件に基づいてそれ自体を有効または無効にするJButtonコンポーネントのサブクラスを作成しようとしています(以下のようになります)

public interface Condition {
    public static final Condition TRUE  = new Condition() { 
                                          public boolean test() {
                                              return true;
                                          } };
    public static final Condition FALSE = new Condition() { 
                                          public boolean test() {
                                              return false;
                                          } };
    public boolean test();
}

ただし、JButtonコードはすべて、JButtonクラスにプライベートに格納されている実際のブール値に基づいています。私の質問は、保存されているisEnabledブール値を(setEnabled(boolean)経由で)更新するためにJButtonのどのメソッドをオーバーライドできるかということです。update(Graphics)でしょうか?またはrepaint()?または他の機能?

編集:私が作成しようとしていることは実際には不可能であることに気づきました。ただし、別のスレッドが短時間待機し、ボタンにそのステータスをチェックするように強制する場合を除きます(これはグロスであり、私はそれをしたくありません)。実際のところ、ボタンはリアクティブのみです。ボタンクラスを使用する人はだれでもオーバーヘッドを使ってこれを達成することは可能ですが、その時点では、実際に変更されているものにリスナーを記述し、その時点でボタンを切り替える方が簡単です。うわー。

4

2 に答える 2

1

DefaultButtonModelたとえば、はstateMask、有効状態のビットを含むを維持します。ButtonModelそれに応じてインターフェースを実装できます。

補遺:別の方法として、キーバインディングの記事に記載されているように、「もう1つの利点はActions、接続されているコンポーネントを追跡しなくてもアクションを無効にする簡単な方法を提供する有効状態になっていることです。」詳細については、アクションの使用方法を参照してください。

于 2010-08-09T18:58:27.230 に答える
1

アクションを使用してそのような機能を実装することを強くお勧めします。

ボタンに添付されているアクションを有効/無効にする必要があります。Swingでは、同じアクションをボタンやメニュー項目などの多くのタイプのコンポーネントに関連付けることができます。特定のアクションを無効にすると、関連付けられているすべてのコンポーネントが自動的に無効になります。

これは、同じアクションのセットを持つツールバー、コンテキストメニューなどがある場合に非常に便利になります。

于 2010-08-09T21:34:41.550 に答える