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

时间:2013-10-16 22:36:53

标签: java setbounds

我在setBounds上找不到任何东西,它的用途是什么,或者它的功能实际上是什么。有人能让我对此有所了解吗?非常感谢!

7 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:9)

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

用于框架内的许多地方。

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

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

答案 2 :(得分:7)

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

  

setBounds

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

移动并调整此组件的大小。左上角的新位置由x和y指定   新尺寸由宽度和高度指定。参数:

     
      
  • x - 此组件的新x坐标
  •   
  • y - 此组件的新y坐标
  •   
  • width - 此组件的新宽度
  •   
  • height - 此组件的新高度
  •   
上面的

xy对应于大多数(所有?)案例的左上角。

这是setLocationsetSize的快捷方式。

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

答案 3 :(得分:2)

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

我也提供了来源请检查。

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

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

<强>参数:

  

x - 此组件的新x坐标

     

y - 此组件的新y坐标

     

width - 此组件的新宽度

     

height - 此组件的新高度

来源: - setBounds

答案 4 :(得分:1)

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

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

SetBounds是设置当前大小加上小部件位置的快捷方式,如果您不使用任何布局管理器。

如果您使用布局管理器,布局管理器负责布置您的组件,考虑您设置的首选大小,并确保组件永远不会小于其minimumSize或大于其maximumSize。

在这种情况下,layoutManager将调用setSize(或setBounds),并且您无法真正控制组件的位置或尺寸。

使用布局管理器的重点是使用平台和窗口大小独立的方式自动布局 ,因此您不希望从代码中调用setSize

(个人评论:有错误的布局管理员,我个人讨厌所有这些并自行推出,这提供了MigLayout的灵活性,没有学习曲线。)

答案 5 :(得分:0)

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);
  }
}

答案 6 :(得分:0)

这里是本文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定义位置/位置,宽度和高度定义框架的大小/尺寸。