当前位置: 首页 > 面试题库 >

使用重写getPreferredSize()代替setPreferredSize()来固定大小的组件

端木野
2023-03-14
问题内容

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

@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布局管理器将无法理解如何根据JFrameor的大小适当地定位和调整自定义组件的大小JPanel



 类似资料:
  • 我有一个结构与一些固定大小的数组: 我从一个文件中读取字节到一个固定大小的数组中,并将这些字节逐位复制到结构中。 最后一行()不起作用,因为在结构中它是一个,而是一个切片。我是否可以返回将一个片转换为一个固定大小的数组,就像在一个范围内那样,而不是像我所做的那样说?

  • 问题 你想在一个固定长度记录或者数据块的集合上迭代,而不是在一个文件中一行一行的迭代。 解决方案 通过下面这个小技巧使用 iter 和 functools.partial() 函数: from functools import partial RECORD_SIZE = 32 with open('somefile.data', 'rb') as f: records = iter(p

  • 操作步骤: 菜单栏: Edit —> Toggle Case 快捷键: Mac: Shift + Command + U Windows/Linux: Ctrl + Shift + U

  • 我正在尝试使用正则表达式将大写字母替换为相应的小写字母。因此 变成 在Sublime的文本中。如何在同时包含小写和大写字母的单词中使用小写字母?所以它会影响维纳斯,而不是维纳斯。

  • 问题内容: 我正在尝试将固定大小的数组转换为可变大小的数组(切片): 但是编译器抛出错误: 我应该如何转换? 问题答案: 使用让您在阵列上切片。另请参阅此博客文章,以获取有关数组和切片的更多信息。

  • 问题内容: 在Swift中,我试图创建一个由64个SKSpriteNode组成的数组。我想先将其初始化为空,然后将Sprites放在前16个单元格中,然后将最后16个单元格中(模拟象棋游戏)。 根据我在文档中了解的内容,我期望会出现以下情况: 要么 但这是行不通的。在第二种情况下,我收到一条错误消息:“尚不支持定长数组”。那可以是真的吗?对我来说,这听起来像是一项基本功能。我需要通过它们的索引直接