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

JavaFX GridPane列大小调整

薛华容
2023-03-14

我正在尝试使用两列创建一个具有特定布局的窗口,但我不能完全按照我想要的方式工作。

首先,一些简化的示例代码:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Spinner;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class GridTest extends Application {
    @Override
    public void start(final Stage stage) throws Exception {
        final GridPane grid = new GridPane();
        grid.setHgap(5);
        grid.setVgap(5);
        grid.setPadding(new Insets(10, 10, 10, 10));

        grid.add(new Label("Something:"), 0, 0);
        final Spinner<?> s1 = new Spinner<>();
        grid.add(s1, 1, 0);

        grid.add(new Label("Another thing:"), 0, 1);
        final Spinner<?> s2 = new Spinner<>();
        grid.add(s2, 1, 1);

        final Button b = new Button("A button");
        grid.add(b, 0, 2, 2, 1);

        stage.setScene(new Scene(grid, 400, 150));
        stage.show();
    }

    public static void main(final String... args) {
        launch(args);
    }
}

以下是我想要的:

  • 微调器和按钮应使用所有可用宽度

我试着使用各种各样的限制,但我无法让一切都正常工作。我认为我发现的主要问题是,在让微调器使用可用宽度后,它们在缩小窗口时拒绝收缩。

我正在Linux中使用Oracle JDK 1.8.0\u 60。

共有1个答案

邢凯歌
2023-03-14

这似乎是一个微调器错误,如果我使用TextFields,我会得到更好的结果。

示例:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class GridTest extends Application {
    @Override
    public void start(final Stage stage) throws Exception {
        final GridPane grid = new GridPane();
        grid.setHgap(5);
        grid.setVgap(5);
        grid.setPadding(new Insets(10, 10, 10, 10));

        ColumnConstraints cc = new ColumnConstraints();
        cc.setMinWidth(GridPane.USE_PREF_SIZE);
        grid.getColumnConstraints().add(cc);
        cc = new ColumnConstraints();
        cc.setMinWidth(GridPane.USE_PREF_SIZE);
        cc.setHgrow(Priority.ALWAYS);
        grid.getColumnConstraints().add(cc);

        grid.add(new Label("Something:"), 0, 0);
        final TextField t1 = new TextField();
        grid.add(t1, 1, 0);

        grid.add(new Label("Another thing:"), 0, 1);
        final TextField t2 = new TextField();
        grid.add(t2, 1, 1);

        final Button b = new Button("A button");
        b.setMaxWidth(Double.MAX_VALUE);
        grid.add(b, 0, 2, 2, 1);

        stage.setScene(new Scene(grid, 400, 150));
        stage.show();
    }

    public static void main(final String... args) {
        launch(args);
    }
}

但将文本字段替换为微调器,一切都会失控。。。

 类似资料:
  • 问题内容: 我有以下脚本将CSV文件转换为XLSX文件,但是我的列大小非常狭窄。每次我必须用鼠标拖动它们以读取数据时。有人知道如何设置列宽吗? 这是我正在使用的代码。 问题答案: 您可以估计(或使用等宽字体)来实现此目的。假设数据是一个嵌套数组,例如[[‘a1’,’a2’],[‘b1’,’b2’]] 我们可以获取每一列中的最大字符数。然后设置宽度。宽度正好是等宽字体的宽度(如果至少未更改其他样式,

  • 我有一个由两列组成的SWT网格布局。一列是一个标签,它应该正好是文本的水平尺寸。另一列是StyledText,它应该占据水平空间的剩余部分。但是,如果标签的大小发生变化(因为文本发生了变化),网格不会调整大小。这导致标签与StyledText重叠。我想要的是网格调整列的大小,这样左边的列变得足够大以容纳更长的文本,而右边的列正好缩小这个量。有几个关于SWT网格布局和在SO上调整大小的问题,但是没有

  • 问题内容: 我一直试图(徒劳地)建立一个页面,当我更改窗口大小时,其元素将重新调整大小。我可以在CSS中使用它来处理图像,但是没有问题,但是我似乎无法在文本上完成相同的操作,而且我不确定在CSS中是否有可能。而且我似乎找不到能完成此任务的jQuery脚本。 当用户调整窗口大小时,我实质上希望页面能够动态流畅地缩放,而无需用户调用页面缩放。通过css在我的img div上这可以正常工作,但对于文本则

  • 问题内容: 如何从FXML设置TableView的调整大小策略?我这样累了,但是不起作用: 问题答案: 要使用fxml为tableview设置columnresize策略,必须使用标记。这将在javafx 2.2及更高版本上工作。 参考: 使用fxml定义TableView columnResizePolicy属性

  • 我尝试过自动调整我使用Jython Apache POI制作的Excel列的大小。我找到了这个线程:Apache POI Excel-如何配置要扩展的列?,但我仍然搞不清楚。 我尝试添加“sheet1.autoSizeColumn(1)”,但它不会改变任何东西。在每个可用列上调用它不是更好吗,因为为什么不希望每个列的格式都很好呢? 也许这在Jython中是不可能的? 恭喜你,克里斯托夫。

  • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码: