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);
}
}
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? –
@James_D Yepp! Ich habe eine kurze Version hinzugefügt, die funktioniert und reproduziert das gleiche Problem, danke für Ihren Kommentar =) – Estrozix