2012-03-16 22 views
7

私はしばらくの間、Swingに取り組んでいましたが、実際にはsetEnabled(false)JPanelに呼び出す必要がありました。 まだ、私は時にはいくつかの洗練されたGUIでそのようなコードを参照してください。しかし、なぜ誰かがそれを使いたいのか、私は本当にそれを理解していないのですか? JPanelsetEnabled(false)を使用する必要がある場合、現実の一般的な状況の例を教えてください。JPanelでsetEnabled(false)を呼び出す理由

はまた、javadocのそれは言う:コンポーネントを無効

はその子を無効にしません。

実際に私はバグがありました。無効なテーブルJPanelは、列のサイズ変更時にマウスのサイズ変更カーソルを表示しませんでした。私はここに他の不愉快な驚きがあると思う。

+0

は、私はあなたがトップレベルウィンドウをこのように無効にすることができると信じていますが、ウナギのないコンテナ –

+0

@Hovercraftフル:まだJPanelのは、このような方法があります。私にとっては、ここでは潜在的なバグの完全な無駄なソースのように見えます。しかし、たぶん私は誤解しているかもしれませんし、JPanelの実用的な使い方もあります。 – GrayR

+0

スイングを使って作業するのは、千切れの死のようなものです。何もしない方法?本当に? – gdbj

答えて

6

理由の1つは、getEnabled()が正しい状態を反映するためです。 一部のイベントハンドラがパネル を有効にしないようにフラグを立てたい場合、イベント の時点で慎重でなく、すべての子コンポーネントを反復して無効にすることを検討してください。 アプリの他の部分では、getEnabled()を使用してパネルの状態をテストして、 にアプリのさまざまなポイントで何をするかを判断する必要があります。

は、私は個人的にこれを行うにはなかったが、今あなたが頼み、私がこれいつかを使用する場合があります 思考を得たことでした。ありがとう。 & & + = 1に質問があります。

+0

私はあなたがすべての子供を無効にする場合、これは有効な使い方だと思います。それ以外の場合は、私の質問に記載されているものと同様のバグにつながる可能性があります。途中で素晴らしい例。それは残念です。Swingは、コードの1行でコンポーネントのすべての子を無効にする方法はありません。 – GrayR

+1

utilsクラスのsetEnabledAll()は簡単です。私は誰かがそれがどのように行われるか見るために必要とする1つを追加するでしょう。 – Java42

+0

シンプルな状態フラグは、関連する希望の動作なしにはあまり価値がありません。あなたの 'setEnabledAll()'はJPanel(あるいはより一般的にはComponentのような任意のビュー要素)への明らかな拡張のようです。私はSwingでこのような頭のスクラッチャーを見つけています。 – gdbj

5

コンテナ内のすべてのコンポーネントを有効/無効にするための初心者コード。

JPanel p = new JPanel(); 
p.setEnabled(state); 
setEnabledAll(p, state); 

public void setEnabledAll(Object object, boolean state) { 
    if (object instanceof Container) { 
     Container c = (Container)object; 
     Component[] components = c.getComponents(); 
     for (Component component : components) { 
      setEnabledAll(component, state); 
      component.setEnabled(state); 
     } 
    } 
    else { 
     if (object instanceof Component) { 
      Component component = (Component)object; 
      component.setEnabled(state); 
     } 
    } 
} 
関連する問題