java介面編程(3),java介面編程
本文是自己學習所做筆記,歡迎轉載,但請註明出處:http://blog.csdn.net/jesson20121020
在java 中,組件放置在表單上的方式可能與其他的GUI系統都不相同。首先,它完全基於代碼,沒有用來控制組件布置的“資源”。第二,組件旋轉在表單上的方式不是通過絕對座標控制,而是由“布局管理器”根據組件加入的順序決定位置。使用不同的布局管理器,組件的大小,形狀和位置將大不相同,此外,布局管理器還可以適應applet或應用程式視窗的大小,所以如果視窗的尺寸改變了,組件的大小,形狀和位置也能夠做出相應的改變。
JApplet,JFrame, JDialog. JPanel等都可以包含和顯示組件。Container中有一個稱為setLayout()的方法,可以通過這個方法來選擇不同的而已管理器。本節就來示範各個不同的布局管理器的效果。
布局管理器:
1. BorderLayout
JFrame使用BorderLayout作為預設的配置模式。它將接受add()方法將加入的組件放在中央,然後將組件向各個方向展開,直到與邊框對齊。
BorderLayout具有四個邊框地區和一個中央地區的概念,當向BorderLayout管理的面板加入組件時,可以使用重載的add()方法,它的第一個參數接受一個常量值,可以是以下任何一個:
| 常量 |
解釋 |
| BorderLayout.NORTH |
頂端 |
| BorderLayout.SOUTH |
底端 |
| BorderLayout.EAST |
右端 |
| BorderLayout.WEST |
左端 |
| BorderLayout.CENTER |
從中央可始填充,直到與其他組件功邊框相遇 |
如果沒有指定放置的位置,則預設是放置在中央。
下面的代碼就直接示範了上述表格的5個位置:
public class SwingTest extends JFrame{public SwingTest() {super("Hello Swing");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(300, 200);setVisible(true); add(BorderLayout.NORTH,new JButton("North"));add(BorderLayout.SOUTH,new JButton("South"));add(BorderLayout.EAST,new JButton("EAST"));add(BorderLayout.WEST,new JButton("WEST"));add(BorderLayout.CENTER,new JButton("Center")); }public static void main(String[] args) throws InterruptedException {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubnew SwingTest();}});} 效果如下:
2.FlowLayout
FlowLayout布局直接將組件從左至右“流動”到表單上,直到佔滿上方的空間,然後向下移動一行,繼續流動。在使用FlowLayout布局的情況下,組件將呈現“合適”的大小,如,JButton的大小就是其標籤的大小。
主要代碼如下:
//FlowLayout布局 setLayout(new FlowLayout());for(int i = 0;i < 20;i++){add(new JButton("Button "+i));} 效果:
這時,你可以拖動表單縮放表單,裡面的組件也會隨著表單的變化而變化。
3. GridLayout
GridLayout允許構建一個旋轉組件的表格,在向表格裡面添加組件的時候,它們將按照從左至右,從上到小的順序加入。在構造器中要指定需要的行數和列數,它們將均勻分布在表單上。
//GridLayout布局 setLayout(new GridLayout(7,3));for(int i = 0;i < 20;i++){add(new JButton("Button "+i));} 效果如下:
4. GridBagLayout
GridLayout提供了強大控制功能,包括精確判斷視窗地區如何布局,以及視窗大小變化時如何重新放置組件。不過,它也是最複雜的布局管理器,因此,可以考慮使用TableLayout來替代。
5. 絕對位置
也可以設定圖形組件的絕對位置:
1) 使用setLayout(null)方法把視窗的布局管理器設定為空白。
2) 為每個組件調用setBounds(),為該方法傳遞以像素座標為單位的邊界矩形的參數。
6. BoxLayout
BoxLayout具有GridBagLayout的許多好處,卻不像GridBagLayout那麼複雜。 BoxLayout可以在水平方向或者垂直方向控制組件的位置,並且通過所謂的“支架和膠水”的機制來控制組件的間隔。
總結:
這麼多的布局管理器,事實上,在某些情況下,手工編寫GUI表單就不太合適了,這樣做太複雜,也不能充分利用編程時間,所以對於較複雜的表單還是要用GUIS構造工具,我們只需要理解布局的方式以及如何處理事件即可。