1. 程式人生 > >Java基本功練習十七GUI(圖形使用者介面基礎【基本概念及其使用、三種佈局管理器實現同樣的框架練習】)

Java基本功練習十七GUI(圖形使用者介面基礎【基本概念及其使用、三種佈局管理器實現同樣的框架練習】)

為Java GUI程式設計而設計的API是應用面向物件原理的絕佳範例。

本博文主要講解

第一,介紹Java GUI程式設計的基礎知識。

第二,它使用GUI演示面向物件程式設計。

尤其是將介紹Java GUI API的框架結構,討論GUI元件及元件之間的相互關係、容器和佈局管理器、顏色、字型、邊界、影象圖示以及工具提示。

1)Swing和AWT

將圖形使用者介面相關的類捆綁在一起,放在一個稱為抽象類視窗工具箱(Abstract Window Toolkit,AWT)的庫中。AWT適合開發簡單的圖形使用者介面,但不適合開發複雜的GUI專案。除此之外,AWT更容易發生與特定平臺相關的故障。AWT的使用者介面元件就被一種更穩定、更通用和更靈活的庫取代,這種庫稱為Swing元件(Swing component)庫

。大多數Swing元件都是直接用Java程式碼在畫布上繪圖的,而java.awt.Window或java.awt.Panel的子類的元件例外,它們必須使用特定平臺上自己的GUI來繪圖。Swing元件更少地依賴於目標平臺並且更少地使用自己的GUI資源。因此,不依賴於自己的GUI的Swing元件稱為輕量級元件,而AWT稱為重量級元件

為了區別新的Swing元件類和與它對應的AWT元件類,Swing GUI元件類都以字母J為字首來命名。儘管在Java中仍然支援AWT元件,但最好學習如何使用Swing元件程式設計,因為AWT使用者介面元件終究是要退出歷史舞臺的。以下只有Swing GUI元件的用法介紹。

2)Java GUI API

GUI API包含的類分成三個組:元件類(componentclass)、容器類(container class)和輔助類(helper class)。它們的層次結構如下所示:


元件類是用來建立使用者介面的,如JButton、JLabel和JTextField。

容器類是用來包含其他元件的,如JFrame、JPanel和JApplet。

輔助類是用來支援GUI元件的,如Graphics、Color、Font、FontMetrics和Dimension。

注意:JFrame、JApplet、JDialog和JComponent類及其子類一起放置在javax.swing包中。而上圖的其他類放在java.awt。

3)框架

建立一個使用者介面需要建立一個框架或一個applet(本博文只講框架)來存放使用者介面元件。可以建立一個框架,並向其中新增各種元件,以實現滿足需求的使用者介面。

4)佈局管理器

在許多視窗系統中,使用者介面元件都是通過硬編碼(hard-code)的畫素度量管理的。例如,將一個按鈕放在視窗的(10,10)位置處。使用硬編碼的畫素度量,這個使用者介面可能在一個系統中看上去很好,但在另一個系統中就不正常了。

Java的佈局管理器提供了一種層面的抽象,自動將使用者介面對映到所有的視窗系統。

Java的GUI元件都放置在容器中,它們的位置是由容器的佈局管理器管理的。如上述的程式,並沒有指定OK按鈕放置在框架的什麼位置,但是,Java知道應該把它放在哪裡,因為在後臺工作的佈局管理器能夠將元件放到正確的位置。

佈局管理器是使用佈局管理器類建立的。使用setLayout(aLayoutManager)方法在容器中設定佈局管理器。

主要用到的有三種佈局管理器:FLowLayout、GridLayout、BorderLayout。

5)使用面板作為子容器

假設要在框架中放置是個按鈕和一個文字域。按鈕以網格形式放置,文字域獨佔一行。如果將所有這些元件放在一個單獨的容器中,很難達到要求的視覺效果。使用Java圖形使用者介面進行程式設計,可以將一個視窗分成幾個面板。面板的作用就是分組放置使用者介面元件的子容器。可以將這些按鈕新增到一個面板中,然後再將這個面板新增到框架中。

面板的Swing版本是JPanel。可以使用newJPanel()建立一個帶預設FlowLayout管理器的面板,也可以使用new JPanel(LayoutManager)建立一個帶特定佈局管理器的面板。使用add(Component)方法可以向面板新增一個元件。如:JPanel p=new JPanel();p.add(new JButton(“OK”));建立一個面板並且給它新增一個按鈕。

