首先,我要解释一下我的强迫症。我想要这样的桌子:

每个单元格的内容在执行时间内确定,但其大小固定为13x13。
因此,我的方法是创建一个平铺窗格,将列数设置为13,并创建单元格。
pane = new TilePane();
pane.setPadding(new Insets(10, 10, 10, 10));
pane.setVgap(5);
pane.setHgap(5);
pane.setPrefColumns(13);这样做是可行的:

但当我调整窗口尺寸时:

现在有更多的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);
}
}你有什么想法吗?
发布于 2017-04-12 13:00:40
将最大宽度设置为使用首选宽度是正确的方法。示例中代码的唯一问题是,您已经将瓷砖窗格作为场景的根目录。根节点将始终按照场景的大小调整大小,而忽略最小、最大和首选的大小。(如果不为场景指定大小,则根据根节点的首选大小对场景进行大小调整,但根节点仍然可以任意增长或缩小。)
因此,如果简单地将瓷砖窗格包装在另一个窗格中,它将按预期工作:
primaryStage.setScene(new Scene(new StackPane(pane)));


https://stackoverflow.com/questions/43369963
复制相似问题