2009-06-03 73 views
14

我想要一個類似於如果至少有兩個選項卡存在,Firefox可用選項卡列表只會顯示。如果只有一個選項卡存在,是否有辦法隱藏JTabbedPane的選項卡欄?

我還沒有找到類似的東西。

我有最好的辦法是手動改變的佈局:

  • 在一個部件的情況下,只是添加到周圍的面板
  • 如果一個組件被添加,從周圍的面板刪除該組件,改爲添加一個JTabbedPane,並將上一個和新組件添加到該窗格。
  • 如果組件被刪除,並且窗格中只剩下一個組件,請移除窗格並添加包含的組件。

雖然這可能會工作,感覺就像一個黑客或替代方法...

任何更好的主意嗎?

理想情況下,解決方案應該同時適用於Java 1.5和1.6 ...但我也很高興僅使用1.6版解決方案。

回答

5

我相信你必須手動完成。顯然it has been done before,但只是作爲一個似乎不可用的系統的一小部分。

你的方法對我來說很好。我會這樣做,就像你把它放在一起,然後把所有的邏輯都包裝在自定義的JComponent中,這樣它就不會感到噁心了。

+0

我會等待一段時間,看看是否有人檢查答案之前有一個絕妙的主意... – Huxi 2009-06-03 04:51:08

+0

我同意@mmyers。如果某人有一個預構建組件來做到這一點,我很確定它是這樣工作的。 – banjollity 2009-06-03 08:11:54

+0

謝謝,我想這裏真的沒有別的辦法... – Huxi 2009-06-03 16:29:03

1

另一種選擇是自定義JTabbedPane使用的L代理(BasicTabbedPaneUI或WindowsTabbedPaneUI,具體取決於您關心的平臺)。這將允許您在只顯示單個選項卡的情況下自定義選項卡式窗格的行爲。

這是另一種做事的方式,但我會說這是一項艱鉅的任務,並且正在做邁克爾所說的將會讓你以更少的努力去到你想去的地方。如果您不知道此選項,我只想將其作爲答案發布。

1

我認爲這是可以使用標籤欄和卡片佈局來實現,

  • 添加到網格包佈局的標籤欄和卡片佈局,使他們 重新大小自動
  • 最大高度的標籤欄應該是標籤的高度
  • 一個偵聽器添加到標籤欄,這樣,當某個標籤被點擊它 將切換卡的佈局,以顯示相應的內容
  • 隱藏標籤欄,如果它只有一個標籤

而這應該做的工作。

11

可以覆蓋計算選項卡按鈕區域的高度,迫使高度0的時候,只有一個選項卡中的UI方法:

tabbed_pane.setUI(new BasicTabbedPaneUI() { 
    @Override 
    protected int calculateTabAreaHeight(int tab_placement, int run_count, int max_tab_height) { 
     if (tabbed_pane.getTabCount() > 1) 
      return super.calculateTabAreaHeight(tab_placement, run_count, max_tab_height); 
     else 
      return 0; 
    } 
}); 
相關問題