2011-03-23 62 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); 

在你當前的實現必須默認的佈局,所以你只需要將列表和按鈕層疊在一起即可。