javafx - 获取 Gridpane 的当前宽度和高度
问题描述
imageGrid = new GridPane();
imageGrid.prefWidthProperty().bind(gallerie.widthProperty().multiply(1.00));
imageGrid.prefHeightProperty().bind(gallerie.heightProperty().multiply(0.9));
imageGrid.setPadding(new Insets(20, 20, 20, 20));
imageGrid.setHgap(20);
imageGrid.setVgap(20);
imageGrid.setStyle("-fx-background-color: #154BE5");
…………
static void loadCurrentImages(ArrayList<File> imageFiles) {
ArrayList<ImageView> ivs = new ArrayList<>();
int i = 0;
int k = 0;
int j = 0;
for (File f : imageFiles) {
ImageView iv = new ImageView();
iv.setFitWidth(100);
iv.setPreserveRatio(true);
iv.setSmooth(true);
iv.setImage(new Image(f.toURI().toString()));
ivs.add(iv);
imageGrid.add(ivs.get(i), k, j);
i++;
k++;
if(k > imageGrid.widthProperty().intValue() / 100){ //???????
k = 0;
j++;
}
}
}
在最后一个 if 子句中,我想使用网格的当前大小,但我不知道如何设置它,因为它本身绑定到另一个大小(画廊)
我想获取当前的 int 值
解决方案
不会立即计算节点的布局边界。仅当在场景图中渲染节点时才会计算。要根据需要获得它们,您需要明确请求布局。
node.applyCss();
node.requestLayout();
请注意,使用上述两行可能会对性能产生轻微影响。
忽略所有代码问题(静态、命名约定、实际逻辑..),下面是您可以尝试的快速想法。
static void loadCurrentImages(ArrayList<File> imageFiles) {
ArrayList<ImageView> ivs = new ArrayList<>();
int i = 0;
int k = 0;
int j = 0;
for (File f : imageFiles) {
ImageView iv = new ImageView();
iv.setFitWidth(100);
iv.setPreserveRatio(true);
iv.setSmooth(true);
iv.setImage(new Image(f.toURI().toString()));
ivs.add(iv);
imageGrid.add(ivs.get(i), k, j);
i++;
k++;
// Requesting layout
imageGrid.applyCss();
imageGrid.requestLayout();
if(k > imageGrid.widthProperty().intValue() / 100){ //???????
k = 0;
j++;
}
}
}
推荐阅读
- python - 如何自动从excel中复制数据并粘贴到word中?
- java - java - 如何从firebase中检索数据以获取java中的if else条件
- microsoft-edge - Microsoft Edge 始终打开新选项卡而不是新窗口
- android - 在多模块应用程序中配置 Hilt
- javascript - 在 react-p5 中添加缩放功能
- java - 在 HP-UX 上运行 java jar 文件作为 UNIX 作为“os.name”
- swift - SwiftUI 中的垂直卡片堆栈视图
- python - 无法将流输出 (h264) 保存到文件
- c# - 从(不同的)类更改 TabbedPage 绑定属性 - Xamarin.Forms
- python - Python RegEx 检查字符串