尺寸,只改变宽度/高度

Posted

技术标签:

【中文标题】尺寸,只改变宽度/高度【英文标题】:Dimension, Only changing the width/height 【发布时间】:2011-11-02 21:44:40 【问题描述】:

如何只更改需要Dimension 对象的组件的宽度或高度?目前我是这样做的:

jbutton.setPreferredSize(new Dimension(button.getPreferredSize().width, 100));

但我有一种感觉,我做错了。 如果有更好的方法,最好的方法是什么?

【问题讨论】:

您所做的基本错误是使用任何尺寸调用 setPreferredSize ;-) 您将干扰组件的任何内部尺寸提示计算。简单地说:不要,永远不会。相反,使用一个像样的 LayoutManager。 【参考方案1】:

首先你没有改变 JButton 的尺寸。您正在指定所需的首选大小,最终可以根据插入的组件的 LayoutManager 将其应用于您的 JButton。

对于 Dimension 对象的使用,没关系。最终你可以直接访问 Dimension 字段:

Dimension d = button.getPreferredSize();
d.height = 10;
jbutton.setPreferredSize(d); 

但这几乎是一回事。

【讨论】:

您对问题进行了编辑,它现在回答了问题。我似乎无法删除之前的评论,因此感谢您的新回答。【参考方案2】:

我最终按照 Kleopatra 所说的方式做了。不更改 preferredSize 而是让布局管理器完成这项工作。因为这是改变组件大小的正确方法。

【讨论】:

无法抗拒评论,我的语法编译器抛出了 SentenceFragment 错误(但我会保持我肮脏的手离开你的帖子):)【参考方案3】:

我有同样的问题,但使用了不同的应用程序 - 我只需要限制我添加到具有 BoxLayout 容器的 JPanel 的高度。因此,当我在其上调用 setMaximumSize 并使用其 PreferredSize 作为宽度时,结果是它没有得到我期望的水平尺寸拉伸;它变短了,因为那是它的首选尺寸。我找不到布局管理器应用的实际宽度,因此不知道在新 Dimension 中使用什么宽度,但我想要的高度设置工作得很好。最终答案是:

myJPanel.setMaximumSize(new Dimension(<some overly high width value>, <desired height>));

然后 BoxLayout 管理器为 myJpanel 提供了仍然水平填充容器的正确较低宽度,以及我想防止垂直拉伸的较低高度。

【讨论】:

以上是关于尺寸,只改变宽度/高度的主要内容,如果未能解决你的问题,请参考以下文章

改变 LinearLayout 的背景会改变它的宽度和高度

如何添加约束以使视图的尺寸在方向改变时不会改变?

改变图片尺寸

怎么在VB中改变toolbar的高度和宽度

BMP 宽度/高度尺寸超过 255?

使用相机查找对象的尺寸(高度、宽度)