Javafx Tile窗格,设置最大列数

时间:2017-04-12 12:46:31

标签: user-interface javafx

首先,我将解释我的观点。我想渲染一个像这样的表:

enter image description here

每个单元格的内容在执行时间中确定,但是他的大小固定为13x13。

因此,我的方法是创建一个平铺窗格,将列数设置为13并创建单元格。

pane = new TilePane();
pane.setPadding(new Insets(10, 10, 10, 10));
pane.setVgap(5);
pane.setHgap(5);
pane.setPrefColumns(13);

这有效:

enter image description here

但是当我调整窗口大小时:

enter image description here

现在有13列了!

我的测试代码:

package sample;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Region;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            TilePane pane = new TilePane();
            pane.setPadding(new Insets(10, 10, 10, 10));
            pane.setVgap(5);
            pane.setHgap(5);
            pane.setPrefColumns(13);
            pane.setMaxWidth(Region.USE_PREF_SIZE);
            ObservableList<Node> list = pane.getChildren();

            for (int i = 0;i < 200;i++){
                Label view = new Label();
                view.setText(""+(i+1));
                list.add(view);
            }

            primaryStage.setScene(new Scene(pane,400,400));
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

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

你有什么想法吗?

1 个答案:

答案 0 :(得分:3)

设置最大宽度以使用首选宽度是正确的方法。示例中代码的唯一问题是您已将tile窗格设置为场景的根。根节点的大小将始终调整为场景的大小,忽略最小,最大和首选大小。 (如果未指定场景的大小,则根据根节点的首选大小调整场景大小,但仍允许根节点任意增大或缩小。)

因此,如果您只是将磁贴窗格包装在另一个窗格中,它将按预期工作:

primaryStage.setScene(new Scene(new StackPane(pane)));

enter image description here

enter image description here