首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX 2.0:添加文本移位其他控件

JavaFX 2.0:添加文本移位其他控件
EN

Stack Overflow用户
提问于 2014-01-02 08:41:25
回答 3查看 170关注 0票数 2

当这个类运行时,在底部(按下按钮后)生成的文本将其他控件彼此推开并压缩。我是否可以保留文本,但不能压缩上面的控件?注意:这个类可以通过从类外部调用Application.launch(CSSTrial1.class);来运行。

代码语言:javascript
复制
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();
}

}    
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-02 15:51:49

定义一个ColumnConstraints对象,并在网格窗格中使用它:

代码语言:javascript
复制
ColumnConstraints firstColumn = new ColumnConstraints();
grid.getColumnConstraints().addAll(firstColumn);

您可以在列约束上设置min、pref和max宽度,以控制该列允许调整大小的程度(例如,将所有三种设置为相同的固定值将强制该列为该大小)。

您还可能希望设置文本的包装宽度,以便它占用更少的空间。

票数 1
EN

Stack Overflow用户

发布于 2014-01-02 09:00:37

根据爪哇

默认情况下,行和列的大小将适合其内容;列的宽度将足以容纳最宽的子列,而行的高度将适合最高的子列。

因为要将nameField添加到第一列,所以当文本的长度扩大时,整个列就会膨胀,从而导致“将控件推开”。我建议要么创建一个新的窗格,让nameField跨两列,要么使用不同的布局。您甚至可以考虑在JavaFX场景生成器中使用FXML。

票数 0
EN

Stack Overflow用户

发布于 2014-01-02 09:13:03

可能尝试使用另一列跨度插入文本,如在修改后的代码中:

代码语言:javascript
复制
 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
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20879163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档