2015-06-25 24 views
0

我希望我的標籤頁中的標籤適合它們所在的標籤頁的完整大小。所以基本上不應該有標題區域可見,所有內容都應該被標籤覆蓋。JavaFX標籤適合標題的全尺寸

我有2個問題在這裏:

  • 我怎樣才能讓標籤動態貼合tabpane的寬度是多少?
  • 我怎樣才能讓他們適應正確的高度,並刪除標籤之間的小空間?我想這是通過CSS完成的,但我不太清楚。

迎接

回答

2

我不知道這是否是做的,能夠在CSS,並有可能在Java中一個簡單的方法來做到這一點,但我寫的,爲了舒展延伸TabPane類選項卡填充所有空間。

public class StretchedTabPane extends TabPane { 

    public StretchedTabPane() { 
     super(); 
     setUpChangeListeners(); 
    } 

    public StretchedTabPane(Tab... tabs) { 
     super(tabs); 
     setUpChangeListeners(); 
    } 

    private void setUpChangeListeners() { 

     widthProperty().addListener(new ChangeListener<Number>() { 
      @Override public void changed(ObservableValue<? extends Number> value, Number oldWidth, Number newWidth) { 
       Side side = getSide(); 
       int numTabs = getTabs().size(); 
       if ((side == Side.BOTTOM || side == Side.TOP) && numTabs != 0) { 
        setTabMinWidth(newWidth.intValue()/numTabs - (20)); 
        setTabMaxWidth(newWidth.intValue()/numTabs - (20)); 
       } 
      } 
     }); 

     heightProperty().addListener(new ChangeListener<Number>() { 
      @Override public void changed(ObservableValue<? extends Number> value, Number oldHeight, Number newHeight) { 
       Side side = getSide(); 
       int numTabs = getTabs().size(); 
       if ((side == Side.LEFT || side == Side.RIGHT) && numTabs != 0) { 
        setTabMinWidth(newHeight.intValue()/numTabs - (20)); 
        setTabMaxWidth(newHeight.intValue()/numTabs - (20)); 
       } 
      } 
     }); 

     getTabs().addListener(new ListChangeListener<Tab>() { 
      public void onChanged(ListChangeListener.Change<? extends Tab> change){ 
       Side side = getSide(); 
       int numTabs = getTabs().size(); 
       if (numTabs != 0) { 
        if (side == Side.LEFT|| side == Side.RIGHT) { 
         setTabMinWidth(heightProperty().intValue()/numTabs - (20)); 
         setTabMaxWidth(heightProperty().intValue()/numTabs - (20)); 
        } 
        if (side == Side.BOTTOM || side == Side.TOP) { 
         setTabMinWidth(widthProperty().intValue()/numTabs - (20)); 
         setTabMaxWidth(widthProperty().intValue()/numTabs - (20)); 
        } 
       } 
      } 
     }); 
    } 
} 

當標籤的高度,寬度或數量改變時,這將自動調整每個標籤的寬度。

+0

你從哪裏得到這些常量 - 23和20?目前,我的系統上似乎有點不足。我相信他們適合其他配置。 – JoshuaD

+1

如果我沒有記錯的話,如果製表符被填滿整個空間,那麼最後一個製表符將被關閉,並且用於選擇製表符的下拉列表將被放置在結尾。所以20只是一個緩衝區,以避免這種情況,但我承認它可能需要一些調整,具體取決於事情如何尋找你。 –

1

確實,標籤的屬性對象是隻讀的。這意味着您無法手動設置屬性。然而,只讀屬性的值可以綁定到其他屬性,這些屬性也有一些操作方法,例如,除去,請檢查文檔以獲取更多信息。

您可以在標籤頁上調用.tabminWidthProperty()並將其綁定到佈局父級的width-property值。

下面的代碼大小所有可用的選項卡同樣填充整個屏幕:

tabpane.tabMinWidthProperty().bind(root.widthProperty().divide(tabpane.getTabs().size()).subtract(20)); 

我減去20,以避免水平/垂直滾動條。當然,也有一種方法可以禁用它們彈出,但我是JavaFx中的一個Android Dev和一個新手。