2010-08-02 18 views
2

如何創建(即時)動態調整大小的JavaFX應用程序?現在我編寫了一個簡單的動態調整大小的應用程序,但只有在拖動鼠標按鈕後才能顯示佈局更改。我希望在發佈此按鈕之前即時查看結果/佈局更改。JavaFX中的動態/即時調整大小

我假設這是通過正好綁定正確的值/控制與反...完成任何幫助將是偉大的!


編輯:

以下是我得到的東西工作(感謝Praeus)。正如他所說,我必須將我的頂級容器/佈局寬度和高度綁定到scene.width和scene.height。 -

var scene:Scene;

階段{
標題: 「應用程序標題」
場景:場景=場景{
內容:[
XMigLayout {
寬度:綁定scene.width;
身高:綁定scene.height;
...}]}}

+0

當試圖這樣做,我得到一個錯誤,我的類「無法重寫獲取$ scene()在javafx.scene.Node;重寫方法是靜態的」更改變量名稱爲'scene1'發送錯誤了。這僅適用於我在內容字段中使用的類在與我的運行函數相同的文件中定義的內容。 – directedition 2011-05-02 22:05:48

回答

3

其實文章和博客文章,如果您已經組織到一切的佈局,那麼你可能能夠只綁定頂級佈局容器(S)寬度和高度的場景.width和scene.height。我不認爲頂層佈局控件是由任何東西管理的,所以您可以安全地直接設置佈局控件的寬度和高度。如果這不起作用,那麼你可能會成功綁定layoutInfo的寬度和高度。

理想情況下,您想在使用綁定之前使用佈局管理。過度綁定可能是一個性能問題,並且可能會導致在重新調整大小時重新繪製緩慢。在這種情況下,您可能只需對頂級容器使用綁定,然後頂級容器的所有子級都應相應調整大小。至少我認爲這應該起作用。

+0

這個技巧。謝謝!如你所說,我必須將我的頂級容器(佈局)綁定到場景的寬度和高度。只需創建一個變量來提供一種方法來引用scene.width和scene.height。我編輯了我的原始帖子以顯示此解決方案。 – Greg 2010-08-04 12:59:53

1

是的我認爲你是在正確的路線 - 綁定將是明顯的方式來做你想做的事情。你也可以看觸發器。

閱讀1.3 guide to layouts爲出發點,如果你還沒有

佈局容器自動管理他們的內容節點的動態佈局行爲。然而,通常也希望使用JavaFX Script的綁定機制來建立佈局的某些動態方面。例如,您可以將HBox容器的寬度和高度綁定到場景的高度和寬度,以便每當場景調整大小時,HBox容器也將調整大小。

它也可能是值得一讀通過的JavaFX佈局大師Amy Fowler

+0

感謝您的迴應!是的,我已經使用佈局容器來構建我的界面。我會查看一下你列出的一些資源......雖然Amy Fowler的博客在我的工作場所因爲「社交媒體」而被封鎖。瘸。 – Greg 2010-08-04 13:09:52

4

JavaFX 2.0版本中的綁定有所不同。 Angela Caicedo's video演示如何很好地綁定屬性。必須將變量設置爲ObservableNumberValue,並使用其get和Set方法。安裝完成後,您可以將其綁定到組件的屬性。

DoubleProperty x = new SimpleDoubleProperty(0); 
x.set(1); 
x.getValue(); 
imageView.xProperty().bind(x); 
anchorPane.heightProperty().add(x); 

Eric Bruno's post是另一種方法。

scene.widthProperty().addListener( 
    new ChangeListener() { 
     public void changed(ObservableValue observable, 
          Object oldValue, Object newValue) { 
      Double width = (Double)newValue; 
      tbl.setPrefWidth(width); 
     } 
    }); 

scene.heightProperty().addListener(
    new ChangeListener() { 
     public void changed(ObservableValue observable, 
          Object oldValue, Object newValue) { 
      Double height = (Double)newValue; 
      tbl.setPrefHeight(height); 
     } 
    }); 

編輯:添加了另一個更合適的答案以及我發現它的位置。