面板可以放到一個框架中或者放到另一個面板中。

6)Color類和Font類

可以使用java.awt.Color類GUI元件設定顏色。顏色是有紅、綠、藍這三原色構成的,每種原色都用一個int值表示它的深度,取值範圍從0(最暗度)到255(最亮度)。這就是通常所說的RGB模式。

可以使用java.awt.Font類建立一種字型,然後使用Component類中的setFont方法設定元件的字型。Font的構造方法是:publicFont(String name,int style,int size);

可以從SansSerif、Serif、Monospaced、Dialog或DialogInput中選擇一種字型名,可以從Font.PLAIN(0),Font.BOLD(1),Font.ITALIC(2)和Font.BOLD+Font.ITALIC(3)中選擇風格,然後指定正整數的字型大小。

7)Swing GUI 元件的公共特性

上述已經講解了一些GUI元件,如JFrame、Container、JPanel、JButton、JLabel和JTextField等。

還將講解更多的GUI元件,理解這些SwingGUI元件的一般特性是很重要的。

Component類是所有GUI元件和容器的根。所有GUI(除了JFrame、JApplet和JDialog)元件都是JComponent的子類,列出了Component、Container和JComponent中物件字型、顏色、大小、工具提示文字及其邊界這樣的屬性和常用操作方法。

工具提示是將滑鼠移動到元件上時,這個元件上顯示的文字。經常用它來描述一個元件的功能。

可以給JComponent類的任何物件設定邊界。Swing具有各種型別的邊界。為了建立一個帶標題的邊界,使用newTitleBorder(String title)。為了建立一個線邊界,使用newLineBorder(Color color,int width),這裡的width表示線的粗細。

8)影象圖示

圖示是一個大小固定的圖片;通常情況下,它都比較小,用來裝飾元件。影象通常儲存在影象檔案中。Java目前支援三種影象格式:GIF(影象交換格式)、JPEG(聯合影象專家組)、PNG(便攜網路圖片)。這些型別的影象檔案分別以.gif、.jpg和.png結尾。如果一個其他格式的點陣圖檔案或影象檔案,可以使用影象處理工具將它們轉為GIFJPEGPNG格式,以便於在Java中使用。

為顯示一個影象圖示,使用new java.swing.ImageIcon(filename)建立一個ImageIcon物件。

講解完GUI設計的基本概念和重點知識點後,就以範例的形式練習其使用。

範例一:基本概念基本方法使用練習。

原始碼如下所示:

package GUI;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JButton;

import java.awt.FlowLayout;//FlowLayout佈局管理器範例
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;//GridLayout佈局管理器範例
import java.awt.BorderLayout;//BorderLayout佈局管理器範例
import javax.swing.JPanel;//JPanel面板範例

import java.awt.Color;//元件顏色
import java.awt.Font;//字型風格
import java.awt.GraphicsEnvironment;//找出系統字型名字

import javax.swing.border.*;//標題邊界的使用
import javax.swing.ImageIcon;

