Ich habe ein seltsames Layout-Verhalten, wenn ich GirdPanes in JavaFX 2 benutze. Während es normalerweise den horizontalen Abstand gleichmäßig zwischen mehreren Feldern zu verteilen scheint, tut es das in einigen anderen Fällen nicht. Hier ist ein Beispiel zeigt die Wirkung:Kann ich JavaFX's GridPane zwingen, den Raum gleichmäßig zu verteilen?
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class TestDialog extends Stage {
public TestDialog() {
super();
setTitle("Test");
GridPane grid = new GridPane();
grid.setHgap(5);
grid.setVgap(5);
grid.setPadding(new Insets(10, 10, 10, 10));
final TextField tField1 = new TextField();
final TextField tField2 = new TextField();
tField2.setMaxWidth(200);
grid.add(createLabel("Field 1:"), 0, 0);
grid.add(tField1, 1, 0);
grid.add(createLabel("Field 2:"), 2, 0);
grid.add(tField2, 3, 0);
Pane pane = new Pane();
// pane.setMinSize(600, 100); // first row has weird layout behaviour
pane.setMinSize(100, 100); // first row is fine
pane.setStyle("-fx-background-color: black");
grid.add(pane, 0, 1, 4, 1);
grid.setMinSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE);
setScene(new Scene(grid));
}
private Label createLabel(String text) {
Label label = new Label(text);
label.setMinSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE);
return label;
}
public static void main(String[] args) {
TestApplication.main(args);
}
public static class TestApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
TestDialog dialog = new TestDialog();
dialog.showAndWait();
}
public static void main(String[] args) {
launch(args);
}
}
}
In diesem Beispiel wird der Dialog gut skalieren, wenn laufen wie. Wenn die Mindestgröße des zusätzlichen Bereichs auf die Version im Kommentar geändert wird, dann gehen die Dinge schief: Extra-Speicherplatz in der ersten Zeile wird in einen leeren Bereich umgewandelt (anstatt das erste Feld zu vergrößern), wodurch die Größe des Dialogfelds verringert wird es entfernt sich von dem bereits kleinen ersten Feld und lässt die leere Fläche intakt.
Gibt es eine Möglichkeit, GridPane tatsächlich den verfügbaren horizontalen Speicherplatz für das erste Feld zu verwenden? Ich verstehe, dass das Reduzieren der Dialoggröße unterhalb des erforderlichen Minimums nicht notwendigerweise gute Ergebnisse hervorbringt, aber das Feld nicht in erster Linie zu erweitern, scheint mir einfach falsch zu sein.
Ich benutze JavaFX wie JDK 1.7.0_21.
Ich bin mir der Einschränkungen bewusst, aber bis jetzt haben meine Experimente alle interessante, aber nicht sehr nützliche Ergebnisse hervorgebracht. Die Berechnung der Breiten scheint im Kontext der vorhandenen Mindestgrößen völlig gebrochen - wenn alle Spalten auf 25% Breite eingestellt sind, wird das Fenster sehr groß. Ich bin inzwischen zu MiG Layout übergegangen. –