当这个类运行时,在底部(按下按钮后)生成的文本将其他控件彼此推开并压缩。我是否可以保留文本,但不能压缩上面的控件?注意:这个类可以通过从类外部调用Application.launch(CSSTrial1.class);来运行。
public class CSSTrial1 extends Application {
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("CSS Trial");
stage.setResizable(false);
final GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25));
grid.add(new Label("Character Name:"), 0, 0);
final TextField nameField = new TextField("");
nameField.setPromptText("Randel James");
grid.add(nameField, 1, 0);
grid.add(new Label("Weapon:"), 0, 1);
final ComboBox<String> weapons = new ComboBox<>();
weapons.getItems().addAll("Katsuragi x2", "Assault Rifle",
"Pistol", "RPG-7", "Barret 50. Cal");
grid.add(weapons, 1, 1);
HBox box = new HBox(10);
box.setAlignment(Pos.BOTTOM_RIGHT);
Button submit = new Button("Submit Character");
submit.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
grid.add(new Text("Signed In As: " + nameField.getText()
+ ", Weapon: " + weapons.getValue()), 0, 6);
}
});
box.getChildren().add(submit);
grid.add(box, 1, 3);
Scene scene = new Scene(grid, 300, 275);
stage.setScene(scene);
stage.show();
}
} 发布于 2014-01-02 15:51:49
定义一个ColumnConstraints对象,并在网格窗格中使用它:
ColumnConstraints firstColumn = new ColumnConstraints();
grid.getColumnConstraints().addAll(firstColumn);您可以在列约束上设置min、pref和max宽度,以控制该列允许调整大小的程度(例如,将所有三种设置为相同的固定值将强制该列为该大小)。
您还可能希望设置文本的包装宽度,以便它占用更少的空间。
发布于 2014-01-02 09:00:37
根据爪哇
默认情况下,行和列的大小将适合其内容;列的宽度将足以容纳最宽的子列,而行的高度将适合最高的子列。
因为要将nameField添加到第一列,所以当文本的长度扩大时,整个列就会膨胀,从而导致“将控件推开”。我建议要么创建一个新的窗格,让nameField跨两列,要么使用不同的布局。您甚至可以考虑在JavaFX场景生成器中使用FXML。
发布于 2014-01-02 09:13:03
可能尝试使用另一列跨度插入文本,如在修改后的代码中:
submit.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
grid.add(new Text("Signed In As: " + nameField.getText()
+ ", Weapon: " + weapons.getValue()), 0, 6,2,1);//colum span=2, but row span is1
}
});https://stackoverflow.com/questions/20879163
复制相似问题