什么是setBounds以及如何使用它?

我在setBounds上找不到任何东西,它的用途是什么,或者它的function实际上是什么。 有人可以让我知道吗? 非常感谢!

如果将layout设置为null setBounds(x, y, width, height)可以使用setBounds(x, y, width, height)指定GUI组件的位置和大小。 然后(x, y)是该组件左上角的坐标。

setBounds用于定义组件的边界矩形。 这包括它的位置和大小。

它在框架内的许多地方使用。

  • 布局管理器使用它来定义组件父容器中组件的位置和大小。
  • 绘制子组件时,paint子系统使用它来定义剪裁边界。

在大多数情况下,你永远不应该打电话给它。 相反,您应该使用适当的布局管理器,让他们确定为此方法提供信息的最佳方法。

这是java.awt.Component类的方法。 它用于设置组件的位置和大小:

setBounds

 public void setBounds(int x, int y, int width, int height) Moves and resizes this component. The new location of the top-left corner is specified by x and y, and 

新尺寸由宽度和高度指定。 参数:

  • x – 此组件的新x坐标
  • y – 此组件的新y坐标
  • width – 此组件的新宽度
  • height – 此组件的新高度

上面的xy对应于大多数(所有?)情况下的左上角。

它是setLocationsetSize的快捷方式。

这通常仅在布局/布局管理器不存在时才有效,即为null。

@hexafraction有一个答案,他指定x和y是右上角是错误的,那些是左上角。

我也提供了来源请检查。

 public void setBounds(int x, int y, int width, int height) 

移动并调整此组件的大小。 左上角的新位置由x和y指定,新大小由宽度和高度指定。 此方法更改与布局相关的信息,因此使组件层次结构无效。

参数:

x – 此组件的新x坐标

y – 此组件的新y坐标

width – 此组件的新宽度

height – 此组件的新高度

来源: – setBounds

实际上,Swing组件确实有多个维度,如:

  • 当前大小 – setSize()和setBounds()设置此项
  • 最小大小–setMinimumSize()设置此项
  • 首选大小 – setPerferredSize()设置此项
  • 最大大小–setMaximumSize()设置此项。

如果您不使用任何布局管理器,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是三维的,那么也会有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定义位置/位置,width和height定义框架的大小/尺寸。