21

Basic Event Listener

Embed Size (px)

Citation preview

Page 1: Basic Event Listener
Page 2: Basic Event Listener

GUI & Event• ใน GUI เราสามารถท าอะไรไดมากมาย

– คลกเมาส– เลอน mouse wheel– กดปม keyboard– Touch แลวลาก รวบหานว

• การท าสงใด ๆ ใน GUI จะเกดเหตการณ– ท า 1 ครง = สราง 1 เหตการณ

• event-driven programming แบบหนง– โปรแกรมท างานตามเหตการณทสรางขน

Page 3: Basic Event Listener

Listener• Listener = ผรบฟง

– คอยฟงคนพด– อาจมโตตอบตามสถานการณ– การเปนผฟงทด

• Event Listener = ผรบฟงเหตการณ– คอยฟงเหตการณ (ทผใชสราง)– เมอมเหตการณเกดขน จะท างานตามทก าหนด– Listener จะท าอะไร ขนกบผเขยนโปรแกรม

Page 4: Basic Event Listener

Listener

ทมา: http://mintclub.kobe-np.co.jp/img/present/367_1_present.JPG

Page 5: Basic Event Listener

Event Listener• Listener ~= พนกงานรกษาความปลอดภย

– รปภ. ดแลรกษาความปลอดภย– Listener = รปภ.– Event = เหตการณทเกดขน

• รปภ. ตอบสนองตอเหตการณตาง ๆ– แลกบตรผมาตดตอ– ดแลความปลอดภยทก 30 นาท– ไลกดขโมย

Page 6: Basic Event Listener

Event Listener

ทมา: http://www.youtube.com/watch?feature=player_embedded&v=Q4RAXl4z0gk

① ②

③ ④

Page 7: Basic Event Listener

Event Listener• Java API ม listener ส าหรบ swing

– อยในรปของ interface

• แตละ component จะม listener คอยจบเหตการณ– ตองเพม listener เขาไปใน component

• พดถง listener ทไดใชเทานน– ActionListener– KeyListener

Page 8: Basic Event Listener

Using Listener• การใชงาน listener ม 3 วธ

– implements กบ JFrame class– Inner class – Anonymous class

• ทกวธม tradeoff– Anonymous class - listener ทท างานเฉพาะเจาะจง– Implements กบ class - listener ทท างานทวไป

Page 9: Basic Event Listener

ActionListener• Listener จบเหตการณทมการคลกเมาส• อยาสบสนกบ MouseListener• เพม listener ใช addActionListerner(L: ActionListener)• เหตการณท listener สามารถจบได

Method Name หนาทactionPerformed(E: ActionEvent) เมอ component ถกคลก

Page 10: Basic Event Listener

Counter GUIpublic class CounterGUI extends JFrame {

private static final Font REGULAR_FONT = new Font("Tahoma", Font.PLAIN, 36);private static final Font SMALL_FONT = new Font("Tahoma", Font.PLAIN, 26);private int times;private JLabel lblCount;private JButton btnClick;

public CounterGUI() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new GridLayout(2, 1));

lblCount = new JLabel(Integer.toString(times), SwingConstants.CENTER);lblCount.setBorder(new EmptyBorder(3, 3, 3, 3));lblCount.setFont(REGULAR_FONT);btnClick = new JButton("Click me");btnClick.setFont(SMALL_FONT);

add(lblCount);add(btnClick);pack();

}}

Page 11: Basic Event Listener

Counter GUIbtnClick.addActionListener(new ActionListener() { // Anonymous Class

@Overridepublic void actionPerformed(ActionEvent e) {

lblCount.setText(Integer.toString(++times));}

});

คลกเมาส1 ครง

คลกเมาส1 ครง

Page 12: Basic Event Listener

Rock – Scissors – Paper GUI• เกม เปา ยง ฉบ แบบงาย ๆ

– 0 แทนคอน– 2 แทนกรรไกร– 5 แทนกระดาษ

• เมอกดปมเลอก หนาจอจะแสดงผลการเปายงฉบ

Page 13: Basic Event Listener

Rock – Scissors – Paper GUIimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;

