当前位置: 首页 > 知识库问答 >
问题:

Javafx网格布局留下大空间

聂华翰
2023-03-14

我正在用GUI制作一个基于文本的游戏。我正在使用Javafx,我正在尝试使用网格窗格排列元素。我正在尝试这样做:举例。

这是我的代码和目前的样子

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextArea;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class test extends Application {

    Stage window;
    ListView<String> listView;
    TextArea descArea = new TextArea();
    Label healthLabel = new Label("Health:");
    Label manaLabel = new Label("Mana:");
    Label healthDisplay = new Label("100/100");
    Label manaDisplay = new Label("100/100");

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("Game");


        GridPane grid = new GridPane();
        grid.setPadding(new Insets(10, 10, 10, 10));
        grid.setVgap(10);
        grid.setHgap(10);

        descArea.setPrefWidth(750);
        descArea.setPrefHeight(450);
        descArea.setWrapText(true);
        GridPane.setConstraints(descArea, 0, 0);

        GridPane.setConstraints(healthLabel, 1, 0);
        GridPane.setValignment(healthLabel, VPos.TOP);

        GridPane.setConstraints(healthDisplay, 2, 0);
        GridPane.setValignment(healthDisplay, VPos.TOP);

        GridPane.setConstraints(manaLabel, 1, 1);
        GridPane.setValignment(manaLabel, VPos.TOP);

        GridPane.setConstraints(manaDisplay, 2, 1);
        GridPane.setValignment(manaDisplay, VPos.TOP);


        listView = new ListView<>();
        listView.getItems().addAll("Action 1", "Action 2", "Action 3", "Action 4");
        listView.setPrefWidth(260);
        listView.setPrefHeight(150);
        GridPane.setValignment(listView, VPos.BASELINE);
        GridPane.setConstraints(listView, 0, 2);


        grid.getChildren().addAll(descArea, healthLabel, healthDisplay, manaLabel, manaDisplay, listView);

        Scene scene = new Scene(grid, 950, 750);
        window.setScene(scene);
        window.show();
    }

就像这个例子2所示,我试图将魔法力移到健康标签下,并缩小列表框。网格是正确的方法还是有更好的方法?

谢啦

共有2个答案

何志业
2023-03-14

GridPane似乎是一个很好的方法,是的。首先,我将标签及其显示放在HBox控件中,而不是将它们放在Grid中的不同单元格中。然后,要将法力标签上移到健康标签下,我只需将两个控件都放在VBox中,然后将VBox放在单元格中。

HBox healthBox = new HBox(10);
healthBox.getChildren().addAll(healthLabel, healthDisplay);

HBox manaBox = new HBox(10);
manaBox.getChildren().addAll(manaLabel, manaDisplay); 

VBox box = new VBox(10);
box.getChildren().addAll(healthBox, manaBox);

GridPane.setConstraints(box, 1, 0);

要确保列表视图没有填满整个单元格,可以设置列表视图的最大宽度:

<代码>列表视图。setPrefWidth(260);listView。setMaxWidth(260)

吕鹏
2023-03-14

我想把健康标签下的法力值调高

让描述区域横跨两行。这意味着两个标签分别位于一行(第0行和第1行),描述区域横跨两行:

// GridPane.setConstraints(descArea, 0, 0);
// (node, columnIndex, rowIndex, columnSpan, rowSpan):
GridPane.setConstraints(descArea, 0, 0, 1, 2);

并使列表框变小

您可以使用设置列表框的首选大小

listView.setPrefWidth(260);
listView.setPrefHeight(150);

默认情况下,GridPane将调整每个控件的大小以填充包含它的单元格的宽度。由于列表框与文本区域位于同一列,其首选宽度为750,因此这将强制列表框也具有750的宽度。您可以通过两种方式解决此问题:

设置列表框的最大宽度:

listView.setMaxWidth(260);

或者,如果您喜欢“GridPane”解决方案,请使用一些列约束来覆盖默认行为:

ColumnConstraints leftCol = new ColumnConstraints();
leftCol.setFillWidth(false);
grid.getColumnConstraints().addAll(leftCol, new ColumnConstraints());
 类似资料:
  • 我有一个小问题。我试图用JavaFX2.0创建一个好的GUI(可以调整大小),但我有一个小问题。我使用的是网格窗格,但当我在其中放置多个按钮时,当我将屏幕大小调整为较小尺寸时,按钮将以屏幕左侧的大小相互滑动。我可以为单元格或其他东西设置最小大小吗?我正在使用FXML进行设计。非常感谢你!

  • 我希望通过向窗格中添加gridPanes来使用JavaFX来建模一个简单的微波。微波 上面是结果应该是什么样子的,但是我在正确布置网格窗格时遇到了麻烦。

  • 主要内容:本节引言,1.相关属性总结图,2.使用实例:计算器布局的实现:,3.用法归纳:,4.使用GridLayout要注意的地方:,5.低版本sdk如何使用GridLayout:,本节小结本节引言 今天要介绍的布局是Android 4.0以后引入的一个新的布局,和前面所学的TableLayout(表格布局) 有点类似,不过他有很多前者没有的东西,也更加好用, 可以自己设置布局中组件的排列方式 可以自定义网格布局有多少行,多少列 可以直接设置组件位于某行某列 可以设置组件横跨几行或者几列 另外,

  • jQuery Mobile 提供了一套基于 CSS 的分列布局。然而,在移动设备上,由于考虑手机的屏幕宽度狭窄,一般不建议使用分栏分列布局。 但有时您想要将较小的元素(如按钮或导航标签)并排地排列在一起,就像是在一个表格中一样。这种情况下,推荐使用分列布局。 网格中的列是等宽的(合计是 100%),没有边框、背景、margin 或 padding。 这里有四种布局网格可供使用: 网格类:ui-gr

  • 今天要学的布局和上一节的 TableLayout 很类似,是在 Android 4.0 版本引入的布局方式。GridLayout 很有意思,自从引入之后在 Android 开发圈有以下特点: 大部分的开发者可能都不知道有这个布局方式的存在; 有些开发者虽然知道,但是很多时候不会去使用这个布局方式; 很少的开发者会花时间研究这个布局方式,也不会灵活的使用; 之所以会花一个章节来讲,是希望大家能够引起

  • 因为屏幕通常都比较窄,所以使用多栏布局的方法在移动设备上不是推荐的方法。但是总有时候你会想要把一些小的元素并排放置(比如按钮,或导航标签) Jquery Mobile框架提供了一种简单的方法构建基于css的分栏布局,叫做ui-grid Jquery Mobile提供了两种预设的配置布局:两列布局(class 含有 ui-grid-a)和三列布局 (class 含有 ui-grid-b)—几乎可满足