Tôi đang đối mặt với một chút hành vi bố cục lạ khi sử dụng GirdPanes trong JavaFX 2. Trong khi nó thường dường như lan rộng không gian ngang đồng đều giữa nhiều trường, nó không làm như vậy trong một số trường hợp khác. Dưới đây là ví dụ cho thấy hiệu ứng:Tôi có thể buộc GridPane của JavaFX phân phối không gian đồng đều không?
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);
}
}
}
Trong ví dụ này, hộp thoại sẽ thay đổi kích thước độc đáo nếu chạy. Nếu kích thước tối thiểu của Pane bổ sung được thay đổi thành phiên bản trong chú thích, thì mọi thứ bắt đầu sai: không gian thừa trong hàng đầu tiên sẽ được chuyển thành không gian trống (thay vì phát triển trường đầu tiên), giảm kích thước hộp thoại nó đi từ trường đầu tiên đã nhỏ, để lại vùng trống còn nguyên vẹn.
Có cách nào để GridPane thực sự sử dụng không gian ngang có sẵn cho trường đầu tiên không? Tôi hiểu rằng việc giảm kích thước hộp thoại bên dưới mức tối thiểu cần thiết không nhất thiết phải là kết quả sản phẩm tốt, nhưng không mở rộng lĩnh vực này ở nơi đầu tiên có vẻ như không đồng đều với tôi.
Tôi đang sử dụng JavaFX như JDK 1.7.0_21.
Tôi nhận thức được những hạn chế, nhưng cho đến nay các thử nghiệm của tôi đều tạo ra những kết quả thú vị nhưng không hữu ích. Việc tính toán độ rộng có vẻ hoàn toàn bị phá vỡ trong bối cảnh các kích thước tối thiểu hiện tại - nếu tất cả các cột được đặt thành 25% chiều rộng, cửa sổ sẽ rất lớn. Tôi đã chuyển sang MiG Layout ngay bây giờ. –