首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlowPane自动水平空间

FlowPane自动水平空间
EN

Stack Overflow用户
提问于 2022-07-19 10:45:39
回答 1查看 41关注 0票数 4

我有一个大小相等的长方形的flowpane,我遇到了这个问题,当这个空间不足以容纳另一列的时候,我希望它在其他列之间平分。

我想要实现的一个例子是windows中的文件资源管理器是如何工作的,请参阅gif下面的参考文件。

默认的FlowPane行为看起来不像这样,它留下的剩余宽度不能适应区域末尾的一个新的子区域,如gif下面所示

而且我找不到任何API或文档来帮助我实现我的目标,我想在width属性上添加一个侦听器并相应地调整hGap属性,如下所示

[ flowPaneWidth - (sum of the widths of the children in one column) ] / (column count - 1)

但同样,我不知道如何计算列数,因此,任何帮助将不胜感激。

如果有人想尝试他们的想法,这里有一个MRE:

代码语言:javascript
复制
public class FPAutoSpace extends Application {
    @Override
    public void start(Stage ps) throws Exception {
        FlowPane root = new FlowPane(10, 10);
        root.setPadding(new Insets(10));
        
        for(int i = 0; i < 20; i++) {           
            root.getChildren().add(new Rectangle(100, 100, Color.GRAY));
        }

        ps.setScene(new Scene(root, 600, 600));
        ps.show();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-19 11:13:54

经过一番思考,我试着实现问题中提到的想法:

在width属性上添加侦听器并相应地调整hGap属性

但是,我将侦听器添加到needsLayout属性中,如下所示:

代码语言:javascript
复制
public class FPAutoSpace extends Application {
    private double nodeWidth = 100;
    @Override
    public void start(Stage ps) throws Exception {
        FlowPane root = new FlowPane();
        root.setVgap(10);

        for (int i = 0; i < 20; i++) {
            root.getChildren().add(new Rectangle(nodeWidth, nodeWidth, Color.GRAY));
        }

        root.needsLayoutProperty().addListener((obs, ov, nv) -> {                   
            int colCount = (int) (root.getWidth() / nodeWidth);
            //added 4 pixels because it gets glitchy otherwise
            double occupiedWidth = nodeWidth * colCount + 4;
            double hGap = (root.getWidth() - occupiedWidth) / (colCount - 1);
            root.setHgap(hGap);
        });

        StackPane preRoot = new StackPane(root);
        preRoot.setPadding(new Insets(10));
        preRoot.setAlignment(Pos.TOP_LEFT);
        ps.setScene(new Scene(preRoot, 600, 600));
        ps.show();
    }
}

不确定这将如何在多个节点FlowPane中支持,但它适用于MRE。

如果你认为有更好的方法,请告诉我。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73035514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档