微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JScrollPane时容器宽度不可靠

如何解决使用JScrollPane时容器宽度不可靠

我制作了一个自定义的LayoutManager,以在所提供的空间中以均匀的正方形呈现组件,它使用以下方法来做到这一点:

index.html

代码直接应用于JFrame时可以按预期工作,但是如果我尝试将其插入JScrollPane内,则它很快就会崩溃。

仅将其添加到JFrame并看起来正确时,控制台显示为:

    @Override
    public void layoutContainer(Container parent) {

        if(parent.getWidth() == 0) {
            return;
        }

        int columns = parent.getWidth() / gridSizeWidth;
        
        
        int x = 0,y = 0;
        for(int i = 0; i < parent.getComponentCount(); i++) {
            Component comp = parent.getComponent(i);

            comp.setBounds(x * gridSizeWidth,y * gridSizeHeight,gridSizeWidth,gridSizeHeight);
            
            if(++x == columns) {
                x = 0;
                y++;
            }

        }
        System.out.println(parent.getClass().getSimpleName() + ": " + parent.getWidth());

    }

但是,将其添加到JScrollPane中时...

TileScroller: 422

它会非常快速地重复此操作,并会因快速更改布局而产生闪烁效果。据我所知,它可以将每种组件正确地放置在每种尺寸的正确位置,但是问题是尺寸在波动。

这是我创建JScrollPane的代码

TileScroller: 419
TileScroller: 26816
TileScroller: 1716224
TileScroller: 109838336
TileScroller: 419
TileScroller: 26816
TileScroller: 1716224
TileScroller: 109838336
TileScroller: 419
...

这可能是什么原因,我该如何预防?

解决方法

问题是由于preferredLayoutSize和minimumLayoutSize的实现不正确所致。正确使用这些方法修复它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。