2009-08-05 25 views
1

JTabbedPaneオブジェクトにsetSelectedComponentまたはsetSelectedIndexを使用すると、パネルが常にUIに表示されます。ただし、パネルに関連付けられたタブが非表示のままになることがあります。つまり、タブはタブ付きペインの表示部分にスクロールしません。JTabbedPaneのタブを前面に移動

どうすればこの問題を解決できますか?私は安っぽい選択した1つのインデックスを試して、その後、いくつかの他のよりエレガントなものだけでなく、希望のインデックスを選択しますが、arrrrgh!

できれば助けてください。

おかげで、 トッド

答えて

2

私はあなたの呼び出しをEDT上で行われていないと思います。これをラップするSwingUtilities.invokeLater

+0

は、これが働いた - 感謝を! – Todd

+0

ところで、ListCellRenderer内にある同様のコードをラップする必要がありますか?それとも、リストがどこにあるのか、あまりにも漠然とした質問ですか? – Todd

+0

UI(モデルを含む)と関係があるコードは、EDTで実行する必要があります。 SwingUtilities.isEventDispatchThread()を使用して、その上にいるかどうかを確認することができます。 –

1

スイングコンポーネントやモデルを変更するメソッドがあり、EDTで呼び出す必要があり、バックグラウンドスレッドから呼び出す必要がある場合に使用できます。これは、EDT上FUNC常にの実行を保証します。

void func(final Type1 arg1, final Type2 arg2) { 

    if (!SwingUtilities.isEventDispatchThread()) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       func(arg1, arg2); 
      } 
     }); 
     return; 
    } 
    // method code goes here 
} 
+0

デボン、非常に良い、パターンのおかげで! – Todd

関連する問題