2013-07-02 167 views
3

我有一個標籤頁,其中動態加載標籤頁。每個選項卡都有一個錨板作爲其內容。 除了一個小的細節之外,它的工作原理非常好:當我調整主應用程序的大小時,標籤內容不會調整大小。調整選項卡內容的大小

因此,假設我最大化我的應用程序,標籤內容保留其「小」的大小。我怎麼能觸發標籤內容的大小調整,因爲它的根是一個錨板?

我是javafx世界的新手,在我的無知中,我曾嘗試在hbox中包裝anchorpane,並將該選項卡的內容設置爲無效。

任何想法?

回答

0

這是如何調整組件大小的示例,但這個想法是相同的。

Rectangle rec = new Rectangle(); 
    rec.widthProperty().bind(stackPane.widthProperty().subtract(50)); 
    rec.heightProperty().bind(stackPane.heightProperty().subtract(50)); 

你必須讓主舞臺的大小和.bind(stackPane.heightProperty().subtract(50));您可以動態地縮小尺寸。

但是我對這項技術很陌生,有些更有經驗的人可以給你更準確的答案。

+0

這是我的第一個想法,但我認爲不能這樣做寬度/高度屬性只讀 – nablex

0

將AnchorPane約束放入TabPane(不是選項卡,小心),以便根據其容器AnchorPane調整自身的大小。

如果您正在使用SceneBuilder,TabPane實例的佈局部分將對您有所幫助。如果您還動態創建TabPane,您可以設置此constaints爲AnchorPane.setLeftAnchor(theTabPane, ...)AnchorPane.setTopAnchor(theTabPane, ...)

+0

這似乎並不奏效。根據規範,我認爲錨點用於將子元素錨定在錨板上,而不是錨母對其父元素的錨點。 – nablex

+0

'容器AnchorPane'是指TabPane的容器,而不是單個Tab的內容容器。所以如果你提到上述約束條件,tabPane會自行調整大小,因此也會調整標籤的內容(至少我希望如此)。 – Ramazan

0

我現在有一個可行的解決方案,雖然我敢肯定它不是這樣做最徹底的方法:

  final Pane root = loader.getRoot(); 
      tbsCore.widthProperty().addListener(new ChangeListener<Number>() { 
       @Override 
       public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number newValue) { 
        root.setPrefWidth(newValue.doubleValue()); 
       } 
      }); 
      tbsCore.heightProperty().addListener(new ChangeListener<Number>() { 
       @Override 
       public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number newValue) { 
        root.setPrefHeight(newValue.doubleValue()); 
       } 
      }); 

請注意,「根」是我想要放在選項卡中的窗格,而「tbsCore」是TabPane。