如何解决使用JScrollPane时容器宽度不可靠
我制作了一个自定义的LayoutManager,以在所提供的空间中以均匀的正方形呈现组件,它使用以下方法来做到这一点:
index.html
此代码直接应用于JFrame时可以按预期工作,但是如果我尝试将其插入JScrollPane内,则它很快就会崩溃。
@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 举报,一经查实,本站将立刻删除。