- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在这里读了一些帖子,我开始了解为什么有些人会这样做
@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 布局管理器将无法理解如何根据 JFrame
或 JPanel
的大小适本地定位和调整自定义组件的大小。
关于java - 对固定大小的组件使用覆盖 getPreferredSize() 而不是使用 setPreferredSize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866762/
这是我第一次尝试使用 Java,所以请放轻松。我查看了其他 JFrame 问题,但我一直无法找到可行的解决方案。 出于某种原因,我无法使 setPreferredSize 或 setSize 工作。
为什么 p1.setPreferredSize(new Dimension(200,200)) 显示错误。它说非法开始类型 class Menu extends JFrame { JPane
我有一个包含多个面板的窗口。我无权访问窗口代码。 (我只能修改面板的代码。) 我从面板中删除了几个组件。窗口已缩小其大小。但是窗口太小,无法正确显示所有内容。 我添加了行 setPreferredSi
代码: import java.awt.Dimension; import javax.swing.*; public class Game extends JFrame { private
我正在尝试正确调整 JPanel 的大小,使其完全适合渲染的 8 x 8 棋盘。当我使用绘画程序放大时,我注意到宽度和高度上都添加了两个额外的像素...... 这还不错,但是当我用其他 JPanel(
我最初使用的是 setSize,但由于 java 边框和标题空间,这导致屏幕内容略大于屏幕。所以我使用了 setpreferredSize,现在屏幕尺寸有点太大了。在我的内容的右侧和底部留一个空格。
根据以前的经验,每个人都会说“不要使用那些 setXxxSize 方法!使用布局管理器!”但是,在这种情况下我该怎么办? import java.awt.*; import javax.swing.*
代码如下: import javax.swing.*; import java.awt.event.*; import java.awt.*; public class TestGrid {
我正在用 Java 创建一个 Tic Tac Toe 游戏,我似乎陷入了一个我无法摆脱的问题:(。我无法调整我的按钮大小。我尝试了 setSize 和 setPreferredSize,但似乎不起作用
根据我收到的答案,我现在采用不同的方式进行此操作。 是否有任何方法可以重写 setPreferredSize() 和 getPreferredSize() ,以便它实际上将组件的大小设置为高于实际输入
我正在尝试构建自己的 JComponent,但一开始并不理想。我可以创建一个对象,然后将其添加到 JFrame 或 JPanel,它将添加到组件列表中。我不知道如何设置PreferredSize()。
在布局管理器中,当我使用 setPreferedSize 时,它增加了 JLabel 的大小,但在之后仅显示一个单词,例如 (JLabel = Name)使用setPreferedSize JLabe
我正在使用 JScrollPane 并在 viewportView.doLayout 内调用 viewportView.setPreferredSize。但这似乎是错误的,因为 JScrollPane
昨天我在向 JScrollPane 添加 JTable 和 JPanel(其中包含 JButton)时出错。 JButton 固定在表格的底部,单击时它会向 JTable 添加一行。 问题是如果表格变
我已经使用 View 过滤方法成功过滤了一个 JTree(在树渲染中,将首选组件大小设置为 0 以过滤掉项目)。请参阅 [ Filtering on a JTree 我有一个包含超过 100 万个树项
我在这里读了一些帖子,我开始了解为什么有些人会这样做 @Override public Dimension getPreferredSize() { return new Dimension(
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我想要一个串联的 JPanel 的“列表”,其中每个单元格都有相应的 JPanel 的大小。例如: 在此示例中,Panel1 的 setPreferredSize 小于 Panel2 的 setPre
所以我一直在尝试为牙医创建这个简单的用户界面,当我在标题下添加顶部菜单时,我注意到“setPreferredSize”没有按预期工作。基本上我希望菜单水平扩展,所以我使用 GridBagLayout
我有一个 JPanel (imagePanel),可以在其上显示图像。我在另一个 JPanel (scrollPanel) 中有 imagePanel,并使用 GridBagLayout 默认约束将其
我是一名优秀的程序员,十分优秀!