我可以在显示之前获得正确的JComponent大小吗?

Man*_*War 8 java swing jcomponent

何时计算JComponent的大小?在屏幕上显示之后或之前?如果我.getSize()之前发送消息.setVisible(true),它会给我正确答案吗?谢谢

Hov*_*els 7

我有时会在调试时检查组件的大小,以找出为什么我看不到它们.在大多数情况下,在渲染 GUI时将实现大小.在顶层窗口调用pack()setVisible(true)调用时,可能会发生这种情况.我通常的方法调用序列是首先调用,pack()因为它告诉布局管理器布置他们负责的组件,并设置组件和GUI的大小,然后调用setLocationRelativeTo(null)我的GUI中心,然后调用setVisible(true)以显示它.

  • `setLocationRelativeTo(null)` - 对于在1.5+ JRE中运行的GUI,我通常使用`setLocationByPlatform(true)`. (2认同)

cam*_*ckr 6

布局管理器负责确定组件的大小,因此在将组件添加到框架并且框架已被打开(可见)之前,您不知道其实际大小.

如果您使用的布局管理器尊重组件的首选大小,那么您可以使用:

component.getPreferredSize();
Run Code Online (Sandbox Code Playgroud)

为什么你认为你需要知道尺寸?通常,您不必担心大小,让布局管理器完成其工作.


tra*_*god 6

除了通常pack()> setVisible(true)> getPreferredSize()序列,就可以validate()将相关的Container预览几何形状,如图所示这里.


Lui*_*hou 6

如果我理解正确,你想知道组件大小的原因是一旦用户点击"更多选项"按钮就重置JWindow的大小,不是吗?我建议做到以下几点:当用户点击该按钮,更新您的UI添加额外的元件,和执行pack()JWindow.它应调整到适当的大小.

  • +1这就是我的想法.但遗憾的是,在这种情况下并非如此简单.如果一个目录包含100(或数千)个文件,它可能会产生一个比可用屏幕空间大的`JWindow`.在这种情况下,我建议将复选框放在一个放在`JPanel`中的`JScrollPane`中.反过来,"JPanel"将设置最大尺寸.复选框填满可用空间后,会出现滚动条. (3认同)