Board logo

標題: 傾聽事件 [打印本頁]

作者: 歐柏罕    時間: 2018-1-6 11:29     標題: 傾聽事件

視窗作業系統都是採取圖形使用者介面,其程式執行流程是採用事件驅動(Event Driver)方式運作。例如程式開始執行後,等待著事件的發生,如移動滑鼠到按鈕上點按一下,就可能會執行特定方法。

Java對於事件處理方式是採用「委派事件模式」,如下圖所示:



Java將產生事件的物件稱為「事件來源」,而接收事件的物件稱為「事件傾聽者」,處理事件的方法稱為「事件處理方法」。

以本範例為例,事件來源有 tf1、btn1、btn2 三個物件,這三個物件必須分別與事件傾聽者連結在一起(即為來源物件註冊傾聽者),當事件產生時,會將來源物件以傳遞參數的方式交給事件處理方法運作。

事件處理的傾聽者介面 ActionListener 由 java.awt.event 套件所提供,使用時要先匯入。
  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;

  3. import javax.swing.JButton;
  4. import javax.swing.JFrame;
  5. import javax.swing.JLabel;
  6. import javax.swing.JTextField;



  7. public class actionTest implements ActionListener{

  8.         public static void main(String[] args) {
  9.                 // TODO 自動產生的方法 Stub
  10.                 actionTest app = new actionTest();
  11.         }

  12.         @Override
  13.         public void actionPerformed(ActionEvent e) {
  14.                 // TODO 自動產生的方法 Stub
  15.                 if(e.getSource()==btn1)
  16.         {
  17.             tf2.setText("面積為: "+Double.parseDouble(tf1.getText())*3.3058+" 平方公尺");
  18.         }
  19.                 if(e.getSource()==btn2)
  20.                 {
  21.                         tf1.setText("");
  22.                         tf2.setText("");
  23.                 }
  24.         }
  25.        
  26.         private JFrame fm;
  27.     private JLabel lb1, lb2;
  28.     private JTextField tf1, tf2;
  29.     private JButton btn1, btn2;
  30.     actionTest()
  31.     {
  32.             lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  33.         lb1.setBounds(0, 10, 215, 30);
  34.         lb2=new JLabel("輸入坪數:");
  35.         lb2.setBounds(10, 40, 60, 40);
  36.         
  37.         tf1=new JTextField();
  38.         tf1.setBounds(70, 45, 134, 30);
  39.         tf1.addActionListener(this);
  40.         tf2=new JTextField();
  41.         tf2.setBounds(10, 85, 195, 40);
  42.         tf2.setEditable(false);
  43.         
  44.         btn1=new JButton("確定");
  45.         btn1.setBounds(10, 135, 92, 25);
  46.         btn1.addActionListener(this);
  47.         btn2=new JButton("清除");
  48.         btn2.setBounds(112, 135, 92, 25);
  49.         btn2.addActionListener(this);
  50.         
  51.         fm=new JFrame("土地面積計算");
  52.         fm.setBounds(100, 100, 220, 200);
  53.         fm.setVisible(true);
  54.         fm.setResizable(false);
  55.         fm.setLayout(null);
  56.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  57.         fm.add(lb1);
  58.         fm.add(lb2);
  59.         fm.add(tf1);
  60.         fm.add(tf2);
  61.         fm.add(btn1);
  62.         fm.add(btn2);
  63.     }

  64. }
複製代碼

作者: 黃茂勛    時間: 2018-1-6 11:34

此帖僅作者可見
作者: 蔡季樺    時間: 2018-1-6 11:37

此帖僅作者可見
作者: 蔡庭豪    時間: 2018-1-6 11:38

此帖僅作者可見
作者: 林侑成    時間: 2018-1-18 18:35

此帖僅作者可見




歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2