視窗作業系統都是採取圖形使用者介面,其程式執行流程是採用事件驅動(Event Driver)方式運作。例如程式開始執行後,等待著事件的發生,如移動滑鼠到按鈕上點按一下,就可能會執行特定方法。
Java對於事件處理方式是採用「委派事件模式」,如下圖所示:
Java將產生事件的物件稱為「事件來源」,而接收事件的物件稱為「事件傾聽者」,處理事件的方法稱為「事件處理方法」。
以本範例為例,事件來源有 tf1、btn1、btn2 三個物件,這三個物件必須分別與事件傾聽者連結在一起(即為來源物件註冊傾聽者),當事件產生時,會將來源物件以傳遞參數的方式交給事件處理方法運作。
事件處理的傾聽者介面 ActionListener 由 java.awt.event 套件所提供,使用時要先匯入。
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JTextField;
- import javax.swing.JButton;
- import java.awt.event.ActionListener;
- import java.awt.event.ActionEvent;
- public class Ch82 implements ActionListener
- {
-
- private JFrame fm;
- private JLabel lb1, lb2;
- private JTextField tf1, tf2;
- private JButton btn1, btn2;
-
- Ch82()
- {
- lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
- lb1.setBounds(0, 10, 215, 30);
- lb2=new JLabel("輸入坪數:");
- lb2.setBounds(10, 40, 60, 40);
-
- tf1=new JTextField();
- tf1.setBounds(70, 45, 134, 30);
- tf1.addActionListener(this);
- tf2=new JTextField();
- tf2.setBounds(10, 85, 195, 40);
- tf2.setEditable(false);
-
- btn1=new JButton("確定");
- btn1.setBounds(10, 135, 92, 25);
- btn1.addActionListener(this);
- btn2=new JButton("清除");
- btn2.setBounds(112, 135, 92, 25);
- btn2.addActionListener(this);
-
- fm=new JFrame("土地面積計算");
- fm.setBounds(100, 100, 220, 200);
- fm.setVisible(true);
- fm.setResizable(false);
- fm.setLayout(null);
- fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- fm.add(lb1);
- fm.add(lb2);
- fm.add(tf1);
- fm.add(tf2);
- fm.add(btn1);
- fm.add(btn2);
- }
-
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==tf1 || e.getSource()==btn1)
- {
- double area=Double.parseDouble(tf1.getText())*3.3058;
- String areaStr=String.valueOf(area);
- //String areaStr=Double.toString(area);
- tf2.setText("面積為: "+areaStr+" 平方公尺");
- }
- if(e.getSource()==btn2)
- {
- tf1.setText("");
- tf2.setText("");
- }
- }
- public static void main(String[] args) {
- Ch82 app=new Ch82();
- }
- }
複製代碼 |