public class GUI12 extends JFrame{
	public static void main(String[]args){
/*		ShowFlowLayout sfl = new ShowFlowLayout();//FlowLayout佈局管理器範例
		sfl.main(args);
		
		ShowGridLayout sgl = new ShowGridLayout();//GridLayout佈局管理器範例
		sgl.main(args);
		
		ShowBorderLayout sbl = new ShowBorderLayout();//BorderLayout佈局管理器範例
		sbl.main(args);
		
		TestPanels tp = new TestPanels();//JPanel面板範例
		tp.main(args);
		
		
*/		
		TestAssist ta = new TestAssist();//輔助類範例
		ta.main(args);
		
		TestSwingCommonFeatures tscf = new TestSwingCommonFeatures();//Swing元件公共屬性
		tscf.main(args);
		
		TestImageIcon tii = new TestImageIcon();//影象圖示
		tii.main(args);
		
		//顯示系統可用字型的名字
		GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
		String[] fontnames = e.getAvailableFontFamilyNames();
		for(int i = 0;i < fontnames.length;i++)
			System.out.println(fontnames[i]);
	}
}
//影象圖示
class TestImageIcon extends JFrame{
	private ImageIcon xiaoerIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\肖洋.PNG");
	private ImageIcon xiajiangIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\夏蔣.PNG");
	private ImageIcon liuchangIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\劉常.PNG");
	private ImageIcon dajiaIcon = new ImageIcon("C:\\Users\\HarryKate\\Desktop\\大家.PNG");
	public TestImageIcon(){
		Border lineBorder = new LineBorder(Color.ORANGE,2);
		
		JPanel p1 = new JPanel();
		p1.setBorder(new TitledBorder("肖二燦爛的笑"));
		p1.add(new JLabel(xiaoerIcon));
//		p1.setBorder(lineBorder);
		
		JPanel p2 = new JPanel();
		p2.setBorder(new TitledBorder("夕陽下的擁抱"));
		p2.add(new JLabel(xiajiangIcon));
//		p2.setBorder(lineBorder);
		
		JPanel p3 = new JPanel();
		p3.setBorder(new TitledBorder("劉媽坑超超"));
		p3.add(new JLabel(liuchangIcon));
//		p3.setBorder(lineBorder);
		
		JPanel p4 = new JPanel();
		p4.setBorder(new TitledBorder("夕陽下的大家"));
		p4.add(new JLabel(dajiaIcon));
//		p4.setBorder(lineBorder);
		
		setLayout(new GridLayout(2,2,5,5));
		add(p1);
		add(p2);
		add(p3);
		add(p4);
	}
	public static void main(String[]args){
		TestImageIcon frame = new TestImageIcon();
		frame.setTitle("TestImageIcon");
		frame.setSize(800,800);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
//Swing元件公共屬性
class TestSwingCommonFeatures extends JFrame{
	public TestSwingCommonFeatures(){
		JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT,2,2));
		JButton jbtLeft = new JButton("Left");
		JButton jbtCenter = new JButton("Center");
		JButton jbtRight = new JButton("Right");
		jbtLeft.setBackground(Color.WHITE);
		jbtCenter.setForeground(Color.GREEN);
		jbtRight.setToolTipText("This is the Right button");
		p1.add(jbtLeft);
		p1.add(jbtCenter);
		p1.add(jbtRight);
		p1.setBorder(new TitledBorder("Three Buttons"));
		
		Font largeFont =  new Font("TimesRoman",Font.BOLD,20);
		Border lineBorder =  new LineBorder(Color.BLACK,2);
		
		JPanel p2 = new JPanel(new GridLayout(1,2,5,5));
		JLabel jlblRed = new JLabel("Red");
		JLabel jlblOrange = new JLabel("Orange");
		
		jlblRed.setForeground(Color.RED);
		jlblRed.setFont(largeFont);
		jlblRed.setBorder(lineBorder);
		jlblOrange.setForeground(Color.ORANGE);
		jlblOrange.setFont(largeFont);
		jlblOrange.setBorder(lineBorder);
		
		p2.add(jlblRed);
		p2.add(jlblOrange);
		p2.setBorder(new TitledBorder("Two Lables"));
		
//		jbtLeft.setVisible(false);
//		jlblRed.setVisible(false);
		
		setLayout(new GridLayout(2,1,5,5));
		add(p1);
		add(p2);
	}
	public static void main(String[]args){
		JFrame frame = new TestSwingCommonFeatures();
		frame.setTitle("TestSwingCommonFeatures");
		frame.setSize(300,150);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
//輔助類範例
class TestAssist extends JFrame{
	public TestAssist(){
		Color color = new Color(128,100,100);
		JButton jbtOK = new JButton("OK");
		jbtOK.setBackground(Color.DARK_GRAY);
		jbtOK.setForeground(Color.ORANGE);
		
		JButton jbtOK1 = new JButton("YES");
		JButton jbtOK2 = new JButton("NO");
		JButton jbtOK3 = new JButton("你好");
		Font font1 = new Font("SansSerif",Font.BOLD,16);
		Font font2 = new Font("Serif",Font.BOLD+Font.ITALIC,12);
		Font font3 = new Font("華文行楷",Font.BOLD+Font.ITALIC,12);
		jbtOK1.setFont(font1);
		jbtOK2.setFont(font2);
		jbtOK3.setFont(font3);
		
		JTextField jtf = new JTextField("輔助類的範例");
		Font jtfOfFont = new Font("幼圓",Font.CENTER_BASELINE,14);
		jtf.setFont(jtfOfFont);
		
		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(4,3));
		
		p1.add(jbtOK);
		p1.add(jbtOK1);
		p1.add(jbtOK2);
		p1.add(jbtOK3);
		
		add(jtf,BorderLayout.NORTH);
		add(p1,BorderLayout.CENTER);
	}
	public static void main(String[]args){
		TestAssist frame = new TestAssist();
		frame.setTitle("Color");
		frame.setSize(400,250);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
//JPanel面板範例
class TestPanels extends JFrame{
	public TestPanels(){
		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(4,3));
		for(int i = 1;i <= 9;i++)
			p1.add(new JButton(""+i));
		
		p1.add(new JButton(""+0));
		p1.add(new JButton("Start"));
		p1.add(new JButton("Stop"));
		
		JPanel p2 = new JPanel(new BorderLayout());
		p2.add(new JTextField("Time to be displayed here "), BorderLayout.NORTH);
		p2.add(p1, BorderLayout.CENTER);
		
		add(p2,BorderLayout.EAST);
		add(new JButton("Food to be displayed here "),BorderLayout.CENTER);
	}
	public static void main(String[]args){
		TestPanels frame = new TestPanels();
		frame.setTitle("The Front View of a Microwave Oven");
		frame.setSize(400,250);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
//BorderLayout佈局管理器範例
class ShowBorderLayout extends JFrame{
	public ShowBorderLayout(){
		setLayout(new BorderLayout(5,10));
		add(new JButton("East"),BorderLayout.EAST);
		add(new JButton("South"),BorderLayout.SOUTH);
		add(new JButton("West"),BorderLayout.WEST);
		add(new JButton("North"),BorderLayout.NORTH);
		add(new JButton("Center"),BorderLayout.CENTER);
	}
	public static void main(String[]args){
		ShowBorderLayout frame = new ShowBorderLayout();
		frame.setTitle("ShowBorderLayout");
		frame.setSize(300,200);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
//GridLayout佈局管理器範例
class ShowGridLayout extends JFrame{
	public ShowGridLayout(){
		setLayout(new GridLayout(3,2,5,5));
//		setLayout(new GridLayout(2,2,5,5));
		add(new JLabel("First Name"));
		add(new JTextField(8));
		add(new JLabel("MI"));
		add(new JTextField(1));
		add(new JLabel("Last Name"));
		add(new JTextField(8));
	}
	public static void main(String[]args){
		ShowGridLayout frame = new ShowGridLayout();
		frame.setTitle("ShowGridLayout");
		frame.setSize(200, 125);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
//FlowLayout佈局管理器範例
class ShowFlowLayout extends JFrame{
	public ShowFlowLayout(){
		setLayout(new FlowLayout(FlowLayout.LEFT,10,20));
		add(new JLabel("First Name"));
		add(new JTextField(8));
		add(new JLabel("MI"));
		add(new JTextField(1));
		add(new JLabel("Last Name"));
		add(new JTextField(8));
	}
	public static void main(String[]args){
		ShowFlowLayout frame = new ShowFlowLayout();
		frame.setTitle("ShowFlowLayout");
		frame.setSize(200,200);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
/*
import javax.swing.JFrame;
import javax.swing.JButton;
//簡單框架程式
public static void main(String[] args) {
	JFrame frame = new JFrame("MyFrame");
	JButton jbtOK = new JButton("OK");
	frame.add(jbtOK);
	
	frame.setSize(400, 300);
	frame.setLocationRelativeTo(null);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setVisible(true);
}
*/
範例二:框架的建立練習、三種佈局管理器的使用、輔助類的使用、三個相同圖片顯示的範例。

執行效果如下所示:



實現的原始碼如下所示:

package Blog;

import javax.swing.*;

public class blogTryProject{
	public static void main(String[] args) {
		//三個相同圖片顯示的範例
		ThreeImageIcon ta = new ThreeImageIcon();
		ta.main(args);
		//輔助元件使用
		Assist at = new Assist();
		at.main(args);
		//FlowLayout,BorderLayout,GridLayout管理器使用範例
		TestLayout tl = new TestLayout();
		tl.main(args);
		//框架的建立練習
		TestJFrame tjf = new TestJFrame();
		tjf.main(args);
	}
}
//三個相同圖片顯示的範例
class ThreeImageIcon extends JFrame{
	public void main(String[]args){
		JFrame frame = new ThreeImageIcon();
		frame.setTitle("三個相同圖片顯示的範例");
		frame.setSize(400,200);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	public ThreeImageIcon(){
		javax.swing.ImageIcon xiao = 
				new javax.swing.ImageIcon("C:\\Users\\HarryKate\\Desktop\\111.PNG");
		JButton jb1 = new JButton(xiao);
		JButton jb2 = new JButton(xiao);
		JButton jb3 = new JButton(xiao);
		JPanel p1 = new JPanel();
		p1.add(jb1);
		JPanel p2 = new JPanel();
		p2.add(jb2);
		JPanel p3 = new JPanel();
		p3.add(jb3);
		
		add(p1,java.awt.BorderLayout.NORTH);
		add(p2,java.awt.BorderLayout.SOUTH);
		add(p3,java.awt.BorderLayout.WEST);
	}
}

//圖片影象應用
class ImageIcon extends JFrame{
	private javax.swing.ImageIcon xiao = 
			new javax.swing.ImageIcon("C:\\Users\\HarryKate\\Desktop\\興義到仁懷.PNG");
	public ImageIcon(){
		JPanel p = new JPanel();
		p.setBorder(new javax.swing.border.TitledBorder("興義到仁懷路線圖"));
		p.add(new JButton(xiao));
		add(p);
	}
	public static void main(String[]args){
		ImageIcon image = new ImageIcon();
		image.setTitle("ImageIcon");
		image.setSize(400,200);
		image.setLocationRelativeTo(null);
		image.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		image.setVisible(true);
//		image.pack();
	}
	
}

//輔助元件使用
class Assist extends JFrame{
	public Assist(){
		java.awt.Color color = new java.awt.Color(100,50,50);
		JButton jb = new JButton("你好!");
		jb.setBackground(color);
		jb.setForeground(new java.awt.Color(200,0,0));
		
		java.awt.Font font = new java.awt.Font("華文行楷",java.awt.Font.ITALIC,20);
		jb.setFont(font);
		jb.setToolTipText("這是一個問候按鈕!");
		add(jb);
	}
	public static void main(String[]args){
		Assist as = new Assist();
		as.setTitle("輔助元件使用");
		as.setSize(400,200);
		as.setLocationRelativeTo(null);
		as.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		as.setVisible(true);
		//顯示系統可用字型的名字
		java.awt.GraphicsEnvironment e = 
				java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
		String[] fontnames = e.getAvailableFontFamilyNames();
		for(int i = 0;i < fontnames.length;i++)
			System.out.println(fontnames[i]);
	}
}

//FlowLayout,BorderLayout,GridLayout管理器使用範例
class TestLayout extends JFrame{
	public TestLayout(){
		setLayout(new java.awt.GridLayout(2,1,10,10));
		JPanel p = new JPanel();
		p.setLayout(new java.awt.BorderLayout());
		p.add(new javax.swing.JButton("確定"),java.awt.BorderLayout.NORTH);
		p.add(new javax.swing.JButton("取消"),java.awt.BorderLayout.SOUTH);
		p.add(new javax.swing.JLabel("你好嗎?"),java.awt.BorderLayout.WEST);
		p.add(new javax.swing.JTextField("謝謝,很好!"),java.awt.BorderLayout.EAST);
		p.add(new javax.swing.JTextField("練習"),java.awt.BorderLayout.CENTER);
		add(p);
	}
	public static void main(String[]args){
		TestLayout tfl = new TestLayout();
		JPanel p = new JPanel();
		p.setLayout(new java.awt.BorderLayout(10,10));
		p.add(new JTextField("面板的使用1"),java.awt.BorderLayout.NORTH);
		p.add(new JTextField("面板的使用2"),java.awt.BorderLayout.SOUTH);
		p.add(new JTextField("面板的使用3"),java.awt.BorderLayout.WEST);
		p.add(new JTextField("面板的使用4"),java.awt.BorderLayout.EAST);
		p.add(new JTextField("面板的使用5"),java.awt.BorderLayout.CENTER);
		
		tfl.add(p);
		
		tfl.setTitle("FlowLayout,BorderLayout,GridLayout管理器使用範例");
		tfl.setSize(400,200);
		tfl.setLocationRelativeTo(null);
		tfl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		tfl.setVisible(true);
	}
}

//框架的建立練習
class TestJFrame extends JFrame{
	public TestJFrame(){
		JButton button = new JButton("OK");
		add(button);
	}
	public static void main(String[]args){
		TestJFrame tjf = new TestJFrame();
		tjf.setVisible(true);
		tjf.setTitle("框架的建立練習");
		tjf.setLocationRelativeTo(null);
		tjf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		tjf.setSize(400, 200);
		
		System.out.println("框架的大小為:"+tjf.getSize());
		System.out.println("框架的形狀為:"+tjf.getShape());
		System.out.println("框架所屬的類為:"+tjf.getClass());
	}
}

範例三:同一介面用三種不同的佈局器和一種JPanel構造類實現。主要考察對佈局管理器的使用熟練程度,以及能否用其他不同的方法實現指定格式的介面顯示。

執行效果如圖所示:


實現的原始碼如下所示:

package Blog;

import javax.swing.*;

public class blogTryProject{
	public static void main(String[] args) {
		TestJPanel tjp = new TestJPanel();
		tjp.main(args);
		
		LayoutGrid lg = new LayoutGrid();
		lg.main(args);
		
		LayoutBorder lb = new LayoutBorder();
		lb.main(args);
		
		LayoutFlow lf = new LayoutFlow();
		lf.main(args);
	}
}

//同一介面用三種不同的佈局器和一種JPanel構造類實現
class TestJPanel extends JPanel{
	public TestJPanel(){
	}
	public TestJPanel(JButton jb1,JButton jb2,JButton jb3){
		add(jb1);
		add(jb2);
		add(jb3);
	}
	public static void main(String[]args){
		TestJPanel p1 = new TestJPanel(new JButton("Button1"), 
				new JButton("Button2"), new JButton("Button3"));
		TestJPanel p2 = new TestJPanel(new JButton("Button4"), 
				new JButton("Button5"), new JButton("Button6"));
		
		JFrame frame = new JFrame();
//		frame.add(p1,java.awt.BorderLayout.SOUTH);
//		frame.add(p2,java.awt.BorderLayout.CENTER);
		frame.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT,5,5));
		frame.add(p1);
		frame.add(p2);
		frame.setTitle("TestJPanel");
		frame.setSize(540,80);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

class LayoutGrid extends JFrame{
	public LayoutGrid(){
		setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT,5,5));
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		p1.setLayout(new java.awt.GridLayout(1,3,5,5));
		p2.setLayout(new java.awt.GridLayout(1,3,5,5));
		
		JButton jb1 = new JButton("Button1");
		JButton jb2 = new JButton("Button2");
		JButton jb3 = new JButton("Button3");
		JButton jb4 = new JButton("Button4");
		JButton jb5 = new JButton("Button5");
		JButton jb6 = new JButton("Button6");
		p1.add(jb1);
		p1.add(jb2);
		p1.add(jb3);
		p2.add(jb4);
		p2.add(jb5);
		p2.add(jb6);
		
		add(p1);
		add(p2);
	}
	public static void main(String[]args){
		JFrame frame = new LayoutGrid();
		frame.setTitle("LayoutGrid");
		frame.setSize(540,80);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
class LayoutBorder extends JFrame{
	public LayoutBorder(){
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		
		JButton jb1 = new JButton("Button1");
		JButton jb2 = new JButton("Button2");
		JButton jb3 = new JButton("Button3");
		JButton jb4 = new JButton("Button4");
		JButton jb5 = new JButton("Button5");
		JButton jb6 = new JButton("Button6");
		p1.add(jb1);
		p1.add(jb2);
		p1.add(jb3);
		p2.add(jb4);
		p2.add(jb5);
		p2.add(jb6);
		
		add(p1,java.awt.BorderLayout.SOUTH);
		add(p2,java.awt.BorderLayout.CENTER);
	}
	public static void main(String[]args){
		JFrame frame = new LayoutFlow();
		frame.setTitle("LayoutBorder");
		frame.setSize(540,80);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
class LayoutFlow extends JFrame{
	public LayoutFlow(){
		setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT,5,5));
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		
		JButton jb1 = new JButton("Button1");
		JButton jb2 = new JButton("Button2");
		JButton jb3 = new JButton("Button3");
		JButton jb4 = new JButton("Button4");
		JButton jb5 = new JButton("Button5");
		JButton jb6 = new JButton("Button6");
		p1.add(jb1);
		p1.add(jb2);
		p1.add(jb3);
		p2.add(jb4);
		p2.add(jb5);
		p2.add(jb6);
		
		add(p1);
		add(p2);
	}
	public static void main(String[]args){
		JFrame frame = new LayoutFlow();
		frame.setTitle("LayoutFlow");
		frame.setSize(540,80);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

總結到目前為止,還未講解與元件相關聯的操作方法的實現,只是對最基本的使用者介面的設計。後續會講解元件關聯方法的實現。