gno*_*med 6 java user-interface swing awt sizing
最简单的说,我试图使用组件的宽度来设置其父容器的大小.但是,为组件返回的宽度偏差约4个像素.
更多细节:我有一个对话框,其子面板水平分布在其中间.该对话框应始终与此子面板列表一样宽,并在列表太长时使用滚动条.我尝试使用1个子面板虽然开始.无论我做什么,返回的子面板的大小总是错误大约4个像素.我只能在子面板右侧看到一个非常恼人的4像素间隙,使我的对话看起来很可怕.随着更多子面板的添加,效果明显增加.
我尝试使用什么来获得宽度:
sup-panel.getSize().width;
sub-panel.getBounds().width;
sub-panel.getWidth();
sub-panel.getPreferredSize().width;
Run Code Online (Sandbox Code Playgroud)
所有都返回相同的错误值.
我尝试过让其表现的其他事情:
parent.validate();
parent.repaint();
parent.doLayout();
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.这是故意的吗?我错过了尺寸背后的一些概念吗?它似乎是一致的,但如果我能在某处记录下来这将是很好的.
仅供参考:我使用的是java 1.3(支持遗留应用程序)
注意:这不是让窗口调整大小的问题,这部分发生得很好.并且子面板的大小似乎已正确设置,因为对其大小的更改将反映在为我的代码返回的值中.这些值总是略微偏离.
注意2:在父容器上调用pack()会使窗口看起来像我想要的那样,但它对我来说并不适用于所有场景,因为最终在存在足够的子面板之后需要存在滚动条.在这种情况下,pack()将简单地使我的对话框超宽,并使滚动条无用.
编辑:我已经解决了我的问题.相当令人尴尬的是,我所有的子面板都没有像它们应该的那样均匀的宽度.有两种解决方案可行.强制它们都是统一的,这可能很棘手,这取决于你对布局有多好.另一个是总结我希望看到的前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
}
Run Code Online (Sandbox Code Playgroud)
我想到两件事:
您可以使用validate()before 来pack()建立子面板的几何形状以供以后参考,如本示例所示。
您可能需要考虑 指定的默认间隙FlowLayout,这是 的默认布局JPanel。
| 归档时间: |
|
| 查看次数: |
4487 次 |
| 最近记录: |