我希望我的標籤頁中的標籤適合它們所在的標籤頁的完整大小。所以基本上不應該有標題區域可見,所有內容都應該被標籤覆蓋。JavaFX標籤適合標題的全尺寸
我有2個問題在這裏:
- 我怎樣才能讓標籤動態貼合tabpane的寬度是多少?
- 我怎樣才能讓他們適應正確的高度,並刪除標籤之間的小空間?我想這是通過CSS完成的,但我不太清楚。
迎接
我希望我的標籤頁中的標籤適合它們所在的標籤頁的完整大小。所以基本上不應該有標題區域可見,所有內容都應該被標籤覆蓋。JavaFX標籤適合標題的全尺寸
我有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));
}
}
}
});
}
}
當標籤的高度,寬度或數量改變時,這將自動調整每個標籤的寬度。
確實,標籤的屬性對象是隻讀的。這意味着您無法手動設置屬性。然而,只讀屬性的值可以綁定到其他屬性,這些屬性也有一些操作方法,例如,除去,請檢查文檔以獲取更多信息。
您可以在標籤頁上調用.tabminWidthProperty()
並將其綁定到佈局父級的width-property值。
下面的代碼大小所有可用的選項卡同樣填充整個屏幕:
tabpane.tabMinWidthProperty().bind(root.widthProperty().divide(tabpane.getTabs().size()).subtract(20));
我減去20,以避免水平/垂直滾動條。當然,也有一種方法可以禁用它們彈出,但我是JavaFx中的一個Android Dev和一個新手。
你從哪裏得到這些常量 - 23和20?目前,我的系統上似乎有點不足。我相信他們適合其他配置。 – JoshuaD
如果我沒有記錯的話,如果製表符被填滿整個空間,那麼最後一個製表符將被關閉,並且用於選擇製表符的下拉列表將被放置在結尾。所以20只是一個緩衝區,以避免這種情況,但我承認它可能需要一些調整,具體取決於事情如何尋找你。 –