我在setBounds上找不到任何东西,它的用途,或者它的功能实际上是什么。 有人可以澄清一下吗? 非常感谢!
layout
设置为 null
,则可以使用 setBounds(x, y, width, height)
指定 GUI 组件的位置和大小。然后(x, y)
是该组件左上角的坐标。
setBounds
用于定义组件的边框。 这包括它的位置和大小。
在框架内的许多地方都使用了。
- 布局管理器使用它来定义组件在其父容器中的位置和大小。
- 油漆子系统使用它来定义绘制组件时的剪切边界。
在大多数情况下,你永远不应该打电话给它。 相反,您应该使用适当的布局管理器,并让他们确定向此方法提供信息的最佳方式。
java.awt.Component
类的方法。它用于设置组件的位置和大小:
setBounds
public void setBounds(int x, int y, int width, int height)
移动此组件并调整其大小。左上角的新位置由 x 和 y 指定,并且 新大小由宽度和高度指定。 参数:
x
- - 此组件的新 x 坐标
y- - 此组件的新 y 坐标
- 宽度 - 此组件的新宽度
- 高度 - 此组件的新高度
x
和y
如上所述对应于大多数(所有?)情况下的左上角。
它是setLocation
和setSize
的捷径。
这通常仅在布局/布局管理器不存在时才有效,即 null。
@hexafraction有一个答案,他指定 x 和 y 是右上角,这是错误的,它们是左上角。
我也提供了来源,请检查一下。
public void setBounds(int x,
int y,
int width,
int height)
移动此组件并调整其大小。左上角的新位置由 x 和 y 指定,新大小由宽度和高度指定。此方法更改与布局相关的信息,因此使组件层次结构失效。
参数:
x- 此组件的新 x 坐标
y- 此组件的新 y 坐标
宽度 - 此组件的新宽度
高度 - 此组件的新高度
来源:- 设置边界
实际上,Swing 组件确实具有多个维度,例如:
- 当前大小 - setSize() 和 setBounds() 设置此大小
- 最小大小 - setMinimumSize() 设置此大小
- 首选大小 - setPerferredSize() 设置此大小
- 最大大小 - setMaximumSize() 设置此值。
SetBounds 是设置当前大小和小部件位置的快捷方式(如果您不使用任何布局管理器)。
如果使用布局管理器,则布局管理器负责对组件进行布局,同时考虑您设置的首选大小,并确保组合永远不会小于其最小大小或大于其最大大小。
在这种情况下,layoutManager 将调用 setSize(或 setBounds),并且您无法真正控制组件的位置或尺寸。
使用布局管理器的全部意义在于拥有独立于平台和窗口大小的自动布局组件的方式,因此您不希望从代码中调用 setSize。
(个人评论:有错误的布局管理器,我个人讨厌所有这些,并推出了我自己的布局管理器,这提供了 MigLayout 的灵活性,而无需学习曲线。
Java Swing UI的工作方式是,对于每个JPanel,总是有一个LayoutManager来决定将组件的确切位置放置。每个布局管理器的工作方式不同,因此,如果您使用例如 BorderLayout,则 LayoutManager 不使用 setBounds(),而是由东、西、南、北、中心决定组件放置。
但是,对于 NullLayoutManager(如果您使用了 new JPanel(null)
),每个组件都必须具有 x 和 y 坐标。愚蠢的旁注:如果你的UI是三维的,也会有一个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);
}
}
本文中的一小段 如何制作框架 (主窗口) - Java 教程 - Oracle 除了解释其他一些类似方法外,还解释了 setBounds 方法的作用:
pack 方法调整框架的大小,使其所有内容都等于或高于其首选大小。打包的替代方法是通过调用 setSize 或 setBounds(也会设置帧位置)来显式建立帧大小。通常,使用 pack 比调用 setSize 更可取,因为 pack 让框架布局管理器负责框架大小,布局管理器擅长适应平台依赖关系和其他影响组件大小的因素。
setBounds 的参数是 (int x, int y, int width, int height)x 和 y 定义位置/位置,宽度和高度定义框架的大小/尺寸。