標題:
事件處理與傾聽者
[打印本頁]
作者:
tonyh
時間:
2015-5-23 14:00
標題:
事件處理與傾聽者
本帖最後由 tonyh 於 2015-5-23 15:50 編輯
視窗作業系統都是採取圖形使用者介面,其程式執行流程是採用事件驅動(Event Driver)方式運作。例如程式開始執行後,等待著事件的發生,如移動滑鼠到按鈕上點按一下,就可能會執行特定方法。
Java對於事件處理方式是採用「委派事件模式」,如下圖所示:
[attach]1257[/attach]
Java將產生事件的物件稱為「事件來源」,而接收事件的物件稱為「事件傾聽者」,處理事件的方法稱為「事件處理方法」。
以本範例為例,事件來源有 tf1、btn1、btn2 三個物件,這三個物件必須分別與事件傾聽者連結在一起(即為來源物件註冊傾聽者),當事件產生時,會將來源物件以傳遞參數的方式交給事件處理方法運作。
事件處理的傾聽者介面 ActionListener 由 java.awt.event 套件所提供,使用時要先匯入。
[attach]1260[/attach]
package ch75;
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 Ch75 implements ActionListener
{
private JFrame fm;
private JLabel lb1, lb2;
private JTextField tf1, tf2;
private JButton btn1, btn2;
Ch75()
{
fm=new JFrame("土地面積換算");
lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
lb2=new JLabel("輸入坪數:");
tf1=new JTextField();
tf2=new JTextField();
btn1=new JButton("確定");
btn2=new JButton("清除");
lb1.setBounds(0,10,215,30);
lb2.setBounds(10,40,60,40);
tf1.setBounds(70,45,134,30);
tf1.addActionListener(this);
tf2.setBounds(10,85,195,40);
tf2.setEditable(false);
btn1.setBounds(10,135,92,25);
btn1.addActionListener(this);
btn2.setBounds(112,135,92,25);
btn2.addActionListener(this);
fm.setBounds(100,100,220,200);
fm.setVisible(true);
fm.setResizable(false);
fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fm.setLayout(null);
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 strArea=String.valueOf(area);
tf2.setText("面積為: "+strArea+" 平方公尺");
}
if(e.getSource()==btn2)
{
tf1.setText("");
tf2.setText("");
}
}
public static void main(String[] args)
{
Ch75 app=new Ch75();
}
}
複製代碼
作者:
張瀚仁
時間:
2015-5-23 15:22
package ch75;
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 Ch75 implements AcionListener{
private JFrame fm;
private JLabel lb1,lb2;
private JTextField tf1,tf2;
private JButton btn1,btn2;
Ch75()
{
fm=new JFrame("土地面積換算");
lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
lb2=new JLabel("輸入坪數:");
tf1=new JTextField();
tf2=new JTextField();
btn1=new JButton("確定");
btn2=new JButton("清除");
lb1.setBounds(0,10,215,30);
lb2.setBounds(10,40,60,40);
tf1.setBounds(70,45,134,30);
tf2.setBounds(10,85,195,40);
tf2.addActionListener(this);
tf2.setEditable(false);
btn1.setBounds(10,135,92,25);
btn1.addActionListener(this);
btn2.setBounds(112,135,92,25);
btn2.addActionListener(this);
fm.setBounds(100,100,220,200);
fm.setVisible(true);
fm.setResizable(false);
fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fm.setLayout(null);
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 strArea=String.valueOf(area);
tf2.setText("面積為: "+strArea);
}
if(e.getSource()==btn2)
{
tf1.setText("");
tf2.setText("");
}
}
public static void main(String[] args) {
Ch75 app=new Ch75();
}
}
複製代碼
作者:
林以諾
時間:
2015-5-23 15:22
package ch75;
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 Ch75 implements AcionListener{
private JFrame fm;
private JLabel lb1,lb2;
private JTextField tf1,tf2;
private JButton btn1,btn2;
Ch75()
{
fm=new JFrame("土地面積換算");
lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
lb2=new JLabel("輸入坪數:");
tf1=new JTextField();
tf2=new JTextField();
btn1=new JButton("確定");
btn2=new JButton("清除");
lb1.setBounds(0,10,215,30);
lb2.setBounds(10,40,60,40);
tf1.setBounds(70,45,134,30);
tf2.setBounds(10,85,195,40);
tf2.addActionListener(this);
tf2.setEditable(false);
btn1.setBounds(10,135,92,25);
btn1.addActionListener(this);
btn2.setBounds(112,135,92,25);
btn2.addActionListener(this);
fm.setBounds(100,100,220,200);
fm.setVisible(true);
fm.setResizable(false);
fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fm.setLayout(null);
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 strArea=String.valueOf(area);
tf2.setText("面積為: "+strArea);
}
if(e.getSource()==btn2)
{
tf1.setText("");
tf2.setText("");
}
}
public static void main(String[] args) {
Ch75 app=new Ch75();
}
}
複製代碼
作者:
許逸群
時間:
2015-5-29 23:29
package ch75;
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 Ch75 implements ActionListener
{
private JFrame fm;
private JLabel lb1, lb2;
private JTextField tf1, tf2;
private JButton btn1, btn2;
Ch75()
{
fm=new JFrame("土地面積換算");
lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
lb2=new JLabel("輸入坪數:");
tf1=new JTextField();
tf2=new JTextField();
btn1=new JButton("確定");
btn2=new JButton("清除");
lb1.setBounds(0,10,215,30);
lb2.setBounds(10,40,60,40);
tf1.setBounds(70,45,134,30);
tf1.addActionListener(this);
tf2.setBounds(10,85,195,40);
tf2.setEditable(false);
btn1.setBounds(10,135,92,25);
btn1.addActionListener(this);
btn2.setBounds(112,135,92,25);
btn2.addActionListener(this);
fm.setBounds(100,100,220,200);
fm.setVisible(true);
fm.setResizable(false);
fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fm.setLayout(null);
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 strArea=String.valueOf(area);
tf2.setText("面積為: "+strArea+" 平方公尺");
}
if(e.getSource()==btn2)
{
tf1.setText("");
tf2.setText("");
}
}
public static void main(String[] args)
{
Ch75 app=new Ch75();
}
}
複製代碼
作者:
劉泳鱔
時間:
2015-6-22 15:50
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 Ch75 implements ActionListener
{
private JFrame fm;
private JLabel lb1, lb2;
private JTextField tf1, tf2;
private JButton btn1, btn2;
Ch75()
{
fm=new JFrame("土地面積換算");
lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
lb2=new JLabel("輸入坪數:");
tf1=new JTextField();
tf2=new JTextField();
btn1=new JButton("確定");
btn2=new JButton("清除");
lb1.setBounds(0,10,215,30);
lb2.setBounds(10,40,60,40);
tf1.setBounds(70,45,134,30);
tf1.addActionListener(this);
tf2.setBounds(10,85,195,40);
tf2.setEditable(false);
btn1.setBounds(10,135,92,25);
btn1.addActionListener(this);
btn2.setBounds(112,135,92,25);
btn2.addActionListener(this);
fm.setBounds(100,100,220,200);
fm.setVisible(true);
fm.setResizable(false);
fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fm.setLayout(null);
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 strArea=String.valueOf(area);
tf2.setText("面積為: "+strArea+" 平方公尺");
}
if(e.getSource()==btn2)
{
tf1.setText("");
tf2.setText("");
}
}
public static void main(String[] args)
{
Ch75 app=new Ch75();
}
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2