2016-03-28 12 views
2

Hi Ich spiele gerade mit dem GridPane in JavaFX herum und bin über ein Problem gestolpert ... Ich möchte ein Layout mit drei Zeilen erstellen, wo das mittlere wächst und den gesamten verfügbaren Platz einnimmt, aber ich kann es einfach nicht zur Arbeit bringen. Die mittlere Reihe wird zu groß und "schiebt" die untere Reihe unterhalb des Fensters an einen Punkt, an dem sie nicht mehr sichtbar ist ... Wie mache ich das so ist die untere Reihe immer unten und die mittlere Reihe nimmt den verfügbaren Platz ein dazwischen, aber nicht mehr ... Ich füge meinen Code unten ein.JavaFX - Gridpane Wachsen Problem

Danke!

(Hinweis: Der Code wurde aus Gründen der Übersichtlichkeit leicht verändert, aber funktioniert auf die gleiche Art und Weise)

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! Hinzufügen eines "Minimal, vollständig und prüfbare Beispiel"

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

Ich würde erwarten, dass zu arbeiten. Das Problem kann durch etwas anderes in Ihrem Layout verursacht werden. Kannst du ein [MCVE] schreiben, das den Effekt zeigt, den du beschreibst? –

+0

@James_D Yepp! Ich habe eine kurze Version hinzugefügt, die funktioniert und reproduziert das gleiche Problem, danke für Ihren Kommentar =) – Estrozix

Antwort

0

In Ihrem "äußeren" Container dh die Gitterscheibe in Test definiert, Sie habe zwei Reihen. Die obere Zeile ist auf 25 Pixel festgelegt, während Sie die zweite Zeile so einstellen, dass sie 100% der Höhe des Containers aufweist. Diese sind offensichtlich widersprüchlich. Was (denke ich) passiert, ist, dass der Inhalt der zweiten Zeile die gleiche Höhe wie das Gitterfenster erhält (weil Sie percentHeight auf 100% gesetzt haben), aber es wird abgeschnitten, weil nicht genug Platz ist, um alles anzuzeigen.

Statt die prozentuale Höhe der Einstellung, setzen Sie einfach die vgrow Eigenschaft, wie Sie in TestPane tun:

RowConstraints menuRow = new RowConstraints(25); 

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

Danke, völlig verpasst! – Estrozix