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