gpt4 book ai didi

java - setPreferredSize 的副作用是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:01 27 4
gpt4 key购买 nike

我有一个包含多个面板的窗口。我无权访问窗口代码。 (我只能修改面板的代码。)

我从面板中删除了几个组件。窗口已缩小其大小。但是窗口太小,无法正确显示所有内容。

我添加了行 setPreferredSize(getPreferredSize());。现在窗口大小合适。

setPreferredSize 的副作用是什么?

编辑:使用了 BorderLayout。哪个应该忽略 getXXXSize()。我的面板在中心。不适合屏幕的面板在北方。

最佳答案

这是正在发生的事情:

  • getPreferredSize() 查看之前是否设置了大小。如果不是,该方法会向组件本身(即您的 JPanel)的 LayoutManager 询问首选尺寸,然后根据组件计算出首选尺寸。
  • setPreferredSize(...) 然后在 JPanel 上设置这个值,记住它以备后用。
  • 稍后您将删除 JPanel 的一些组件。
  • 甚至稍后,当窗口尝试重新布局自身(或被告知这样做)时,窗口的(或内容 Pane 的/RootPane 的/...)Layoutmanager 调用您的 JPanel 的 getPreferredSize()再次方法。
  • 现在 getPreferredSize() 不询问 JPanel 的 LayoutManager,而只是返回之前由 setPreferredSize() 设置的存储大小。

对于宽度,BorderLayout 忽略了 NORTH 和 south 组件的首选宽度,它只考虑了 CENTER、EAST 和 WEST。 (与高度类似)。

我刚刚看了一下 BorderLayout.preferredLayoutSize 的实现(在 Sun 的 1.6.0_13 中),它是这样工作的:

宽度计算为

max(  EAST.width + CENTER.width + WEST.width + h-gaps,
NORTH.width, SOUTH.width ) + insets

高度计算为

max( EAST.height, CENTER.height, WEST.height)
+ NORTH.height + SOUTH.height + v-gaps + insets

(每一个width/height都是这些组件的preferredSize的值。)如果五个组件中的某些组件缺失,则不包括它们的高度/宽度,间隙也不包括在内。)

minimalLayoutSize 的工作原理相同,而 maximumLayoutSize 只是返回 Integer.MAX_VALUE

因此,原则上它应该开箱即用。

但一般来说,如果窗口的布局不在你的控制之下,你应该不必担心不受你控制的组件被切断:-)

关于java - setPreferredSize 的副作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5103063/

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