Die Schaltflächen müssen sich im zweiten Bild in einem Raster befinden. Der erste Screenshot), bis einer von ihnen geklickt wird (siehe zweite Screenshot). Beachten Sie, dass eine Klick -Schaltfläche nur die Schaltflächen in ihrem Feld "fixieren". < /P>
Für den Kontext versuche ich, das Murdle des Spiels als Desktop -Anwendung neu zu erstellen, und ich muss sicherstellen, dass es auf anderen Bildschirmen als meinen eigenen funktioniert. StateButton ist im Wesentlichen nur eine Wrapper, um eine Taste mit einigen Spieldaten zu kombinieren. Ich kann das bei Bedarf hinzufügen
Ich habe versucht, die Vorabbreite der Schaltflächen an ihre Höhe zu binden. Ich habe auch versucht, die Zeilenbreiten der Raster -Schädigung zu ändern. All dies endet mit unerwartetem Verhalten, bei dem die Schaltflächen während der Größenänderung nicht als Netz bleiben. Mein Code folgt.
Code: Select all
private GridPane drawBlock(Block block) {
GridPane gridPane = new GridPane();
gridPane.getStyleClass().add("board-block");
DoubleProperty doubleProperty = new SimpleDoubleProperty();
for (int i = 0; i < block.getRowsList().size(); i++) {
for (int j = 0; j < block.getRowsList().get(i).getBoxes().size(); j++) {
StateButton stateButton = new StateButton();
stateButton.setBox(block.getRowsList().get(i).getBoxes().get(j));
stateButton.setOnAction(e -> stateButton.updateState());
stateButton.textProperty().bind(stateButton.getBox().stateIconProperty());
// stateButton.maxHeightProperty().bind(stateButton.widthProperty());
stateButton.prefHeightProperty().bind(stateButton.widthProperty());
// stateButton.minHeightProperty().bind(stateButton.widthProperty());
stateButton.getBox().setState(Box.BoxState.UNSURE);
stateButton.getBox().update();
if (i+j==0) doubleProperty.bind(stateButton.widthProperty());
}
}
RowConstraints rowConstraints = new RowConstraints();
rowConstraints.prefHeightProperty().bind(doubleProperty);
gridPane.getRowConstraints().add(rowConstraints);
return gridPane;
}