Wie Spanne Spalten einer gridpane manuell in javafx?
Ich versuche zu entwerfen, ein layout mit gridpane enthält 2 Zeilen und 2 Spalten. Oben Links und oben rechts im Bereich Aktien, die Breite , beide erhalten 50% von ihm. Aber in der zweiten Zeile, die ich brauche unten rechts zu bekommen 60% der Breite, so linken unteren Bereich 40%.
Ich habe auch versucht spaning Spalten wie [[2col.,2col][1col,3col]] - matrix. Es hat nicht funktioniert auch nicht.
Hier ist mein code;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
primaryStage.setTitle("Hello World");
Scene scene = new Scene(root, 1700, 1200);
//zoneTopLeft, spans 2 column
VBox zoneTopLeft = createBaseContainer();
//zoneTopRight, spans 2 columns
VBox zoneTopRight = createBaseContainer();
//zoneBottomLeft, spans 1 columns
VBox zoneBottomLeft = createBaseContainer();
//zoneBottomRight,spans 3 columns
VBox zoneBottomRight = createBaseContainer();
ColumnConstraints topRight=new ColumnConstraints();
topRight.setPrefWidth(300);
ColumnConstraints topLeft=new ColumnConstraints();
topRight.setPrefWidth(300);
ColumnConstraints bottomRight=new ColumnConstraints();
topRight.setPrefWidth(400);
ColumnConstraints bottomLeft=new ColumnConstraints();
topRight.setPrefWidth(200);
GridPane page=new GridPane();
page.getColumnConstraints().addAll(topLeft,topRight,bottomLeft,bottomRight);
page.setHgap(10);
page.setVgap(10);
page.add(zoneTopLeft, 0, 0);
// page.setColumnSpan(zoneTopLeft, 2);
page.add(zoneTopRight, 1, 0); //2,0 for spaning
// page.setColumnSpan(zoneTopRight,2);
page.add(zoneBottomLeft, 0, 1);
// page.setColumnSpan(zoneBottomLeft,1);
page.add(zoneBottomRight, 1, 1);
// page.setColumnSpan(zoneBottomRight,3);
root.getChildren().addAll(page);
primaryStage.setScene(scene);
primaryStage.show();
}
private VBox createBaseContainer() {
VBox base = new VBox(); //box
base.setPrefWidth(250);
base.setPrefHeight(200);
base.setStyle("-fx-border-width: 1;-fx-border-color: red");
// base.prefWidthProperty().bind(scene.widthProperty());
BorderPane top = new BorderPane(); //top area of base
top.prefWidthProperty().bind(base.prefWidthProperty());
top.setPrefHeight(33);
top.setLeft(setBaseTitle());
top.setRight(setBaseButtons());
top.setStyle("-fx-border-width: 1;-fx-border-color: blue");
StackPane bottom = new StackPane(); //bottom are of base, content keeper
base.getChildren().addAll(top, bottom);
return base;
}
private Node setBaseButtons() {
return new HBox();
}
private Node setBaseTitle() {
return new Label();
}
public static void main(String[] args) {
launch(args);
}
Ok, ich hab das problem jetzt. Ich war die Anordnung derselben prefWidths und prefHeights, während ich die Erstellung vBoxes für gridpane Zellen. Ich änderte diese vBoxes pref-Größen wie will ich in meinem Layout. ich werde den code wenn ich darf 8 Stunden später.
InformationsquelleAutor cengha | 2014-05-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies mit einem
GridPane
, betrachten Sie es als mit drei Spalten mit den breiten 40%, 10% und 50%. Den oberen linken Knoten umfasst, die erste und zweite Spalte, die rechts oben nur die Dritte Spalte. Das Links unten ist nur in der ersten Spalte der unteren rechten erstreckt sich über die zweite und Dritte Spalte.Etwas wie:
Im code etwas wie:
Edit: text geändert von getColumnContraints zu getColumnConstraints.
InformationsquelleAutor James_D
Es ist eine sehr gute Lösung von @James_D dort oben. In meinem code, ich war die Zuordnung selben Größen für alle vBoxes. So gibt es andere lösen dieses problem - eigentlich können wir es nennen Befestigung grundlegenden Fehler. Hier arbeitet die code-Stück :
Gridpane.setColumnSpan(zoneTopLeft, 2)
InformationsquelleAutor cengha