gpt4 book ai didi

Java Swing getSize() 返回不准确的值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:02 26 4
gpt4 key购买 nike

最简单地说,我试图使用组件的宽度来设置其父容器的大小。但是,为组件返回的宽度偏移了大约 4 个像素。

更多详情:我有一个对话框,其中的子面板在中间水平分布。对话框应始终与此子面板列表一样宽,并在列表太长时使用滚动条。我只是尝试使用 1 个子面板来开始。无论我做什么,返回的子面板的大小总是错误大约 4 个像素。我可以看到子面板右侧有一个非常烦人的 4 像素间隙,使我的对话框看起来很可怕。随着更多子面板的添加,效果显然会更加复杂。

我尝试使用什么来获取宽度:

sup-panel.getSize().width;
sub-panel.getBounds().width;
sub-panel.getWidth();
sub-panel.getPreferredSize().width;

所有返回相同的错误值。

我尝试调用以使其正常运行的其他东西:

parent.validate();
parent.repaint();
parent.doLayout();

如有任何帮助,我们将不胜感激。是故意的吗?我是否缺少尺寸背后的一些概念?这看起来是一致的,但如果我能在某处读到这被记录在案,那就太好了。

仅供引用:我使用的是 java 1.3(支持旧版应用)

注意:这不是调整窗口大小的问题,这部分发生得很好。子面板的大小似乎已正确设置,因为对其大小的更改反射(reflect)在为我的代码返回的值中。这些值总是略有偏差。

注意 2:在父容器上调用 pack() 使窗口看起来像我想要的那样,但它不适用于我的所有情况,因为最终在出现足够多的子面板后需要出现滚动条.在这种情况下,pack() 只会使我的对话框超宽,并使滚动条无用。

编辑: 我已经解决了我的问题。相当尴尬的是,我所有的子面板都没有像它们应该的那样具有统一的宽度。有 2 种解决方案有效。强制它们全部统一,这可能会很棘手,具体取决于您对布局的掌握程度。另一个是总结我希望可见的前 n 个面板的各个宽度。请注意,为了使此解决方案有效,我必须为每个子组件的宽度添加一个额外的 +1。不知道为什么,但我用各种边框和布局测试了它,它非常一致;我想可能有一个像素的额外空间是我没有认真考虑的地方。但重要的是它现在可以完美运行。下面是一个数学示例(抱歉老派的无类型集合需要强制转换,Java 1.3):

int width = 0;
for(int i = 0; i < MAX_VISIBLE_PANELS; i++)
{
width += ((SubPanel)panelList.get(i)).getWidth();
width ++;//extra pixel per panel
}

最佳答案

我想到了两件事:

  1. 您可以使用 validate()pack() 之前建立子面板的几何形状供以后引用,如本 example 所示.

  2. 您可能需要考虑 FlowLayout 指定的默认间隙,这是 JPanel 的默认布局。

关于Java Swing getSize() 返回不准确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231675/

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