2012-04-09 30 views
5

我有一些驗證,當用戶單擊選項卡時執行。如果驗證== true,則允許選項卡顯示(或切換到)。現在我正在使用StateChanged事件進行驗證。問題是,當你點擊一個標籤時,它會顯示標籤內容,如果驗證== false,它會切換回前一個標籤。除非驗證== true,否則我不希望它切換到所有狀態。我該如何做,我是否在檢查錯誤的事件?謝謝大家Java JTabbedPane允許Tab切換到只有如果爲true

+4

理想的UI/UX的方法來做到這將是「禁用」的問題使用標籤'pane.setEnabledAt(指數,FALSE);'調用,而不是在'stateChanged'事件令人費解的邏輯。 – 2012-04-09 14:08:51

+3

您可能會使用'CardLayout'而不是'JTabbedPane'來處理這個問題,以便完全控制視圖何時更改。使用「鎖定標籤」JTabbedPane對我來說是非常直觀的。 – 2012-04-09 14:11:06

回答

1

嘗試覆蓋JTabbedPane.setSelectedIndex(int index)。

+0

更乾淨的解決方案可能是重寫'DefaultSingleSelectionModel.setSelectedIndex(index)'並將模型用於JTabbedPane。但更乾淨的解決方案是重寫'DefaultSingleSelectionModel'來支持'VetoableChangeListener'。 – xmedeko 2012-11-13 10:09:12

+0

是絕對同意:xmedeki解決方案是Saffer的。 – Zecas 2012-11-14 10:59:57

3

如果validation = false,您可以使用tab.setEnabledAt(index,false)方法禁用選項卡,並且當validation = true時,可以使用tab.setEnabledAt(index,true)將其打開。

編輯:禁用標籤將灰色出來,所以用戶不能點擊它擺在首位,這意味着你將不得不執行用戶之前驗證檢查單擊該選項卡。