gpt4 book ai didi

java - 对固定大小的组件使用覆盖 getPreferredSize() 而不是使用 setPreferredSize()

转载 作者:太空狗 更新时间:2023-10-29 22:56:09 25 4
gpt4 key购买 nike

我在这里读了一些帖子,我开始了解为什么有些人会这样做

@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}

代替

setPreferredSize(new Dimension(500, 500));

第二个不是更好吗,因为它只创建一个 Dimension 对象,而第一个可能创建多个(即使它没有那么浪费内存)?还是我错了?有区别吗?

最佳答案

一个很大的区别是该值如何随时间变化,因此您选择的值应该取决于您要对代码执行的操作。

如果您只是在代码中调用 setPreferredSize(new Dimension(500, 500));,它将按照您的预期运行 - 它将首选尺寸设置为 500x500。但是,应用程序中的其他代码可能会用新值覆盖此值 - 任何内容都可以调用 setPreferredSize(),最后一次调用此方法将是最终结果。

但是,如果您在代码中覆盖 getPreferredSize() 方法,它将始终返回 500x500。您的任何代码是否调用了 setPreferredSize() 方法都没有关系,因为它们实际上被忽略了。如果您还重写了 getMinimumSize()getMaximumSize(),则可以在组件上强制使用固定大小,无论窗口和其他窗口的大小如何,该组件都不应更改成分。

但是,正如@Andrew Thompson 在评论中提到的,这并不能保证,因为一些布局管理器可以选择忽略这些,特别是如果您正在编写自己的布局管理器,并向某些父容器添加自定义组件也将忽略这些方法,具体取决于组件的使用位置/方式。无论如何,它仍然比调用 setPreferredSize() 更严格,后者很容易被其他代码调用并被完全覆盖。

我还为我的任何自定义组件覆盖了 getPreferredSize() 方法(加上 getMinimumSize()getMaximumSize()),例如作为颜色选择器,需要具有特定尺寸才能正确绘制组件。如果不覆盖这些方法,Swing 布局管理器将无法理解如何根据 JFrameJPanel 的大小适本地定位和调整自定义组件的大小。

关于java - 对固定大小的组件使用覆盖 getPreferredSize() 而不是使用 setPreferredSize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866762/

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