รู้จัก GUI component ส่วนติดต่อกับผู้ใช้ด้วยกราฟิกที่มีการสร้างขึ้นจาก

Download Report

Transcript รู้จัก GUI component ส่วนติดต่อกับผู้ใช้ด้วยกราฟิกที่มีการสร้างขึ้นจาก

Graphic User Interface (GUI)


ส่วนติดตอกั
กทีม
่ ก
ี ารสรางขึ
น
้ จากโปรแกรม
่ บผู้ใช้ดวยกราฟิ
้
้
เรียกใช้งานจากกลุมค
่ าสั่ ง AWT Set (Abstract Windowing
Toolkit) และ
Swing Set ซึง่ เราสามารถสราง
GUI ได้ 3 ประเภท คือ
้
 Container คือ คอมโพเนนตที
่ ามารถมีคอมโพเนนตอื
่ เป็ น
์ ส
์ น
ส่วนประกอบได้ โดยมีคุณลักษณะเป็ น Abstract Class ซึง่
สามารถแบงได
่
้ 2 ประเภท คือ
 Top Level สามารถแสดงบนหน้าจอไดเป็
้ นตัวแรก เช่น
Frame และ Dialog
 Non - top Level คือไมสามารถแสดงบนหน
่
้ าจอไดเป็
้ นตัว
แรก เช่น Panel Scroll และ Pane
 Simple Component คือ คอมโพเนนตทั
์ ว่ ไป เช่น Button,
Label, Radio Button, List, Check box หรือ Combobox
2
เป็ นตน
้




เป็ นคอมโพเนนตประเภท
Top – Level Container
์
สร้างจากคลาส JFrame เรียกใช้จากกลุมค
่ าสั่ ง Swing
Set
ประกอบดวยหั
วเรือ
่ ง ขอบเขต ขนาดพืน
้ ที่ และปุ่ม
้
ตางๆ
ทีร่ องรับการจัดการหน้าตาง
่
่
โปรแกรมทีเ่ ป็ น GUI จะต้องมีเฟรมอยางน
่
้ อย 1 เฟรม
เป็ นองคประกอบเสมอ
์
มีรูปแบบการใช้งาน ดังนี้
JFrame frameName = new JFrame(title);
โดยที่
frameName
เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจาก
์ ป
3
คลาส JFrame


ทาหน้าทีก
่ าหนดรูปแบบการทางานเมือ
่ มีการปิ ดเฟรม
ขึน
้ อยูกั
่ าหนดให้ดังนี้
่ บอารกิ
์ วเมนตที
์ ก
 DO_NOTHING_ON_CLOSE ไมต
่ ้องทาอะไร
 HIDE_ON_CLOSE เป็ นการซ่อนหน้าตาง
โดย
่
นาหน้าตางออกไปจากหน
่
้ าจอ
แตหน
สามารถแสดงได
อี
่ ้ าตางจะไม
่
่
้ กรอบ
 DISPOSE_ON_CLOSE เป็ นการซ่อนและทาลาย
หน้าตาง
โดยนาหน้าตางออกไปจากหน
่
่
้ าจอและคืน
ทรัพยากรตางๆ
ทีใ่ ช้ให้กับระบบ
่
 EXIT_ON_CLOSE เป็ นการปิ ดโปรแกรมโดยใช้
ฟังกชั
์ น System.exit(0)
4
import javax.swing.*;
public class FrameTest {
public static void main(String args[]) {
JFrame f = new JFrame("Frame Test");
}
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLO
SE);
f.setSize(200, 150);
f.setVisible(true);
5



