Sto affrontando un comportamento di layout strano quando utilizzo GirdPanes in JavaFX 2. Mentre di solito sembra diffondere lo spazio orizzontale in modo uniforme tra più campi, non lo fa in altri casi. Ecco un esempio che mostra l'effetto:Posso forzare GridPane di JavaFX per distribuire lo spazio in modo uniforme?
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 questo esempio la finestra di dialogo si ridimensionerà bene se eseguita così com'è. Se la dimensione minima del riquadro extra viene modificata nella versione nel commento, le cose iniziano a essere errate: lo spazio aggiuntivo nella prima riga verrà trasformato in uno spazio vuoto (anziché crescere il primo campo), riducendo la dimensione della finestra di dialogo. lontano dal primo campo già piccolo, lasciando intatta l'area vuota.
C'è un modo per far sì che GridPane utilizzi effettivamente lo spazio orizzontale disponibile per il primo campo? Capisco che ridurre le dimensioni della finestra di dialogo al di sotto del minimo necessario non produce necessariamente buoni risultati, ma non espandere il campo, in primo luogo, mi sembra sbagliato.
Sto usando JavaFX da JDK 1.7.0_21.
Sono consapevole dei limiti, ma finora i miei esperimenti hanno prodotto risultati interessanti, ma non molto utili. Il calcolo delle larghezze sembra completamente rotto nel contesto delle dimensioni minime presenti - se tutte le colonne sono impostate su un 25% di larghezza la finestra diventa enorme. Sono passato a MiG Layout ormai. –