2012-04-09 5 views
5

ユーザーがタブをクリックしたときに実行する検証があります。 validation == trueの場合、タブの表示(または切り替え)を許可します。今はStateChangedイベントを使って検証しています。問題は、タブをクリックするとタブの内容が表示され、validation == falseの場合は前のタブに戻ります。バリデーション== trueでない限り、私はそれを全く変えたくありません。どうすればいいですか、私は間違った出来事をチェックしていますか?ありがとうございましたJava JTabbedPaneを使用すると、タブがtrueの場合にのみ切り替わります。

+4

これを行う理想的なUI/UXの方法は、 'stateChanged'イベントで畳み込まれたロジックの代わりに' pane.setEnabledAt(index、false); 'を使って問題のタブを"無効にする "ことです。 –

+3

'JTabbedPane'の代わりに' CardLayout'を使ってこれに近づくかもしれません - ビューがいつ変化するかを完全に制御してください。 「ロックされたタブ」を使用すると、「JTabbedPane」はわかりやすくなります。 –

答えて

1

JTabbedPane.setSelectedIndex(int index)をオーバーライドしてください。

+0

Cleanerソリューションは、 'DefaultSingleSelectionModel.setSelectedIndex(index)'をオーバーライドし、JTabbedPaneのモデルを使用することができます。しかし、より洗練されたソリューションは 'DefaultSingleSelectionModel'をオーバーライドして' VetoableChangeListener'をサポートすることです。 – xmedeko

+0

絶対に同意してください:xmedekiソリューションはsafferです。 – Zecas

3

validation.falseの場合はtab.setEnabledAt(index、false)メソッドを使用し、validation = falseの場合はtab.setEnabledAt(index、true)を使用して再度有効にできます。

編集:タブを無効にするとグレーアウトされ、最初にユーザーがクリックできなくなるため、ユーザーがタブをクリックする前に確認チェックを実行する必要があります。

関連する問題