2016-03-28 61 views
2

您好我目前在JavaFX中使用GridPane,並偶然發現一個問題...我想創建一個三行的佈局,中間的一個增長並佔用所有可用空間,但我只是不能得到它的工作。中間一排變得太大,將窗底下的一排「推」到不再可見的地方......我該怎麼做才能使底排始終位於底部,並讓中排佔據可用空間inbetween,但沒有更多......我會粘貼我的代碼在下面。JavaFX - Gridpane增長問題

謝謝!

(注:該代碼已經稍微改變爲清晰起見,但以同樣的方式)

RowConstraints row1 = new RowConstraints(25); 
row1.setVgrow(Priority.NEVER); 

RowConstraints row2 = new RowConstraints(); 
row2.setVgrow(Priority.ALWAYS); 

RowConstraints row3 = new RowConstraints(25); 
row3.setVgrow(Priority.NEVER); 

ColumnConstraints column1 = new ColumnConstraints(); 
column1.setPercentWidth(100); 

gridPane.getRowConstraints().add(0, row1); 
gridPane.getRowConstraints().add(1, row2); 
gridPane.getRowConstraints().add(2, row3); 

gridPane.getColumnConstraints().add(0, column1); 

gridPane.add(node1, 0, 0); 
gridPane.add(node2, 0, 1); 
gridPane.add(node3, 0, 2); 

更新!添加一個 「最小的,完整的和可驗證的例子」

Test.java

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.MenuBar; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.RowConstraints; 
import javafx.stage.Stage; 

public class Test extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     GridPane grid = new GridPane(); 

     MenuBar menuBar = new MenuBar(); 
     TestPane pane = new TestPane(); 

     RowConstraints menuRow = new RowConstraints(25); 

     RowConstraints regRow = new RowConstraints(); 
     regRow.setPercentHeight(100); 

     ColumnConstraints regColumn = new ColumnConstraints(); 
     regColumn.setPercentWidth(100); 

     grid.getColumnConstraints().addAll(regColumn); 
     grid.getRowConstraints().addAll(menuRow, regRow); 

     grid.add(menuBar, 0, 0); 
     grid.add(pane, 0, 1); 

     Scene scene = new Scene(grid, 500, 350); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

TestPane.java

import javafx.scene.control.ListView; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.RowConstraints; 

public class TestPane extends GridPane { 

    public TestPane() { 
     RowConstraints fixedRow = new RowConstraints(25); 
     fixedRow.setVgrow(Priority.NEVER); 

     RowConstraints growingRow = new RowConstraints(); 
     growingRow.setVgrow(Priority.ALWAYS); 

     ColumnConstraints column = new ColumnConstraints(); 
     column.setPercentWidth(100); 

     this.getRowConstraints().addAll(fixedRow, growingRow, fixedRow); 
     this.getColumnConstraints().addAll(column); 

     TextField field1 = new TextField(); 
     ListView list = new ListView<>(); 
     TextField field2 = new TextField(); 

     this.add(field1, 0, 0); 
     this.add(list, 0, 1); 
     this.add(field2, 0, 2); 
    } 
} 
+0

我期望的工作。問題可能是由佈局中的其他內容引起的。你可以發佈一個[MCVE]來證明你描述的效果嗎? –

+0

@James_D Yepp!我添加了一個簡短的版本,工作和再現相同的問題,感謝您的評論=) – Estrozix

回答

0

在你的 「外」 容器即Test定義網格窗格,您有兩排。頂行固定爲25像素,而您將第二行設置爲容器高度的100%。這些顯然是矛盾的。 (我認爲)發生的是,第二行的內容被賦予與網格窗格本身相同的高度(因爲您將percentHeight設置爲100%),但由於沒有足夠的空間來顯示所有內容,因此它會被剪輯。

而不是設置%的高度,只需設置vgrow屬性,你在做TestPane

RowConstraints menuRow = new RowConstraints(25); 

RowConstraints regRow = new RowConstraints(); 
// regRow.setPercentHeight(100); 
regRow.setVgrow(Priority.ALWAYS); 
+0

謝謝,完全錯過了! – Estrozix