2016-10-25 79 views
0

我正在爲javafx中的項目創建一個UI。我使用的是樣式的CSS,結構的FXML以及.java控制器。我試圖讓我的節點(即按鈕,borderpane)佈局綁定到場景大小,以便可以調整窗口大小並保持佈局不變。一般來說,如果該節點是在一個jar文件中定義的,我會用:在FXML中設置節點layoutProperty()

button.layoutYProperty().bind((scene.heightProperty().divide(2)));

或類似的東西,但我的節點在FXML文件中定義。 如何從FXML文件外部訪問節點,以便我可以定義佈局或如何在FXML文件中定義佈局。 (我沒有使用,也不打算使用場景生成器)。

回答

1

首先,你不應該需要做這樣的事情。如果您使用layout panes,則應該始終能夠選擇佈局窗格和設置的組合,以便根據需要自動定位節點。下面概述的解決方案應該永遠不需要。

在控制器中,你通常沒有到scene直接訪問,所以你要聽時sceneProperty()在節點上初始化,並採取相應的行動:

public class Controller { 

    @FXML 
    private Button button ; 

    public void initialize() { 

     button.sceneProperty().addListener((obs, oldScene, newScene) -> { 
      button.layoutYProperty().unbind(); 
      if (newScene != null) { 
       button.layoutYProperty().bind(newScene.heightProperty().divide(2)); 
      } 
     }); 

     // ... 
    } 
} 

但同樣,正確的這裏的方法是選擇適當的佈局窗格來實現你想要的。

+0

我假設您的編輯FXML方法不起作用,因爲您建議只使用佈局窗格,我將需要動態調整佈局窗格的大小,以便正確縮放。與最初的答案相同的方法是否適用於此?是否有動態節點(佈局窗格)縮放的FXML方法? – user2370794

+1

@ user2370794是的,我測試了FXML版本並且它沒有工作(基本上,當場景爲空時,就像它最初一樣,它拋出一個空指針異常)。真的沒有理由必須使用這種技術來設置佈局窗格的大小(當然它也可以)。根據父母的佈局策略,任何節點都由父母進行大小和定位。因此,只需將佈局窗格放置在適當的佈局窗格中等等。根窗格被強制爲與場景大小相同。這聽起來像一個[XY問題](http://meta.stackexchange.com/questions/66377)。 –