我在这里读了一些帖子,然后开始了为什么有些人这样做
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
代替
setPreferredSize(new Dimension(500, 500));
第二个不是更好吗,因为它只创建一个Dimension
对象,而第一个可能创建多个对象(即使它没有那么多浪费的内存)?还是我错了?有什么区别吗?
我在这里读了一些帖子,然后开始了为什么有些人这样做
@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()
and getMaximumSize()
,则可以在组件上强制固定大小,无论窗口和其他组件的大小如何,该大小都不应更改。
但是,正如@Andrew Thompson 在评论中提到的那样,这并不能保证,因为某些布局管理器可以选择忽略这些,特别是如果您正在编写自己的布局管理器,并且向某些父容器添加自定义组件也会忽略这些方法,取决于组件的使用位置/方式。无论如何,它仍然比调用更严格,调用setPreferredSize()
很容易被其他代码调用并被完全覆盖。
我还为我的任何自定义组件覆盖了getPreferredSize()
方法(加号getMinimumSize()
和getMaximumSize()
),例如需要具有特定尺寸才能正确绘制组件的颜色选择器。在不覆盖这些方法的情况下,Swing 布局管理器不了解如何根据JFrame
or的大小来适当地定位和调整您的自定义组件JPanel
。