2014年4月16日 星期三

Swing:事件處理

1. 將事件來源,註冊傾聽者 2. 傳送事件給已註冊的傾聽者
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

class Frame3 extends JFrame {
 private JPanel contentPane;
 public Frame3(){
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setBounds(100,100,250,200);
  setTitle("事件處理視窗");
  
  contentPane = new JPanel();
  setContentPane(contentPane);
  contentPane.setLayout(null);
  
  JButton button = new JButton("事件來源");
  button.addActionListener(  //1. 將事件來源,註冊傾聽者
    new ActionListener(){

        @Override
                                    //2. 傳送事件給已註冊的傾聽者
        public void actionPerformed(ActionEvent e) {
     // TODO Auto-generated method stub
     JOptionPane.showMessageDialog(null, "處理事件");
      
        }
     
    }
    
    );
  button.setBounds(100, 50, 100, 25);
  contentPane.add(button);
  setVisible(true);
 }
}

public class FrameEvent {

 public static void main(String[] args) {
   Frame3 frame3 = new Frame3();
 }

}

執行結果























按下按鈕時























這程式可改寫成如下:
class Frame3 extends JFrame implements ActionListener{
 private JPanel contentPane;
 public Frame3(){
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setBounds(100,100,250,200);
  setTitle("事件處理視窗");
  
  contentPane = new JPanel();
  setContentPane(contentPane);
  contentPane.setLayout(null);
  
  JButton button = new JButton("事件來源");
  button.addActionListener(this); //1. 將事件來源,註冊傾聽者
  button.setBounds(100, 50, 100, 25);
  contentPane.add(button);
  setVisible(true);
 }
 
 public void actionPerformed(ActionEvent e){ //2. 傳送事件給已註冊的傾聽者
  JOptionPane.showMessageDialog(null, "處理事件");
 }
}

事件來源、類別名稱

事件來源 事件類別名稱 說明
Mouse MouseEvent Mouse的事件
Keyboard KeyEvent Key的事件
Button ActionEvent Button的事件
Checkbox ItemEvent Item的事件
Choice ItemEvent Item的事件
List ActionEvent和ItemEvent Action、Item的事件
MenuItem ActionEvent和ItemEvent MAction、Item的事件
Scrollbar AdjustmentEvent Adjustment的事件
TextField TextEvent Text的事件
TextArea TextEvent Text的事件
Window WindowEvent Window的事件

沒有留言:

張貼留言