2016-03-28 6 views
2

こんにちは私は現在、JavaFXのGridPaneで遊んでいて、問題に遭遇しました...中間の1つが成長してすべての空き領域を占める3行のレイアウトを作成したいのですがただそれを働かせることはできません。中央の行が大きくなりすぎて、ウィンドウの下の行が表示されなくなったところに「プッシュ」します。どうすれば下の行が常に下にあり、中の行が使用可能なスペースを占めるようになりますかその間には、しかし、これ以上...私は私のコードを貼り付けます。JavaFX - Gridpane Growing Issue

ありがとうございます!

(注:コードは少しわかりやすくするために変更されたが、同じように動作されています)

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); 

UPDATE! Testで定義されたグリッドペインすなわちあなたの "外側" の容器では "ミニマル完全、かつ検証例"

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

を追加します2行あります。一番上の行は25ピクセルに固定され、2行目はコンテナの高さの100%に設定されます。これらは明らかに矛盾しています。 (percentHeightが100%に設定されているため)2行目の内容にグリッドペイン自体の高さが割り当てられますが、すべて表示する余地がないためクリップされてしまいます。

代わりパーセントの高さを設定するあなたはTestPaneでそうであるように、ちょうどvgrowプロパティを設定します。

RowConstraints menuRow = new RowConstraints(25); 

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

ありがとう、完全にそれを逃した! – Estrozix

関連する問題