【发布时间】:2013-10-25 06:16:15
【问题描述】:
我在 setBounds 上找不到任何内容、它的用途或它的实际功能。有人可以澄清我吗?非常感谢!
【问题讨论】:
我在 setBounds 上找不到任何内容、它的用途或它的实际功能。有人可以澄清我吗?非常感谢!
【问题讨论】:
如果将layout 设置为null,则可以使用setBounds(x, y, width, height) 指定GUI 组件的位置和大小。那么(x, y)就是那个组件的左上角坐标。
【讨论】:
setBounds 是setLocation 和setSize 的捷径。 setPreferredSize 向布局管理器 API 提供有关组件“希望”大小的提示
setSize 只会有临时效果。一旦容器失效,组件将返回到布局管理器决定的大小。 preferredSize 只是给布局管理器的关于组件可能如何布局的建议。布局管理器完全可以忽略它,BorderLayout 就是一个很好的例子
setBounds 用于定义组件的边界矩形。这包括它的位置和大小。
在框架内的许多地方都使用了。
在大多数情况下,您永远不应该调用它。相反,您应该使用适当的布局管理器,并让他们确定向此方法提供信息的最佳方式。
【讨论】:
null 布局;)
这是java.awt.Component 类的方法。用于设置组件的位置和大小:
setBoundspublic void setBounds(int x, int y, int width, int height)移动此组件并调整其大小。左上角的新位置由 x 和 y 指定,并且 新尺寸由宽度和高度指定。参数:
- x - 该组件的新 x 坐标
- y - 该组件的新 y 坐标
- width - 该组件的新宽度
- height - 该组件的新高度
x 和y 在大多数(所有?)情况下对应于左上角。
这是setLocation 和setSize 的快捷方式。
这通常仅在布局/布局管理器不存在时才有效,即 null。
【讨论】:
@hexafraction 有一个答案,他指定 x 和 y 为右上角,这是错误的,那些是左上角。
我也提供了出处,请查收。
public void setBounds(int x,
int y,
int width,
int height)
移动此组件并调整其大小。左上角的新位置由 x 和 y 指定,新大小由 width 和 height 指定。 此方法更改布局相关信息,因此使组件层次结构无效。
参数:
x - 该组件的新 x 坐标
y - 该组件的新 y 坐标
width - 该组件的新宽度
height - 该组件的新高度
来源:-setBounds
【讨论】:
其实一个 Swing 组件确实有多个维度,如:
SetBounds 是设置小部件当前大小和位置的快捷方式如果您不使用任何布局管理器。
如果您使用布局管理器,布局管理器有责任布置您的组件,同时考虑您设置的首选大小,并确保组件永远不会小于其 minimumSize 或大于其 maximumSize。
这种情况下layoutManager会调用setSize(或setBounds),你无法真正控制组件的位置或尺寸。
使用布局管理器的全部意义在于拥有一种独立于平台和窗口大小的方式来自动布局组件,因此您不要期望从代码中调用 setSize。
(个人评论:有错误的布局管理器,我个人讨厌所有这些并推出了我自己的,它提供了 MigLayout 的灵活性而没有学习曲线。)
【讨论】:
Java Swing UI 的工作方式是,对于每个 JPanel,始终有一个 LayoutManager 来决定组件的确切放置位置。 每个布局管理器的工作方式不同,因此如果您使用例如 BorderLayout,则 LayoutManager 不会使用 setBounds(),而是由 East、West、South、North、Center 决定组件放置。
但是,对于 NullLayoutManager(如果您使用 new JPanel(null)),每个组件都必须有一个 x 和 y 坐标。愚蠢的旁注:如果你的 UI 是 3D 的,那么也会有一个 z 坐标。
因此,使用public void Component.setBounds(int x, int y, int width, int height),您可以指定组件的放置位置以及它的宽高像素数。
这是一个例子:
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JTableInNullLayout
{
public static void main(String[] argv) throws Exception {
JPanel panel = new JPanel(null);
JLabel helloLabel = new JLabel("Hello world!");
helloLabel.setBounds( 10, 50, 60, 20 ); // x, y, width, height
panel.add(helloLabel);
JFrame frame = new JFrame();
frame.add(panel);
frame.setPreferredSize( new Dimension(200,200));
frame.pack();
frame.setVisible(true);
}
}
【讨论】:
这是这篇文章How to Make Frames (Main Windows) - The Java Tutorials - Oracle 的一小段,它解释了 setBounds 方法以及其他一些类似方法的作用:
pack 方法调整框架的大小,使其所有内容都等于或大于它们的首选大小。 pack 的替代方法是通过调用 setSize 或 setBounds(也设置帧位置)显式建立帧大小。一般来说,使用 pack 比调用 setSize 更可取,因为 pack 让框架布局管理器负责框架大小,而布局管理器擅长调整平台依赖性和其他影响组件大小的因素。
setBounds的参数是(int x, int y, int width, int height) x 和 y 定义位置/位置,宽度和高度定义框架的大小/尺寸。
【讨论】: