gpt4 book ai didi

java - 未设置 JPanel 首选大小

转载 作者:行者123 更新时间:2023-11-29 06:45:21 25 4
gpt4 key购买 nike

如果您没有明确设置,什么时候设置 JPanel 的首选大小?

我有以下代码:

private static class ScrollableJPanel extends JPanel implements Scrollable {
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
.
.
.
}

和这段代码:

    myPanel = new ScrollableJPanel();
// Add a bunch of controls to the panel.
final JScrollPane scroll = new JScrollPane(myPanel);
scroll.setAutoscrolls(true);
scroll.setHorizontalScrollBarPolicy(
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

但是,在调用 getPreferredScrollableViewportSize() 时 myPanel 的首选大小似乎是任意值 (4225, 34),并且 prefSizeSet = false。

根据Java documentation ,这是定义此方法的合理方式。然而,myPanel 的实际大小远大于 34 像素,因此视口(viewport)太小了。

我在这里做错了什么?我应该明确设置 myPanel 的首选大小吗?我试过了,但我想使用布局管理器确定的实际大小,而不是只是猜测稍后会被覆盖。

请注意,我的问题不是如何为 JPanel 设置确切的大小。我希望布局管理器能够做到这一点。我也不想明确设置首选大小。我认为这也是由布局管理器处理的。我想知道的是为什么布局管理器没有为首选大小本身设置一个合理的值,以便我可以返回一个合理的 PreferredScrollableViewportSize。

最佳答案

在 AWT(然后是 Swing)中,Container.getPreferredSize() 要么:

  • 返回由 setPreferredSize() 明确设置的大小,
  • 或者如果未显式调用 setPreferredSize(),则由 LayoutManager 计算大小

因此,getPreferredSize() 返回的内容在很大程度上取决于您为 ScrollableJPanel 使用的 LayoutManager

请注意,大多数 LayoutManager 将对 Container 的所有直接子级使用 getPreferredSize()getPreferredSize() 被调用。这是一个递归过程(如果 child 自己有 child )并且可能涉及多个不同的 LayoutManager

关于java - 未设置 JPanel 首选大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com