Basic Event Listener
Transcript of Basic Event Listener
GUI & Event• ใน GUI เราสามารถท าอะไรไดมากมาย
– คลกเมาส– เลอน mouse wheel– กดปม keyboard– Touch แลวลาก รวบหานว
• การท าสงใด ๆ ใน GUI จะเกดเหตการณ– ท า 1 ครง = สราง 1 เหตการณ
• event-driven programming แบบหนง– โปรแกรมท างานตามเหตการณทสรางขน
Listener• Listener = ผรบฟง
– คอยฟงคนพด– อาจมโตตอบตามสถานการณ– การเปนผฟงทด
• Event Listener = ผรบฟงเหตการณ– คอยฟงเหตการณ (ทผใชสราง)– เมอมเหตการณเกดขน จะท างานตามทก าหนด– Listener จะท าอะไร ขนกบผเขยนโปรแกรม
Listener
ทมา: http://mintclub.kobe-np.co.jp/img/present/367_1_present.JPG
Event Listener• Listener ~= พนกงานรกษาความปลอดภย
– รปภ. ดแลรกษาความปลอดภย– Listener = รปภ.– Event = เหตการณทเกดขน
• รปภ. ตอบสนองตอเหตการณตาง ๆ– แลกบตรผมาตดตอ– ดแลความปลอดภยทก 30 นาท– ไลกดขโมย
Event Listener
ทมา: http://www.youtube.com/watch?feature=player_embedded&v=Q4RAXl4z0gk
① ②
③ ④
Event Listener• Java API ม listener ส าหรบ swing
– อยในรปของ interface
• แตละ component จะม listener คอยจบเหตการณ– ตองเพม listener เขาไปใน component
• พดถง listener ทไดใชเทานน– ActionListener– KeyListener
Using Listener• การใชงาน listener ม 3 วธ
– implements กบ JFrame class– Inner class – Anonymous class
• ทกวธม tradeoff– Anonymous class - listener ทท างานเฉพาะเจาะจง– Implements กบ class - listener ทท างานทวไป
ActionListener• Listener จบเหตการณทมการคลกเมาส• อยาสบสนกบ MouseListener• เพม listener ใช addActionListerner(L: ActionListener)• เหตการณท listener สามารถจบได
Method Name หนาทactionPerformed(E: ActionEvent) เมอ component ถกคลก
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();
}}
Counter GUIbtnClick.addActionListener(new ActionListener() { // Anonymous Class
@Overridepublic void actionPerformed(ActionEvent e) {
lblCount.setText(Integer.toString(++times));}
});
คลกเมาส1 ครง
คลกเมาส1 ครง
Rock – Scissors – Paper GUI• เกม เปา ยง ฉบ แบบงาย ๆ
– 0 แทนคอน– 2 แทนกรรไกร– 5 แทนกระดาษ
• เมอกดปมเลอก หนาจอจะแสดงผลการเปายงฉบ
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
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();
}}
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));}
• ลองทดสอบผลดวยตนเอง
KeyListener• Listener จบเหตการณเมอกดปมบน keyboard• ใชไมไดผลกบ JFrame• เพม listener ใช addKeyListerner(L: KeyListener)• เหตการณท listener สามารถจบได
Method Name หนาทkeyTyped(E: KeyEvent) เมอ keyboard มการพมพ
keyReleased(E: KeyEvent) เมอปลอยปมบน keyboard
keyPressed(E: KeyEvent) เมอกดปม keyboard
KeyListener• Listener keyPressed() เมอกดคางจะท างานรว ๆ
– ระวงเมอใช listener นท างาน
• Listener ทท างานเกยวกบการแกไขขอมล ควรใช keyReleased()– เพม ลบ แกไข– Object instantiating
• สามารถเลอกปฏบตเมอกดปมตามทก าหนดโดยใช if– e.getKeyCode(): int คนคาเปนตวเลขของปมทกด– KeyEvent มคาคงทของปมอย– if (e.getKeyCode() == KeyEvent.VK_...) { }
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();}
});
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());
}}
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
Programming Assignment• เพม listener กบโปรแกรมเครองคดเลขทจ าเปน
– ActionListener
• พจารณาถง input ของเครองคดเลข– 2 + 3 = + 4– 2 – 3 + 2 – 5 =– 5 * 2 / 0 =