1

3 つのタブと Netbeans 7.3 を持つ JTabbedPane を使用しています。ペインを開くと、必要に応じて最初のタブが開きます。ただし、3 番目のタブに切り替えようとすると、JTabbedPane の ChangeListener にあるにもかかわらず、2 番目のタブのコンポーネントが表示されますjTabbedPane.getSelectedIndex() == 2,

3 番目のタブのコンポーネントは、2 番目のタブに切り替えてから 3 番目のタブを開いた場合にのみ表示されます。その後の行動は正常です。

私が見つけた最も近いものは、次のエラーでした: JTabbedPane.getTabComponentAt(int) return null

誰もこのようなことに遭遇したことがありますか?コンストラクターの2番目のタブに「アクセス」することで回避しました。

4

1 に答える 1

3

OPで説明されているものと同じ症状がありました-あるタブのコンポーネントJTabbedPaneが別のタブに「出血」していました。OPがSSCCEを投稿する要求に応じなかったため、同じことが原因であるかどうかはわかりませんが、将来他の人がこれに遭遇した場合に備えて、次を投稿すると思いました.

setVisible()私の問題の原因は、に追加されたコンポーネントを呼び出していたことJTabbedPaneです。長い検索でhttps://bugs.openjdk.java.net/browse/JDK-6191978にたどり着いた後、これを理解しました。そのバグ レポートによるとJTabbedPane、可視性の概念を内部で使用し、それを外部から変更するとタブ マネージャーが混乱します。a 内のコンポーネントは、メソッドを呼び出すJTabbedPaneべきではありません。setVisible()むしろ、ユーザーは、setSelectedComponent()またはsetSelectedIndex()を呼び出して、タブの内容を表示する必要があります。(これは現在JDK APIドキュメントに記載されていますが、コードが最初に書かれたときはそうではありませんでした...)

これにより、私が行った検索とデバッグの時間を誰かが節約できることを願っています...

于 2016-05-31T19:28:53.420 に答える