[Java] GUI 圖形介面程式 - Layout 筆記整理
Java GUI 有兩種套件
- javax.awt
- javax.swing
這篇主要整理套件中幾種 Layout 的使用方式和差異
前情提要
程式碼中可能有幾行一定會出現,但我常常忘記原因,因此先統一寫下說明
- 設定右上角叉叉按下後的動作
- EXIT_ON_CLOSE : 關閉程式
- DISPOSE_ON_CLOSE : 關閉顯示的視窗以及使用的資源,程式仍在背景執行
- HIDE_ON_CLOSE : 僅隱藏顯示的視窗,程式仍在背景執行
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- 設定視窗顯示 (沒加這行的話只會在背景執行)
demo.setVisible(true);
BorderLayout
將視窗劃分成 “東”、”南”、”西”、”北”、”中” 五個區塊 (好容易順口念成”中南西北中發白” ´・ω・`)
import javax.swing.*;
import java.awt.*;
public class GUI {
public static void main(String[] args) {
JFrame demo = new JFrame("Layout Demo");
demo.setSize(300, 300);
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demo.getContentPane().setLayout(new BorderLayout());
JButton east = new JButton("East");
JButton south = new JButton("South");
JButton west = new JButton("West");
JButton north = new JButton("North");
JButton center = new JButton("Center");
demo.add(east, BorderLayout.EAST);
demo.add(south, BorderLayout.SOUTH);
demo.add(west, BorderLayout.WEST);
demo.add(north, BorderLayout.NORTH);
demo.add(center, BorderLayout.CENTER);
demo.setVisible(true);
}
}
執行後:
FlowLayout
Flow 的中文就是 “流” 的意思,所以是將物件依序排列,可以設定從左邊、右邊或是中間開始排,超過畫面會自動換行
import javax.swing.*;
import java.awt.*;
public class GUI {
public static void main(String[] args) {
JFrame demo = new JFrame("Layout Demo");
demo.setSize(300, 300);
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demo.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));
JButton a = new JButton("1");
JButton b = new JButton("2");
JButton c = new JButton("3");
JButton d = new JButton("4");
JButton e = new JButton("5");
demo.add(a);
demo.add(b);
demo.add(c);
demo.add(d);
demo.add(e);
demo.setVisible(true);
}
}
執行後:
GridLayout
用表格的方式平均劃分整個 ContentPane
指定時第一個數字為”列”,第二個數字為”欄”
import javax.swing.*;
import java.awt.*;
public class GUI {
public static void main(String[] args) {
JFrame demo = new JFrame("Layout Demo");
demo.setSize(300, 300);
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demo.getContentPane().setLayout(new GridLayout(3, 2));
JButton a = new JButton("1");
JButton b = new JButton("2");
JButton c = new JButton("3");
JButton d = new JButton("4");
JButton e = new JButton("5");
demo.add(a);
demo.add(b);
demo.add(c);
demo.add(d);
demo.add(e);
demo.setVisible(true);
}
}
執行後:
GridbagLayout
據說是 GridLayout 加上合併儲存格的概念,寫法複雜許多
這次的案子寫到目前為止還沒用到這個方式,所以也還沒認真研究
Reference 的網頁有詳細解釋
CardLayout
一樣還沒有使用到,若之後有用到再補筆記 XDD