gpt4 book ai didi

JavaFX GridPane 列大小调整

转载 作者:行者123 更新时间:2023-12-01 11:04:01 25 4
gpt4 key购买 nike

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

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

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_60。

最佳答案

这似乎是 Spinner bug ,如果我使用 TextField 来代替,我会得到更好的结果。

示例:

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);
}
}

但是用 Spinner 替换 TextField ,一切都会变得困惑......

关于JavaFX GridPane 列大小调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com