2011-03-23 61 views
1

从Windows窗体(.NET)来了,我禁不住想编写下面的代码:设置控件的位置和尺寸在Swing

JFrame frame = new JFrame(); 
    frame.setSize(new Dimension(300, 200)); 
    frame.setVisible(true); 

    JList list = new JList(); 
    list.setLocation(new Point(50, 50)); 
    list.setSize(new Dimension(100, 100)); 
    list.setVisible(true); 
    frame.add(list); 

    JButton button = new JButton(); 
    button.setLocation(new Point(0, 0)); 
    button.setSize(new Dimension(50, 50)); 
    button.setText("myButton"); 
    button.setVisible(true); 
    frame.add(button); 

这应该有安全工程师尺寸创建一个窗口(框架)和(50,50)和(0,0)的列表和按钮。

然而,当我运行代码时,我所看到的只是一个按钮(覆盖整个区域)。我想这必须有一些特殊的布局系统,但我想知道如何将控件放在具有指定(w,h)尺寸的指定(x,y)位置。

感谢

回答

2

使用Swing,如果您未指定任何版式管理器到top-level container,则使用BorderLayout。这个布局管理器给你你的结果。

如果你想使用绝对定位,你必须先禁用默认布局管理器:

frame.setLayout(null); 

然后,您可以将您的组件。

+0

“默认的内容窗格将设置一个”BorderLayout“管理器。” - [JFrame](http://download.oracle.com/javase/6/docs/api/javax/swing/JFrame.html)。 'JPanel'默认为'FlowLayout'。 – trashgod 2011-03-23 18:39:07

+0

@trashgod:谢谢,更正:-) – 2011-03-24 14:55:36

+0

+1为什么按钮填满整个区域的好解释。 – trashgod 2011-03-24 16:33:28

3

您需要使用布局管理器:

http://download.oracle.com/javase/tutorial/uiswing/layout/using.html

虽然你可能想手动指定的位置和大小,我会建议反对这一点,除非绝对必要的。看起来学习使用布局管理器似乎是一种浪费,但从长远来看,投资将是值得的。

+0

正确使用布局管理尽可能(+1)你。以防万一你真的(如真的)需要手动执行它,使用“null”LayoutManager('setLayout(null)')。 – Thomas 2011-03-23 16:45:15

1

你会在这里找的是一个空布局管理器。 如果您正在寻找指定对象的确切大小和位置,那么您可以使用上面的方法。

看看这篇文章 http://www.tech-recipes.com/rx/1205/java-null-layout-manager-swing/

笔者有相同类型的例子,你的,主要的区别是增加了线

getContentPane().setLayout(null); 

在你当前的实现必须默认的布局,所以你只需要将列表和按钮层叠在一起即可。