เป็ นคอมโพเนนตประเภท
Non - top Level Container
์
ต้องวางบน Container
สร้างจากคลาส Jpanel
มีรูปแบบการใช้งาน ดังนี้
JPanel pName = new JPanel();
หรือ
JPanel pName = new JPanel(manager);
โดยที่
pName
เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจาก
์ ป
คลาส JPanel
manager เป็ นรูปแบบของ LayoutManager ที่
ใช้สาหรับจัดวาง
คอมโพเนนตบน
์
Panel
Default Layout Manager จะเป็ นแบบ Flow Layout 6
import java.awt.*;
import javax.swing.*;
public class PanelTest {
public static void main(String args[]) {
JFrame f = new JFrame("Panel Test");
JPanel p = new JPanel();
p.setBackground(Color.CYAN);
f.add(p);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLO
SE);
f.setSize(200, 150);
f.setVisible(true);
7

เป็ นปุ่มใช้งานทัว่ ไปทีส
่ รางจากคลาส
Jbutton มีรูปแบบ
้
การใช้งาน ดังนี้
JButton buttonName = new JButton(text);
หรือ
JButton buttonName = new JButton(text, icon);
โดยที่
buttonName เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจากคลาส
์ ป
JButton
text
เป็ นข้อความทีต
่ ้องการให้แสดงบนปุ่ม
icon
เป็ นรูปทีต
่ ้องการให้แสดงบนปุ่ม
8
import javax.swing.*;
public class ButtonTest {
public static void main(String args[]) {
JFrame f = new JFrame("Button Test");
JPanel p = new JPanel();
Icon ani = new ImageIcon("Course.gif");
JButton b1 = new JButton("Detail",ani);
JButton b2 = new JButton("Close");
p.add(b1); p.add(b2);
f.add(p);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(200, 150);
f.setVisible(true);
}
}
9


ใช้แสดงขอความแบบบรรทั
ดเดียว
้
สร้างจากคลาส Jlabel มีรูปแบบการใช้งาน ดังนี้
JLabel lName = new JLabel(text, icon, Alignment);
โดยที่
lName
เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจาก
์ ป
คลาส JLabel
text
เป็ นข้อความทีต
่ ้องการให้แสดงบน
Label
icon
เป็ นรูปทีต
่ ้องการให้แสดงบน Label
Alignment เป็ นตาแหน่งการจัดวางตามแนวนอนบน
Label
SwingConstants.LEFT จัดวางแบบชิด
10
ซาย
import java.awt.*;
import javax.swing.*; l1.setFont(fn);
public class
LabelTest {
l2.setFont(fn);
public static void main(String
args[]) {
l3.setFont(fn);
Font
fn = new Font("Courier New", Font.BOLD, 20);
l4.setFont(fn);
JFrame
f = new
JFrame("Label
Test");
l1.setPreferredSize(new
Dimension(170,
p.add(l1);
p.add(l2);
JPanel p = new
JPanel();
30));
p.add(l3);
p.add(l4);
Icon
ani = new
ImageIcon("Course.gif");
l2.setPreferredSize(new
Dimension(170,
f.add(p);
JLabel l1 = new JLabel("Label Test",
30));
SwingConstants.CENTER);
l3.setPreferredSize(new
Dimension(170,
f.setDefaultCloseOperation(JFrame.EXIT
JLabel l2 =_ON_CLOSE);
new JLabel(ani, SwingConstants.CENTER);
30));
JLabel
l3 = new
JLabel("IDimension(170,
am
JAVA",
l4.setPreferredSize(new
f.setSize(200,
200);
SwingConstants.CENTER);
30));
f.setVisible(true);
11
JLabel
l4 =}new JLabel("I am JAVA", ani,
l1.setForeground(Color.blue);

เป็ นคอมโพเนนตส
ใช
้
้ ้งาน
์ าหรับรอรับขอความจากผู
สร้างจากคลาส JTextField
มีรูปแบบการใช้งาน ดังนี้
JTextField textName = new JTextField(text,
Length);
โดยที่
textName เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจากคลาส
์ ป
JTextField
text
เป็ นข้อความทีต
่ ้องการให้แสดงบน
Text Field
Length
เป็ นจานวนตัวอักษรจะแสดงใน
12
Text Field

เป็ นคอมโพเนนตส
แสดงค
า่
้ ลรหัสผานโดยไม
่
่
์ าหรับรับขอมู
ข้อมูล
สร้างจากคลาส JPasswordField มีรูปแบบการใช้งาน
ดังนี้
JPasswordField pw = new JPasswordField(text,
Length);
โดยที่
pw
เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจากคลาส
์ ป
JPasswordField
text เป็ นรหัสผานที
ต
่ ้องการแสดงบน Password
่
Field
13
Lengthเป็ นจานวนตัวอักษรของรหัสผาน
่
import java.awt.*;
import javax.swing.*;
public class TextTest {
public static void main(String args[]) {
Font fn = new
Font("Courier New", Font.BOLD, 20);
p.add(t1);
JFrame f = new
JFrame("Text and PassWord Test");
p.add(t2);
JPanel p = new
JPanel();
p.add(pw);
JLabel t1 = new
JLabel("Text and PassWord Test");
f.add(p);
JTextField t2 = new JTextField("admin", 15);
JPasswordField
pw = new JPasswordField("123", 15);
f.setDefaultCloseOperation(JFrame.EXIT
t1.setFont(fn);
t2.setFont(fn); pw.setFont(fn);
_ON_CLOSE);
t2.setForeground(Color.white);
f.setSize(320, 150);
t2.setBackground(Color.blue);
f.setVisible(true);
}
14
import java.awt.*;
mlbl.setForeground(Color.blue);
import javax.swing.*; mlbl.setFont(fn1);
ulbl.setFont(fn2);
public class SigninFrame
{
pwlbl.setFont(fn2);
public static void main(String
args[]) {
JFrame f; JPanel p;usertxt.setFont(fn1);
JLabel mlbl, ulbl, pwlbl; JTextField
pwtxt.setFont(fn1);
usertxt;
signbtn.setFont(fn2);
JPasswordField pwtxt;
JButton signbtn, resetbtn;
resetbtn.setFont(fn2);
Font fn1 = new Font("Tahoma",
Font.BOLD, 12);
p.add(mlbl); New",p.add(ulbl);
Font fn2 = new Font("Courier
Font.BOLD, 14);
p.add(usertxt);
f = new JFrame("เขาสู
new JPanel();
้ ่ ระบบ"); p =p.add(pwtxt);
p.add(pwlbl);
mlbl = new JLabel("***
กรุณาป้อนขอมู
้ ลเขาสู
้ ่ ระบบ ***");
p.add(signbtn);
ulbl = new JLabel("username");
p.add(resetbtn);pwlbl = new
JLabel("password");f.add(p);
usertxt = new JTextField(10);
pwtxt = new
JPasswordField(10);
15



เป็ นคอมโพเนนตส
วเลือกทีส
่ ามารถเลือก
้
์ าหรับการสรางตั
ไดเพี
้ ยงหนึ่งตัวเลือก
สร้างจากคลาส JRadioButton และใช้คลาส
ButtonBGroup ในการจัดกลุมตั
ให้อยูใน
่ วเลือกตางๆ
่
่
กลุมเดี
่ ยวกัน
มีรูปแบบการใช้งาน ดังนี้
JRadioButton radioName = new JRadioButton(text,
icon, boolValue);
โดยที่
radioName เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจากคลาส
์ ป
JRadioButton
text
เป็ นข้อความทีต
่ ้องการให้แสดงบน
RadioButton
icon
เป็ นไอคอนทีต
่ ้องการให้แสดงบน
16


เป็ นคอมโพเนนตส
อมู
่ ามารถ
้
้ ลทีส
์ าหรับสรางรายการข
เลือ
่ นรายการขึน
้ ลง
สร้างจากคลาส JList และใช้คลาส JScrollPane
จัดการรายการขอมู
้ ลใน List
มีรูปแบบการใช้งาน ดังนี้
JList listName = new JList();
หรือ
JList listName = new JList(dataModel);
หรือ
JList listName = new JList(items);
โดยที่
listName เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจากคลาส
์ ป
Jlist
17


เป็ นคอมโพเนนตส
Scroll bar
้
์ าหรับสราง
สร้างจากคลาส JScrollPane
มีรูปแบบการใช้งาน ดังนี้
JScrollPane panelist = new JScrollPane(listName);
โดยที่
panelist
เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจาก
์ ป
คลาส JScrollPane
listName เป็ นรายการขอมู
้ ลประเภท List
18
AList
= new
JList(AniList);
public
class
Radio_List_Test
{
AList.setFont(fn);
public static void main(String args[]) {
AList.setPreferredSize(new Dimension(135, 140));
JFrame f; JPanel p; ButtonGroup bg; JRadioButton n1,
AList.setVisibleRowCount(5);
n2; JList AList;
String AniList[] = {"CAT", "RAT", "DOG", "PIG", "DUCK",
AList.setSelectionMode(ListSelectionModel.MULTIPLE_IN
"EGG", "MILK"};
TERVAL_SELECTION);
Font fn = new
Font("Courier
New", Font.BOLD, 16);
JScrollPane
panelist
= new JScrollPane(AList);
f = new JFrame("Select Component Test");
p.add(n1);
p = new JPanel();
p.add(n2);
bg = new ButtonGroup();
p.add(panelist);
n1 = new JRadioButton("MALE", true);
f.add(p);
n2 = new JRadioButton("FEMALE");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(230,
bg.add(n1); 200);
bg.add(n2);
f.setVisible(true);
19
n1.setFont(fn);
n2.setFont(fn);


เป็ นคอมโพเนนตส
วเลือกทีเ่ ลือกได้
้
์ าหรับการสรางตั
มากกวาหนึ
่งตัวเลือก
่
สร้างจากคลาส JCheckBox มีสถานะเป็ น true หรือ
false
มีรูปแบบการใช้งาน ดังนี้
JCheckBox checkName = new JCheckBox(text,
icon);
โดยที่
checkName
เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจาก
์ ป
คลาส JCheckBox
text
เป็ นข้อความทีต
่ ้องการให้แสดงบน
20
CheckBox


เป็ นคอมโพเนนตส
้ ล ซึ่งแสดงได้
์ าหรับแสดงรายการขอมู
เพียง 1 รายการและ
เลือกขอมู
้ ลในไดเพี
้ ยง 1 รายการเทานั
่ ้น
สร้างจากคลาส JComboBox มีรูปแบบการใช้งาน ดังนี้
JComboBox comboName = new
JComboBox(items);
โดยที่
comboName
เป็ นชือ
่ ออบเจ็กตที
่ ระกาศจาก
์ ป
คลาส JComboBox
items
เป็ นรายการขอมู
้ ลประเภท Object หรือ
Vector
21
combo
= new JComboBox(country);
import
java.awt.*;
combo.setFont(fn);
import
javax.swing.*;
combo.setPreferredSize(new
public
class Check_Combo_Test { Dimension(150, 20));
combo.setSelectedItem("Japan");
public
static void main(String args[]) {
combo.setMaximumRowCount(6);
JFrame f; JPanel p; JCheckBox myCheckbox1,
p.add(myCheckbox1);
myCheckbox2;
p.add(myCheckbox2);
JComboBox combo;
p.add(combo);
Font fn = new Font("Courier New", Font.BOLD, 16);
f.add(p);
String country[] =
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
{"ThaiLand“,"Italy“,"Japan“,"France“,"England“,"China"};
f.setSize(250,
250);
f = new JFrame("Select
Component Test");
f.setVisible(true);
p = new JPanel();
} myCheckbox1 = new JCheckBox("Asia");
}
22
myCheckbox2 = new JCheckBox("Europe");

เป็ นเครือ
่ งมือให้ผู้ใช้งานเลือกใช้คาสั่ งตางๆ
จาก
่
รายการซึง่ ถูกสรางขึ
น
้ จากเมนูบาร ์
้
มีขก
น
้ั าหนดเมนู
ตอนดังนี้ บารใหกับ Frame โดยใชเมธอด
้
์ ้
 สร้างเมนูบารจากคลาส
JMenuBar
์
setJMenuBar
JMenuBar menubar = new JMenuBar();
frameName.setJMenuBar(menubar);
 สร้างเมนูจากคลาส JMenu
โดยที่ menuName = new JMenu(itemName);
JMenu
 สร้างเมนู
ยอย
(Menuเป็Item)
จากคลาส
JMenuItem
menubar
นชือ
่ เมนู
บาร ์
่
JMenuItem
menuItemName
=อ
menuName
เป็ นชื
่ new
รายการเมนูใน
JMenuItem(subItemName);
เมนู
 เพิม
่ เมนูยอยเข
าในเมนู
ทต
ี่ ้องการ
่
้
itemName
เป็ นขอความที
แ
่ สดงใน
menuName.add(menuItemName);
้
 เพิ
ม
่ เมนูเขาในเมนู
บาร ์
23
รายการเมนู
้
menuOpen
import
java.awt.*;= new JMenuItem("Open");
menuExit
= new JMenuItem("Exit");
import
javax.swing.*;
menuFile.setFont(fn);
menuNew.setFont(fn);
public
class MenuTest {
menuN1.setFont(fn);
menuN2.setFont(fn);
public
static void main(String
args[]) {
menuOpen.setFont(fn);
menuExit.setFont(fn);
Font fn = new Font("Courier
New", Font.BOLD, 16);
menuAbout.setFont(fn);
JFrame f; JMenuBar menubar; JMenu menuFile,
menuFile.add(menuNew);
menuNew,
menuAbout;
menuFile.addSeparator();
JMenuItem menuN1, menuN2, menuOpen, menuExit;
menuFile.add(menuOpen);
f = new JFrame("Menu Test"); menubar = new
menuFile.add(menuExit);
JMenuBar();
menubar.add(menuFile);
menuFile = new JMenu("File"); menuAbout = new
menubar.add(menuAbout);
JMenu("About");
f.setJMenuBar(menubar);
menuNew = new JMenu("New");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
24
menuN1 = new JMenuItem("Java"); menuN2 = new



LayoutManager หมายถึง รูปแบบทีใ่ ช้สาหรับ
การจัดวางคอมโพเนนตบน
Panel
์
Default เป็ นแบบ FlowLayout ซึง่ เป็ นการจัดวาง
แบบเรียงไปตามลาดับในบรรทัดเดียวกัน หากไม่
สามารถแสดงผลไดในหนึ
่งบรรทัด จะแสดงผล
้
ตอในบรรทั
ดใหม่
่
สามารถระบุ Layout ทีต
่ ้องการไดโดยใช
้
้เมธอด
setLayout() ดังนี้
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
25
JButton a = new JButton("หนึ่ง"); JButton b = new
 FlowLayout
Manager เป็ นการจัดเรียงคอมโพเนนต ์
JButton("สอง");
JButton
= new่ งของคอมโพเนนต
JButton("สาม"); JButton
d = new
ตามล
าดับตcาแหน
จากซ
้ายไปขวาและ
์
JButton("สี
่ ");
บนลงล
าง
่ e = new JButton("ห้า"); JButton g = new
JButton
import
javax.swing.*;
JButton("หก");
importJButton
java.awt.*;
h = new JButton("เจ็ด"); JButton i = new
public
class FlowLayoutTest {
JButton("แปด");
public
staticj void
main(String[]
JButton
= new
JButton("เกา");
้ args) {
a.setFont(fn);
b.setFont(fn);c.setFont(fn);
Font
fn = new Font("Microsoft
Sans Serif", Font.BOLD,
14);d.setFont(fn); e.setFont(fn);g.setFont(fn);
h.setFont(fn);
j.setFont(fn);
JFrame
f = new i.setFont(fn);
JFrame("FlowLayOut
Test");
p.add(a);
p.add(b);
p.add(c); p.add(d);
JPanel
p = new
JPanel();
p.add(e);
p.setLayout(new FlowLayout());
p.add(g); p.add(h); p.add(i); p.add(j);
f.add(p);
26
JButton a = new JButton("หนึ่ง"); JButton b = new JButton("

เป็ นการจัดเรียงคอมโพเนนต ์ โดยแบงพื
้ ทีเ่ ป็ น 5 ส่วน
สอง");
่ น
JButton
คือ c = new JButton("สาม"); JButton d = new JButton("
สี่ ");North, South, East, West และ Center ในแตละสวน
่ ่
JButton e = new JButton("ห้า"); JButton g = new JButton("
จะวางได้ 1 คอมโพเนนต ์
หก");
JButton
= new JButton("เจ็
ด"); JButton
i =า
JButton("

หากตh้องการจั
ดวางคอมโพเนนต
มากกว
1 คอมโพเนนต
่ new
์
์
แปด");
สามารถแบงพื
น
้ ทีใ่ นส่วนใดๆ ออกเป็ น 5 ส่วน ไป
่
JButton j = new JButton("เกา");
้
เรื
อ
่
ย
ๆ
ได
a.setFont(fn); b.setFont(fn);
c.setFont(fn); d.setFont(fn);
้
e.setFont(fn);
import javax.swing.*;
g.setFont(fn);
h.setFont(fn); i.setFont(fn); j.setFont(fn);
import java.awt.*;
JPanel p1 = new JPanel();
p1.setLayout(new
public
class BorderLayoutTest {
BorderLayout());
JPanel
= new
JPanel();
p2.setLayout(new
publicp2static
void
main(String[]
args) {
BorderLayout());
Font fn = new Font("Microsoft Sans Serif", Font.BOLD,
p.add(p1, BorderLayout.NORTH);
27
14);
p1.add(a,
BorderLayout.WEST); p1.add(b,
JButton a = new JButton("หนึ่ง"); JButton b = new
 เป็
นการจัดเรียงคอมโพเนนต ์ โดยแบงพื
้ ทีเ่ ป็ น Grid
JButton("สอง");
่ น
JButton
c = new JButton("สาม");
JButton d = new
ตามจ
านวนแถวและคอลั
มน ์
JButton("สี่ "Grid
);
 ในแตละ
จะวางได้ 1 คอมโพเนนต ์ โดย
่
JButton
e = new JButton("ห
้า"); JButton g = new
จัJButton("หก");
ดเรียงไปตามลาดับซ้ายไปขวา และ
JButton
บนลงล
าง
่ h = new JButton("เจ็ด"); JButton i = new
JButton("แปด");
import
javax.swing.*;
j = new JButton("เกา");
้
importJButton
java.awt.*;
b.setFont(fn);c.setFont(fn);
publica.setFont(fn);
class GridLayoutTest
{
d.setFont(fn); e.setFont(fn);g.setFont(fn);
public static void main(String[] args) {
h.setFont(fn); i.setFont(fn); j.setFont(fn);
Font
fn = new
Font("Microsoft
Sans
Serif", Font.BOLD,
p.add(a);
p.add(b);
p.add(c);
p.add(d);
p.add(e);
14);p.add(g); p.add(h); p.add(i); p.add(j);
JFrame
f.add(p);f = new JFrame("GridLayOut Test");
JPanel
p = new JPanel();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE
28
addItem(p,
a, 0, 0, 1,
1, GridBagConstraints.WEST);
public
static
void
main(String[]
args)
{ งพืน
 เป็ นการจัดเรียงคอมโพเนนตโดยแบ
้ ทีเ่ ป็ นส่วนตาม
่
์
addItem(p, b, 1, 0, 1, 1, GridBagConstraints.WEST);
JFrame f = new JFrame("GridBagLayout
Test");
จานวนแถวและคอลั
ม
น
c, 2,
์ 0, 1, 1, GridBagConstraints.WEST);
JPanel p addItem(p,
= new JPanel();
คลp.setLayout(new
าย
มี
่ ด
ื หยุนกว
าคื
addItem(p,Manager
d, 0, 1, 1, 1,แต
GridBagConstraints.WEST);
้ GridLayout
่ ข้อทีย
่
่ อ
GridBagLayout());
addItem(p,
e, 1, 1, 1, 2, GridBagConstraints.WEST);
ในการจั
ด
วาง
1
คอมโพเนนต
้ =ทีม
่ ากกวา่
JButton a = new JButton("หนึ่ง์ ");สามารถใช
JButton ้พื
bน
addItem(p,
g, 2, 1, 1, 1, GridBagConstraints.WEST);
1 แถว
1 คอลั
มน์ ได
new
JButton("สอง");
้ 2, 1, 1, GridBagConstraints.WEST);
addItem(p, h, 0,
importJButton
javax.swing.*;
caddItem(p,
= new JButton("สาม");
JButton d =
i, 2, 2, 1, 1, GridBagConstraints.WEST);
import
java.awt.*;
new JButton("สี
่ ");
addItem(p, j, 0, 3, 3, 1, GridBagConstraints.WEST);
publicJLabel
class e
GridBagLayoutTest
= new JLabel("ห้า",{
public static f.add(p);
void addItem(JPanel p, JComponent c,
SwingConstants.CENTER);
int
x, int y, int width, int height,
int align) {60));
e.setPreferredSize(new
Dimension(60,
GridBagConstraints
gc = new GridBagConstraints();
e.setOpaque(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gc.gridx
=f.setSize(250,
x;
gc.gridy = y;
e.setBackground(Color.cyan);
200);
gc.gridwidth
= width;
gc.gridheight =JButton
height;h =
JButton gf.setVisible(true);
= new
JButton("หก");
new gc.insets
JButton("เจ็
ด"); Insets(5, 5, 5, 5);
} = new
29
gc.anchor
align;
gc.fill = GridBagConstraints.NONE;
JButton i ==new
JButton("แปด");



เป็ นการจัดการในส่วนโตตอบระหว
างผู
้
่
้ใช้ กับ GUI
ดวย
เช่น การคลิกทีป
่ ่ม
ุ Button หรือการกด Enter
้
บนแป้นพิมพที
์ ่ Text Field เป็ นต้น
จะต้องตรวจจับเหตุการณก
าผู
่
่ ้ใช้มีการกระทากับ
์ อนว
คอมโพเนนตที
าง
ซึ่งเป็ นหน้าทีข
่ อง
้
์ เ่ หตุการณใดบ
์
ออบเจ็กตที
์ เ่ ป็ น Event Listener
จากนั้นนา Event Listener ไปผูกติดกับคอมโพเนนต ์
เช่น ต้องการตรวจจับเหตุการณที
่ ่ม
ุ CloseButton
์ ป
โดยสรางออบเจ็
กตจากคลาส
ButtonListener เพือ
่ ให้
้
์
ออบเจ็กตดั
าหน้าทีเ่ ป็ น Event Listener และ
่
์ งกลาวท
นาไปผูกติดกับปุ่ม CloseButton โดยมีรป
ู แบบดังนี้
30
buttonName.addActionListener(new
ประเภท
เหตุการณ ์
ActionEvent
AdjustmentEv
ent
ComponentEv
ent
อินเตอรเฟส
์
เมธอด
ActionListener
AdjustmentList
ener
ComponentLis
tener
actionPerformed(ActionEvent)
adjustmentValueChanged(Adjust
mentEvent)
componentMoved(ComponentEv
ent)
componentHidden(ComponentEv
ent)
componentResized(ComponentE
vent)
componentShown(ComponentEv
ent)
ContainerEven ContainerListe componentAdded(Container
t
ner
Event)
componentRemoved(Container
Event)
FocusEvent
FocusListener focusGained(FocusEvent)
31



การเขียนโปรแกรมในส่วนจัดการเหตุการณ์ สามารถจัดการให้อยู่
ภายใน Inner Class
โดยสรางเป็
นคลาสทีม
่ ก
ี าร implements อินเตอรเฟสซึ
ง่ สอดคลอง
้
้
์
กับเหตุการณที
้ และ
์ เ่ กิดขึน
กาหนดหน้าทีก
่ ารทางานให้กับเมธอดในอินเตอรเฟสนั
้นๆ โดยมี
์
รูปแบบดังนี้
private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getSource()==buttonName) {
}
}
}
โดยที่
ButtonListener
เป็ นออบเจ็กตจากคลาส
์
ButtonListener
32
ActionListener
เป็ นเหตุการณทีต
่ องการตรวจจับ
private
class ButtonListener implements ActionListener
import
java.awt.event.*;
{
import
javax.swing.*;
actionPerformed(ActionEvent
publicpublic
classvoid
CloseButtonTest
extends JFrame {e) {
if (e.getSource()
b) {JButton b;
private
JPanel p; Icon==
ani;
JOptionPane.showMessageDialog(null, "See
public
CloseButtonTest(String
title) {
You Again
!!!");
super(title);
System.exit(0);
p =} new JPanel();
ani
} = new ImageIcon("Course.gif");
} b = new JButton("Close", ani);
public
static void main(StringButtonListener());
args[]) {
b.addActionListener(new
CloseButtonTest
b = new CloseButtonTest("Button
p.add(b);
Test");
add(p);
} b.setSize(170, 90);
b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE
33
private
class MenuListener implements ActionListener {
import
javax.swing.*;
public
void actionPerformed(ActionEvent e) {
import
java.awt.event.*;
Object
source = e.getSource();
public class
ExitMenuTest
extends JFrame {
if (source
== menuExit)
JMenuBar
menubar;
JMenu{menuFile; JMenuItem
System.exit(0);
menuExit;
}
public
} ExitMenuTest(String title) {
} super(title);
menubar
newmain(String
JMenuBar();
public
static=void
args[]) {
menuFile = new
ExitMenuTest
f =JMenu("File");
new ExitMenuTest("Menu Test");
menuExit = new JMenuItem("Exit", new
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon("Course.gif"));
f.setSize(200,
200);
menuFile.add(menuExit);
f.setVisible(true);
menubar.add(menuFile);
}
setJMenuBar(menubar);
}
34