【问题标题】:JavaFX GridPane column sizingJavaFX GridPane 列大小调整
【发布时间】:2016-01-12 21:21:46
【问题描述】:

我正在尝试使用 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。

【问题讨论】:

    标签: java layout javafx javafx-8


    【解决方案1】:

    这似乎是Spinner bug,如果我改用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);
        }
    }
    

    但是将 TextFields 替换为 Spinners 之后,一切都变得松散了……

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 2020-12-05
      • 2014-10-31
      • 1970-01-01
      • 2014-06-20
      相关资源
      最近更新 更多