public class RSHGUI extends JFrame implements ActionListener {private static final Font REGULAR_FONT = new Font("Tahoma", Font.PLAIN, 16);private JPanel wrapper;private JLabel lblPlayerResult;private JLabel lblComResult;private JButton btnHammer;private JButton btnScissor;private JButton btnPaper;

public RSHGUI() {setDefaultCloseOperation(EXIT_ON_CLOSE);

wrapper = new JPanel();wrapper.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5)));wrapper.setLayout(new GridLayout(3, 3, 5, 5));wrapper.add(new JLabel("Player", SwingConstants.CENTER));wrapper.add(new JLabel("Computer", SwingConstants.CENTER));wrapper.add(new JLabel()); // Dummy Component

Page 14: Basic Event Listener

Rock – Scissors – Paper GUIlblPlayerResult = new JLabel("-", SwingConstants.CENTER);lblComResult = new JLabel("-", SwingConstants.CENTER);wrapper.add(lblPlayerResult);wrapper.add(lblComResult);wrapper.add(new JLabel());btnHammer = new JButton("0");btnHammer.addActionListener(this);btnScissor = new JButton("2");btnScissor.addActionListener(this);btnPaper = new JButton("5");btnPaper.addActionListener(this);wrapper.add(btnHammer);wrapper.add(btnScissor);wrapper.add(btnPaper);

for (Component c : wrapper.getComponents())c.setFont(REGULAR_FONT);

add(wrapper);pack();

}}

Page 15: Basic Event Listener

Rock – Scissors – Paper GUI@Overridepublic void actionPerformed(ActionEvent e) {

JButton pressedBtn = (JButton) e.getSource();lblPlayerResult.setText(pressedBtn.getText());

int comRandResult = (int) (Math.random() * 3);lblComResult.setText(Integer.toString(comRandResult == 1 ? 2 :

comRandResult == 2 ? 5 : 0));}

• ลองทดสอบผลดวยตนเอง

Page 16: Basic Event Listener

KeyListener• Listener จบเหตการณเมอกดปมบน keyboard• ใชไมไดผลกบ JFrame• เพม listener ใช addKeyListerner(L: KeyListener)• เหตการณท listener สามารถจบได

Method Name หนาทkeyTyped(E: KeyEvent) เมอ keyboard มการพมพ

keyReleased(E: KeyEvent) เมอปลอยปมบน keyboard

keyPressed(E: KeyEvent) เมอกดปม keyboard

Page 17: Basic Event Listener

KeyListener• Listener keyPressed() เมอกดคางจะท างานรว ๆ

– ระวงเมอใช listener นท างาน

• Listener ทท างานเกยวกบการแกไขขอมล ควรใช keyReleased()– เพม ลบ แกไข– Object instantiating

• สามารถเลอกปฏบตเมอกดปมตามทก าหนดโดยใช if– e.getKeyCode(): int คนคาเปนตวเลขของปมทกด– KeyEvent มคาคงทของปมอย– if (e.getKeyCode() == KeyEvent.VK_...) { }

Page 18: Basic Event Listener

Hello GUIimport java.awt.*;import java.awt.event.*;import javax.swing.*;

public class HelloGUI extends JFrame {private static final Font REGULAR_FONT = new Font("Tahoma", Font.PLAIN, 16);private JPanel wrapper;private JTextField txtUsername;private JButton btnSubmit;

public HelloGUI() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);wrapper = new JPanel();

txtUsername = new JTextField(10);wrapper.add(txtUsername);btnSubmit = new JButton("Submit");btnSubmit.addActionListener(new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent e) {

hello();}

});

Page 19: Basic Event Listener

Hello GUIwrapper.add(btnSubmit);

for (Component c : wrapper.getComponents())c.setFont(REGULAR_FONT);

add(wrapper);pack();

}

private void hello() {JOptionPane.showMessageDialog(null, "Hello " + txtUsername.getText());

}}

Page 20: Basic Event Listener

Hello GUItxtUsername.addKeyListener(new KeyListener() {

@Overridepublic void keyTyped(KeyEvent e) {}

@Overridepublic void keyReleased(KeyEvent e) {}

@Overridepublic void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_ENTER)hello();

}});

• ทดสอบผลดวยการพมพแลวกดปม ENTER และกดปม submit

Page 21: Basic Event Listener

Programming Assignment• เพม listener กบโปรแกรมเครองคดเลขทจ าเปน

– ActionListener

• พจารณาถง input ของเครองคดเลข– 2 + 3 = + 4– 2 – 3 + 2 – 5 =– 5 * 2 / 0 =