返回列表 發帖

事件處理與傾聽者

本帖最後由 tonyh 於 2022-10-22 20:09 編輯

視窗作業系統都是採取圖形使用者介面,其程式執行流程是採用事件驅動(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 Ch81 implements ActionListener{

  8.         JFrame fm;
  9.         JLabel lb1, lb2;
  10.         JTextField tf1, tf2;
  11.         JButton btn1, btn2;

  12.         Ch81()  //建構子
  13.         {
  14.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  15.                 lb1.setBounds(0, 10, 215, 30);
  16.                 lb2=new JLabel("輸入坪數:");
  17.                 lb2.setBounds(10, 40, 60, 40);

  18.                 tf1=new JTextField();
  19.                 tf1.setBounds(70, 45, 134, 30);
  20.                 tf2=new JTextField();
  21.                 tf2.setBounds(10, 85, 195, 40);
  22.                 tf2.setEditable(false);

  23.                 btn1=new JButton("確定");
  24.                 btn2=new JButton("清除");
  25.                 btn1.setBounds(10, 135, 92, 25);
  26.                 btn2.setBounds(112, 135, 92, 25);

  27.                 fm=new JFrame("土地面積換算");
  28.                 fm.setBounds(100, 100, 220, 200);
  29.                 fm.setVisible(true);
  30.                 fm.setResizable(false);
  31.                 fm.setLayout(null);
  32.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  33.                 fm.add(lb1);
  34.                 fm.add(lb2);
  35.                 fm.add(tf1);
  36.                 fm.add(tf2);
  37.                 fm.add(btn1);
  38.                 fm.add(btn2);

  39.                 btn1.addActionListener(this);
  40.                 btn2.addActionListener(this);
  41.                 tf1.addActionListener(this);
  42.         }

  43.         public static void main(String[] args) {
  44.                 new Ch81();
  45.         }

  46.         @Override
  47.         public void actionPerformed(ActionEvent e) {
  48.                 if(e.getSource()==btn1 || e.getSource()==tf1)
  49.                 {
  50.                         double area=Double.parseDouble(tf1.getText())*3.3058;
  51.                         /*tf2.setText(String.valueOf(area));
  52.                     tf2.setText(Double.toString(area));
  53.                     tf2.setText(area+"");*/
  54.                         tf2.setText("面積為:"+area+"平方公尺");
  55.                 }       
  56.                 if(e.getSource()==btn2)
  57.                 {
  58.                         tf1.setText("");
  59.                         tf2.setText("");
  60.                 }
  61.         }
  62. }
複製代碼
  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.JTextField;
  4. import javax.swing.JButton;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.ActionEvent;
  7. public class Ch82 implements ActionListener
  8. {
  9.        
  10.         private JFrame fm;
  11.         private JLabel lb1, lb2;
  12.         private JTextField tf1, tf2;
  13.         private JButton btn1, btn2;
  14.        
  15.         Ch82()
  16.         {
  17.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  18.                 lb1.setBounds(0, 10, 215, 30);
  19.                 lb2=new JLabel("輸入坪數:");
  20.                 lb2.setBounds(10, 40, 60, 40);
  21.                
  22.                 tf1=new JTextField();
  23.                 tf1.setBounds(70, 45, 134, 30);
  24.                 tf1.addActionListener(this);
  25.                 tf2=new JTextField();
  26.                 tf2.setBounds(10, 85, 195, 40);
  27.                 tf2.setEditable(false);
  28.                
  29.                 btn1=new JButton("確定");
  30.                 btn1.setBounds(10, 135, 92, 25);
  31.                 btn1.addActionListener(this);
  32.                 btn2=new JButton("清除");
  33.                 btn2.setBounds(112, 135, 92, 25);
  34.                 btn2.addActionListener(this);
  35.                
  36.                 fm=new JFrame("土地面積計算");
  37.                 fm.setBounds(100, 100, 220, 200);
  38.                 fm.setVisible(true);
  39.                 fm.setResizable(false);
  40.                 fm.setLayout(null);
  41.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  42.                 fm.add(lb1);
  43.                 fm.add(lb2);
  44.                 fm.add(tf1);
  45.                 fm.add(tf2);
  46.                 fm.add(btn1);
  47.                 fm.add(btn2);
  48.         }
  49.        
  50.         public void actionPerformed(ActionEvent e)
  51.         {
  52.                 if(e.getSource()==tf1 || e.getSource()==btn1)
  53.                 {
  54.                         double area=Double.parseDouble(tf1.getText())*3.3058;
  55.                         String areaStr=String.valueOf(area);
  56.                         //String areaStr=Double.toString(area);
  57.                         tf2.setText("面積為: "+areaStr+" 平方公尺");
  58.                 }       
  59.                 if(e.getSource()==btn2)
  60.                 {
  61.                         tf1.setText("");
  62.                         tf2.setText("");
  63.                 }
  64.         }

  65.         public static void main(String[] args) {
  66.                 Ch82 app=new Ch82();
  67.         }

  68. }
複製代碼

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.JTextField;
  4. import javax.swing.JButton;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.ActionEvent;
  7. public class C511 implements ActionListener
  8. {

  9.         private JFrame fm;
  10.         private JLabel lb1, lb2;
  11.         private JTextField tf1, tf2;
  12.         private JButton btn1, btn2;

  13.         C511()
  14.         {
  15.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  16.                 lb1.setBounds(0, 10, 215, 30);
  17.                 lb2=new JLabel("輸入坪數:");
  18.                 lb2.setBounds(10, 40, 60, 40);

  19.                 tf1=new JTextField();
  20.                 tf1.setBounds(70, 45, 134, 30);
  21.                 tf1.addActionListener(this);
  22.                 tf2=new JTextField();
  23.                 tf2.setBounds(10, 85, 195, 40);
  24.                 tf2.setEditable(false);

  25.                 btn1=new JButton("確定");
  26.                 btn1.setBounds(10, 135, 92, 25);
  27.                 btn1.addActionListener(this);
  28.                 btn2=new JButton("清除");
  29.                 btn2.setBounds(112, 135, 92, 25);
  30.                 btn2.addActionListener(this);

  31.                 fm=new JFrame("土地面積計算");
  32.                 fm.setBounds(100, 100, 220, 200);
  33.                 fm.setVisible(true);
  34.                 fm.setResizable(false);
  35.                 fm.setLayout(null);
  36.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  37.                 fm.add(lb1);
  38.                 fm.add(lb2);
  39.                 fm.add(tf1);
  40.                 fm.add(tf2);
  41.                 fm.add(btn1);
  42.                 fm.add(btn2);
  43.         }
  44.         public void actionPerformed(ActionEvent e)
  45.         {
  46.                 if(e.getSource()==tf1 || e.getSource()==btn1)
  47.                 {
  48.                         double area=Double.parseDouble(tf1.getText())*3.3058;
  49.                         String areaStr=String.valueOf(area);
  50.                         tf2.setText("面積為: "+areaStr+" 平方公尺");
  51.                 }
  52.                 if(e.getSource()==btn2)
  53.                 {
  54.                         tf1.setText("");
  55.                         tf2.setText("");
  56.                 }
  57.         }

  58.         public static void main(String[] args) {
  59.                 C511 app=new C511();
  60.         }

  61. }
複製代碼

TOP

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.JTextField;
  4. import javax.swing.JButton;

  5. import java.awt.*;;
  6. import java.awt.event.ActionEvent;
  7. public class Ch39 implements ActionListener{

  8.         private JFrame fm;
  9.         private JLabel lb1,lb2;
  10.         private JTextField tf1,tf2;
  11.         private JButton btn1,btn2;
  12.         Ch39()
  13.         {
  14.                 lb1=new JLable("1坪=3.3058cm*cm",JLabel.CENTER);
  15.                 lb1.setBounds(0, 10, 215, 30);
  16.                 lb2=new JLabel("輸入坪數");
  17.                 lb2.setBounds(10, 40, 60, 40);
  18.                
  19.                 tf1=new JTextField();
  20.                 tf1.setBounds(70, 45, 134, 30);
  21.                 tf1.addActionListener(this);
  22.                 tf2=new JTextField();
  23.                 tf2.setBounds(10, 85, 195, 40);
  24.                 tf2.addActionListener(false);
  25.                
  26.                 btn1=new JButton("yes");
  27.                 btn1.setBounds(10, 135, 92, 25);
  28.                 btn1.addActionListener(this);
  29.                 btn2=new JButton("no");
  30.                 btn2.setBounds(112, 135, 92, 25);
  31.                 btn2.addActionListener(this);
  32.        
  33.             fm=new JFrame("ground cm*cm count");
  34.             fm.setBounds(100, 100, 220, 200);
  35.             fm.setVisible(true);
  36.             fm.Resizeable(false);
  37.             fm.Layout(null);
  38.             fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  39.             fm.add(lb1);
  40.             fm.add(lb2);
  41.             fm.add(tf1);
  42.             fm.add(tf2);
  43.             fm.add(btn1);
  44.             fm.add(btn2);
  45.         }
  46.         public  void actionPerformed(ActionEvent e) {
  47.        if(e.getSource()==tf1 || e.getSource()==btn1)
  48.        {
  49.                double area=Double.parseDouble(tf1.getText())*3.3058;
  50.                String sresStr=String.valueOf(area);
  51.                tf2.setText("cm*cm="+areaStr+"cm*cm");
  52.        }
  53.        if(e.getSource()==btn2)
  54.        {
  55.                tf1.setText("");
  56.                tf2.setText("");
  57.        }
  58.         }
  59.     public static void main(String[] args)
  60.     {
  61.             Ch39 app=new Ch39();
  62.     }
  63. }
複製代碼

TOP

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.JTextField;
  4. import javax.swing.JButton;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.ActionEvent;
  7. public class P3 implements ActionListener
  8. {
  9.       
  10.         private JFrame fm;
  11.         private JLabel lb1, lb2;
  12.         private JTextField tf1, tf2;
  13.         private JButton btn1, btn2;
  14.       
  15.         P3()
  16.         {
  17.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  18.                 lb1.setBounds(0, 10, 215, 30);
  19.                 lb2=new JLabel("輸入坪數:");
  20.                 lb2.setBounds(10, 40, 60, 40);
  21.                
  22.                 tf1=new JTextField();
  23.                 tf1.setBounds(70, 45, 134, 30);
  24.                 tf2=new JTextField();
  25.                 tf2.setBounds(10, 85, 195, 40);
  26.                 tf2.setEditable(false);
  27.                
  28.                 btn1=new JButton("確定");
  29.                 btn1.setBounds(10, 135, 92, 25);
  30.                 btn2=new JButton("清除");
  31.                 btn2.setBounds(112, 135, 92, 25);
  32.                
  33.                 fm=new JFrame("土地面積計算");
  34.                 fm.setBounds(100, 100, 220, 200);
  35.                 fm.setVisible(true);
  36.                 fm.setResizable(false);
  37.                 fm.setLayout(null);
  38.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  39.                 fm.add(lb1);
  40.                 fm.add(lb2);
  41.                 fm.add(tf1);
  42.                 fm.add(tf2);
  43.                 fm.add(btn1);
  44.                 fm.add(btn2);
  45.                
  46.                 tf1.addActionListener(this);
  47.                 btn1.addActionListener(this);
  48.                 btn2.addActionListener(this);

  49.         }
  50.       
  51.         public void actionPerformed(ActionEvent e)
  52.         {
  53.                 if(e.getSource()==tf1 || e.getSource()==btn1)
  54.                 {
  55.                         double area=Double.parseDouble(tf1.getText())*3.3058;
  56.                         String areaStr=String.valueOf(area);
  57.                         tf2.setText("面積為: "+areaStr+" 平方公尺");
  58.                 }      
  59.                 if(e.getSource()==btn2)
  60.                 {
  61.                         tf1.setText("");
  62.                         tf2.setText("");
  63.                 }
  64.         }

  65.         public static void main(String[] args) {
  66.                 P3 app=new P3();
  67.         }

  68. }
複製代碼

TOP

  1.         import javax.swing.JFrame;
  2.         import javax.swing.JLabel;
  3.         import javax.swing.JTextField;
  4.         import javax.swing.JButton;
  5.         import java.awt.event.ActionListener;
  6.         import java.awt.event.ActionEvent;
  7.         public class Ch72 implements ActionListener
  8.         {
  9.                
  10.                 private JFrame fm;
  11.                 private JLabel lb1, lb2;
  12.                 private JTextField tf1, tf2;
  13.                 private JButton btn1, btn2;
  14.                
  15.                 Ch72()
  16.                 {
  17.                         lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  18.                         lb1.setBounds(0, 10, 215, 30);
  19.                         lb2=new JLabel("輸入坪數:");
  20.                         lb2.setBounds(10, 40, 60, 40);
  21.                       
  22.                         tf1=new JTextField();
  23.                         tf1.setBounds(70, 45, 134, 30);
  24.                         tf1.addActionListener(this);
  25.                         tf2=new JTextField();
  26.                         tf2.setBounds(10, 85, 195, 40);
  27.                         tf2.setEditable(false);
  28.                       
  29.                         btn1=new JButton("確定");
  30.                         btn1.setBounds(10, 135, 92, 25);
  31.                         btn1.addActionListener(this);
  32.                         btn2=new JButton("清除");
  33.                         btn2.setBounds(112, 135, 92, 25);
  34.                         btn2.addActionListener(this);
  35.                       
  36.                         fm=new JFrame("土地面積計算");
  37.                         fm.setBounds(100, 100, 220, 200);
  38.                         fm.setVisible(true);
  39.                         fm.setResizable(false);
  40.                         fm.setLayout(null);
  41.                         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  42.                         fm.add(lb1);
  43.                         fm.add(lb2);
  44.                         fm.add(tf1);
  45.                         fm.add(tf2);
  46.                         fm.add(btn1);
  47.                         fm.add(btn2);
  48.                 }
  49.                
  50.                 public void actionPerformed(ActionEvent e)
  51.                 {
  52.                         if(e.getSource()==tf1 || e.getSource()==btn1)
  53.                         {
  54.                                 double area=Double.parseDouble(tf1.getText())*3.3058;
  55.                                 String areaStr=String.valueOf(area);
  56.           tf2.setText("面積為: "+areaStr+" 平方公尺");
  57.                         }      
  58.                         if(e.getSource()==btn2)
  59.                         {
  60.                                 tf1.setText("");
  61.                                 tf2.setText("");
  62.                         }
  63.                 }
  64.        
  65.                 public static void main(String[] args) {
  66.                         Ch72 app=new Ch72();
  67.                 }
  68.        
  69.         }
複製代碼

TOP

  1. package lol;

  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;

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

  8. public class Main implements ActionListener{
  9.         JFrame fm;
  10.         JLabel lb1;
  11.         JLabel lb2;
  12.         JButton bt1;
  13.         JButton bt2;
  14.         JTextField tf1;
  15.         JTextField tf2;
  16.         void area()
  17.         {
  18.                 fm=new JFrame("土地面積計算");
  19.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  20.                 lb2=new JLabel("輸入坪數:");
  21.                 bt1=new JButton("確定");
  22.                 bt2=new JButton("清除");
  23.                 tf1=new JTextField();
  24.                 tf2=new JTextField();
  25.                 lb1.setBounds(0, 10, 215, 30);
  26.                 lb2.setBounds(10, 40, 60, 40);
  27.                 tf1.setBounds(70, 45, 134, 30);
  28.                 tf1.addActionListener(this);
  29.                 tf2.setBounds(10, 85, 195, 40);
  30.                 tf2.setEditable(false);
  31.                 bt1.setBounds(10, 135, 92, 25);
  32.                 bt1.addActionListener(this);
  33.                 bt2.setBounds(112, 135, 92, 25);
  34.                 bt2.addActionListener(this);
  35.                 fm.setBounds(100,100,220,200);
  36.                 fm.setResizable(false);
  37.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  38.                 fm.setLayout(null);
  39.                 fm.setVisible(true);
  40.                 fm.add(lb1);
  41.                 fm.add(lb2);
  42.                 fm.add(bt1);
  43.                 fm.add(bt2);
  44.                 fm.add(tf1);
  45.                 fm.add(tf2);
  46.         }
  47.         Main()
  48.         {
  49.                 area();
  50.         }
  51.         public static void main(String[] args) {
  52.                 new Main();
  53.         }
  54.         public void actionPerformed(ActionEvent e) {
  55.                 if(e.getSource()==tf1||e.getSource()==bt1)
  56.                 {
  57.                         double a=Double.parseDouble(tf1.getText())*3.3058;
  58.                         tf2.setText("面積為: "+a+"平方公尺");
  59.                 }
  60.                 if(e.getSource()==bt2)
  61.                 {
  62.                         tf1.setText("");
  63.                         tf2.setText("");
  64.                 }

  65.         }

  66. }
複製代碼

TOP

  1. import java.awt.event.*;
  2. import javax.swing.*;

  3. public class Ch81 implements ActionListener {
  4.         JFrame fm;
  5.         JLabel lb1, lb2;
  6.         JTextField tf1, tf2;
  7.         JButton bt1, bt2;

  8.         void init() {
  9.                 lb1 = new JLabel("1坪=3.3058平方公尺", JLabel.CENTER);
  10.                 lb2 = new JLabel("輸入坪數:");
  11.                 lb1.setBounds(0, 10, 215, 30);
  12.                 lb2.setBounds(10, 40, 60, 40);

  13.                 tf1 = new JTextField();
  14.                 tf2 = new JTextField();
  15.                 tf1.setBounds(70, 45, 134, 30);
  16.                 tf2.setBounds(10, 85, 195, 40);
  17.                 tf2.setEditable(false);

  18.                 bt1 = new JButton("確定");
  19.                 bt2 = new JButton("清除");
  20.                 bt1.setBounds(10, 135, 92, 25);
  21.                 bt2.setBounds(112, 135, 92, 25);

  22.                 fm = new JFrame("土地面積換算");
  23.                 fm.setBounds(100, 100, 220, 200);
  24.                 fm.setVisible(true);
  25.                 fm.setResizable(false);
  26.                 fm.setLayout(null);
  27.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.                 fm.add(lb1);
  29.                 fm.add(lb2);
  30.                 fm.add(tf1);
  31.                 fm.add(tf2);
  32.                 fm.add(bt1);
  33.                 fm.add(bt2);

  34.         }
  35.        
  36.         void act() {
  37.                 bt1.addActionListener(this);
  38.                 bt2.addActionListener(this);
  39.                 tf1.addActionListener(this);
  40.         }

  41.         Ch81() {
  42.                 init();
  43.                 act();
  44.         }

  45.         public static void main(String[] args) {
  46.                 new Ch81();
  47.         }

  48.         public void actionPerformed(ActionEvent e) {
  49.                 if (e.getSource() == bt1 || e.getSource() == tf1) {
  50.                         Double area;
  51.                         area = Double.parseDouble(tf1.getText())*3.3058;
  52.                         tf2.setText("面積為:" + area + "平方公尺");
  53.                 }
  54.                 else if (e.getSource() == bt2) {
  55.                         tf1.setText("");
  56.                         tf2.setText("");
  57.                 }
  58.         }

  59. }
複製代碼

TOP

  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;
  3. import javax.swing.JFrame;
  4. import javax.swing.JLabel;
  5. import javax.swing.JTextField;
  6. import javax.swing.JButton;
  7. public class Ch01 implements ActionListener {

  8.         private JFrame fm;
  9.         private JLabel lb1, lb2;
  10.         private JTextField tf1, tf2;
  11.         private JButton btn1, btn2;

  12.         Ch01()
  13.         {
  14.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  15.                 lb1.setBounds(0, 10, 215, 30);
  16.                 lb2=new JLabel("輸入坪數:");
  17.                 lb2.setBounds(10, 40, 60, 40);

  18.                 tf1=new JTextField();
  19.                 tf1.setBounds(70, 45, 134, 30);
  20.                 tf1.addActionListener(this);
  21.                 tf2=new JTextField();
  22.                 tf2.setBounds(10, 85, 195, 40);
  23.                 tf2.addActionListener(this);
  24.                 tf2.setEditable(false);

  25.                 btn1=new JButton("確定");
  26.                 btn1.setBounds(10, 135, 92, 25);
  27.                 btn1.addActionListener(this);
  28.                 btn2=new JButton("清除");
  29.                 btn2.setBounds(112, 135, 92, 25);
  30.                 btn2.addActionListener(this);


  31.                 fm=new JFrame("土地面積計算");
  32.                 fm.setBounds(100, 100, 220, 200);
  33.                 fm.setVisible(true);
  34.                 fm.setResizable(false);
  35.                 fm.setLayout(null);
  36.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  37.                 fm.add(lb1);
  38.                 fm.add(lb2);
  39.                 fm.add(tf1);
  40.                 fm.add(tf2);
  41.                 fm.add(btn1);
  42.                 fm.add(btn2);
  43.         }
  44.         @Override
  45.         public void actionPerformed(ActionEvent e) {
  46.                 if(e.getSource()==tf1 || e.getSource()==btn1)
  47.                 {
  48.                         double area=Double.parseDouble(tf1.getText())*3.3058;
  49.                         String areaStr=String.valueOf(area);
  50.                         tf2.setText("面積為: "+areaStr+" 平方公尺");
  51.                 }
  52.                 if(e.getSource()==btn2)
  53.                 {
  54.                         tf1.setText("");
  55.                         tf2.setText("");
  56.                 }
  57.         }
  58.         public static void main(String[] args) {
  59.                 Ch01 app=new Ch01();
  60.         }
  61. }
複製代碼

TOP

  1. import javax.swing.JButton;
  2. import javax.swing.JFrame;
  3. import javax.swing.JLabel;
  4. import javax.swing.JTextField;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.ActionEvent;

  7. public class Ch81 implements ActionListener {
  8.         JTextField t1, t2;
  9.         JLabel lb1,lb2;
  10.         JButton btn1,btn2;
  11.         JFrame fm;


  12.         void initialize(){
  13.                 t1=new JTextField();
  14.                 t2=new JTextField();
  15.                 t2.setEditable(false);

  16.                 t1.setBounds(70, 45, 134, 30);
  17.                 t2.setBounds(10, 85, 195, 40);

  18.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  19.                 lb1.setBounds(0, 10, 215, 30);
  20.                 lb2=new JLabel("輸入坪數:");
  21.                 lb2.setBounds(10, 40, 60, 40);

  22.                 btn1=new JButton("確定");
  23.                 btn1.setBounds(10, 135, 92, 25);
  24.                 btn2=new JButton("清除");
  25.                 btn2.setBounds(112, 135, 92, 25);

  26.                 fm=new JFrame("土地面積換算");
  27.                 fm.setBounds(100, 100, 220, 200);
  28.                 fm.setVisible(true);
  29.                 fm.setResizable(false);
  30.                 fm.setLayout(null);
  31.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  32.                 fm.add(lb1);
  33.                 fm.add(lb2);
  34.                 fm.add(t1);
  35.                 fm.add(t2);
  36.                 fm.add(btn1);
  37.                 fm.add(btn2);
  38.         }

  39.         void act(){
  40.                 btn1.addActionListener(this);
  41.                 btn2.addActionListener(this);
  42.                 t1.addActionListener(this);
  43.         }

  44.         Ch81(){
  45.                 initialize();
  46.                 act();
  47.         }

  48.         public void actionPerformed(ActionEvent e)
  49.         {
  50.                 if(e.getSource()==t1 || e.getSource()==btn1)
  51.                 {
  52.                         double area=Double.parseDouble(t1.getText())*3.3058;
  53.                         String areaStr=String.valueOf(area);
  54.                         t2.setText("面積為: "+areaStr+" 平方公尺");
  55.                 }
  56.                 if(e.getSource()==btn2)
  57.                 {
  58.                         t1.setText("");
  59.                         t2.setText("");
  60.                 }
  61.         }

  62.         public static void main(String[] args) {
  63.                 // TODO 自動產生的方法 Stub
  64.                 Ch81 app = new Ch81();
  65.         }

  66. }
複製代碼

TOP

  1. package ch07;

  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;

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

  8. public class Ch81 implements ActionListener{

  9.         JFrame fm;
  10.         JLabel lb1, lb2;
  11.         JTextField tf1, tf2;
  12.         JButton btn1, btn2;

  13.         void initialize()
  14.         {
  15.                 lb1=new JLabel("1坪=3.3058平方公尺",JLabel.CENTER);
  16.                 lb1.setBounds(0, 10, 215, 30);
  17.                 lb2=new JLabel("輸入坪數:");
  18.                 lb2.setBounds(10, 40, 60, 40);

  19.                 tf1=new JTextField();
  20.                 tf1.setBounds(70, 45, 134, 30);
  21.                 tf2=new JTextField();
  22.                 tf2.setBounds(10, 85, 195, 40);
  23.                 tf2.setEditable(false);
  24.                 tf1.addActionListener(this);

  25.                 btn1=new JButton("確定");
  26.                 btn2=new JButton("清除");
  27.                 btn1.setBounds(10, 135, 92, 25);
  28.                 btn2.setBounds(112, 135, 92, 25);
  29.                 btn1.addActionListener(this);
  30.                 btn2.addActionListener(this);
  31.                

  32.                 fm=new JFrame("土地面積換算");
  33.                 fm.setBounds(100, 100, 220, 200);
  34.                 fm.setVisible(true);
  35.                 fm.setResizable(false);
  36.                 fm.setLayout(null);
  37.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  38.                 fm.add(lb1);
  39.                 fm.add(lb2);
  40.                 fm.add(tf1);
  41.                 fm.add(tf2);
  42.                 fm.add(btn1);
  43.                 fm.add(btn2);
  44.                
  45.                
  46.         }

  47.         Ch81()  //建構子
  48.         {
  49.                 initialize();
  50.         }

  51.         public static void main(String[] args) {
  52.                 new Ch81();
  53.         }

  54.                 @Override
  55.                 public void actionPerformed(ActionEvent e) {
  56.                         if(e.getSource()==btn2)
  57.                         {
  58.                                 tf1.setText("");
  59.                              tf2.setText("");
  60.                      }
  61.                         if(e.getSource()==btn1 || e.getSource()==tf1)
  62.                         {
  63.                                 tf2.setText("面積為"+(Double.parseDouble(tf1.getText())*3.3058)+"公尺");
  64.                         }
  65.                             
  66.                 }
  67. }
複製代碼

TOP

返回列表