[Java] GUI 圖形介面程式 - Layout

[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

Reference

[1] http://blog.xuite.net/jane17512001/PenguinDesign/243299537-%E8%A6%96%E7%AA%97%E7%A8%8B%E5%BC%8F+Java+Swing+-+%E5%9F%BA%E6%9C%AC%E8%A8%AD%E5%AE%9A%E5%8F%8ALayout