簡體   English   中英

如果只有一個選項卡,有沒有辦法隱藏JTabbedPane的標簽欄?

[英]Is there a way to hide the tab bar of JTabbedPane if only one tab exists?

我想要一個類似於Firefox的行為,其中可用選項卡列表僅在至少存在兩個選項卡時才會顯示。

我還是找不到那樣的東西。

我最好的想法是手動更改布局:

  • 如果是一個組件,只需將其添加到周圍的面板即可
  • 如果添加了一個組件,則從周圍的面板中刪除該組件,添加一個JTabbedPane,並將前一個組件和新組件添加到該窗格中。
  • 如果刪除了某個組件並且該窗格中只剩下一個組件,請刪除該窗格並添加所包含的組件。

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

有什么好主意嗎?

理想情況下,解決方案應該適用於Java 1.5和1.6 ......但我也很高興只有1.6的解決方案。

您可以覆蓋計算選項卡按鈕區域高度的UI方法,當只有一個選項卡時將高度強制為0

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;  
    }  
});  

我相信你必須手動完成它。 顯然它以前已經完成 ,但只是作為一個似乎不可用的系統的一小部分。

你的方法對我來說很好。 我會像你所說的那樣做,並將所有邏輯包裝在一個自定義的JComponent這樣它就會感覺不那么hackish了。

簡單地使用CardLayout可能會更好。

是的,有一種方法。 我花了四個小時在oracle網站上找到: http//docs.oracle.com/javase/7/docs/api/javax/swing/JTabbedPane.html#setTabLayoutPolicy()

只需使用:

//declare
private JTabbedPane editor = new JTabbedPane ();
//construct like this:
editor.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
//just add components and see how it goes.
editor.addTab("", newPanel);

另一種選擇是自定義JTabbedPane使用的L&F委托(BasicTabbedPaneUI或WindowsTabbedPaneUI,具體取決於您關注的平台)。 這將允許您在僅顯示單個選項卡的情況下自定義選項卡式窗格的行為。

這是另一種做事方式,但我會說這是一項非常艱巨的任務,並且做了邁克爾所說的將會以更少的努力獲得你想去的地方。 我只想將此作為答案發布,以防您不知道此選項。

我認為這可以使用標簽欄和卡片布局來實現,

  • 將標簽欄和卡片布局添加到網格包布局中,以便它們自動重新調整大小
  • 標簽欄的最大高度應為標簽的高度
  • 向標簽欄添加一個監聽器,以便在單擊某些標簽時,它將切換卡布局以顯示適當的內容
  • 如果標簽欄只有一個標簽,則隱藏標簽欄

這應該做的工作。

jTabbedPane1.removeTabAt(0); 似乎在initComponents();之后工作initComponents();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM