Java學習之事件處理

   當窗口、窗口內的內容、外設等變動的時候,都會產生事件。

Java事件處理三要素:

    1) 事件源(Event Source):即事件發生的場所,就是指各個組件,如按鈕等,點擊按鈕其實就是組件上發生的一個事件;

    2) 事件(Event):事件封裝了組件上發生的事情,比如按鈕單擊、按鈕鬆開等等;

    3) 事件監聽器(Event Listener):負責監聽事件源上發生的特定類型的事件,當事件到來時還必須負責處理相應的事件;

1、鍵盤事件

當向文本框中輸入內容時,將發出鍵盤事件。KeyEvent類負責捕獲鍵盤事件,可以通過爲組件添加實現了KeyListener接口的監聽器類來處理相應的鍵盤事件。

KeyListener接口共有三個抽象方法,分別在發生擊鍵事件、按鍵被按下和釋放時被觸發。如下面代碼所示
 

JTextArea textArea = new JTextArea();
textArea.addKeyListener(new KeyListener() {

	public void keyPressed(KeyEvent e) { // 按鍵被按下時被觸發
		System.out.println("按下的是“" + e.getKeyChar() + "”");
	}

	public void keyTyped(KeyEvent e) { // 發生擊鍵事件時被觸發
		// 獲得輸入的字符
		System.out.println("此次輸入的是“" + e.getKeyChar() + "”");
	}
	public void keyReleased(KeyEvent e) { // 按鍵被釋放時被觸發
		// 獲得描述keyCode的標籤
		String keyText = KeyEvent.getKeyText(e.getKeyCode());
		System.out.println("您釋放的是“" + keyText + "”鍵");
		System.out.println();
	}

}

常用的方法

2、鼠標事件

       所有組件都能發出鼠標事件,MouseEvent類負責捕獲鼠標事件,可以通過爲組件添加實現了MouseListener接口的監聽器類來處理相應的鼠標事件。

MouseListener接口共有5個抽象方法,分別在光標移入或移出組件時、鼠標按鍵被按下或釋放時和發生單擊事件時被觸發。

final JLabel label = new JLabel();
label.addMouseListener(new MouseListener() {

	public void mouseEntered(MouseEvent e) {// 光標移入組件時被觸發
	System.out.println("光標移入組件");
	}

	public void mousePressed(MouseEvent e) {// 鼠標按鍵被按下時被觸發
		System.out.print("鼠標按鍵被按下,");
		int i = e.getButton(); // 通過該值可以判斷按下的是哪個鍵
		if (i == MouseEvent.BUTTON1)
			System.out.println("按下的是鼠標左鍵");
		if (i == MouseEvent.BUTTON2)
			System.out.println("按下的是鼠標滾輪");
		if (i == MouseEvent.BUTTON3)
			System.out.println("按下的是鼠標右鍵");
	}
}

 public void mouseClicked(MouseEvent e) // 發生單擊事件時被觸發

public void mouseExited(MouseEvent e) // 光標移出組件時被觸發

public void mouseReleased(MouseEvent e) // 鼠標按鍵被釋放時被觸發

 

 3、窗體事件

窗體焦點發生變化的事件

        // 爲窗體添加焦點事件監聽器
        addWindowFocusListener(new MyWindowFocusListener());

	private class MyWindowFocusListener implements WindowFocusListener {
		public void windowGainedFocus(WindowEvent e) {// 窗口獲得焦點時被觸發
			System.out.println("窗口獲得了焦點!");
		}
		public void windowLostFocus(WindowEvent e) {// 窗口失去焦點時被觸發
			System.out.println("窗口失去了焦點!");
		}
	}

捕獲窗體狀態發生變化的事件

        // 爲窗體添加狀態事件監聽器
        addWindowStateListener(new MyWindowStateListener());

private class MyWindowStateListener implements WindowStateListener {
	public void windowStateChanged(WindowEvent e) {
		int oldState = e.getOldState();// 獲得窗體以前的狀態
		int newState = e.getNewState();// 獲得窗體現在的狀態
		String from = "";// 標識窗體以前狀態的中文字符串
		String to = "";// 標識窗體現在狀態的中文字符串
		switch (oldState) {// 判斷窗臺以前的狀態
			case Frame.NORMAL:// 窗體處於正常化
				from = "正常化";
				break;
			case Frame.MAXIMIZED_BOTH:// 窗體處於最大化
				from = "最大化";
				break;
			default:// 窗體處於最小化
				from = "最小化";
		}
	}
}

 捕獲其他與窗體有關的事件
 

addWindowListener(new MyWindowListener());// 爲窗體添加其他事件監聽器

    private class MyWindowListener implements WindowListener {
        public void windowActivated(WindowEvent e) {// 窗體被激活時觸發
            System.out.println("窗口被激活!");
        }

}
public interface WindowListener extends EventListener {
    public void windowActivated(WindowEvent e); 	//窗體被激活時觸發
    public void windowOpened(WindowEvent e); 	//窗體被打開時觸發
    public void windowIconified(WindowEvent e); 	//窗體被圖標化時觸發
    public void windowDeiconified(WindowEvent e); 	//窗體被非圖標化時觸發
    public void windowClosing(WindowEvent e); 	//窗體將要被關閉時觸發
    public void windowDeactivated(WindowEvent e);           //窗體不再處於激活狀態時觸發
    public void windowClosed(WindowEvent e); 	//窗體已經被關閉時觸發
}

4、選項事件

當修改下拉菜單中的選中項時,將發出選項事件。ItemEvent類負責捕獲選項事件,可以通過爲組件添加實現了ItemListener接口的監聽器類來處理相應的選項事件。

JComboBox<String> comboBox = new JComboBox<>();// 創建一個下拉菜單
for (int i = 1; i < 6; i++) {// 通過循環添加選項
	comboBox.addItem("選項" + i);
}

comboBox.addItemListener(new ItemListener() {// 添加選項事件監聽器
    public void itemStateChanged(ItemEvent e) {
        int stateChange = e.getStateChange();// 獲得事件類型
        String item = e.getItem().toString();// 獲得觸發此次事件的選項
        if (stateChange == ItemEvent.SELECTED) {// 查看是否由選中選項觸發
            System.out.println("此次事件由      選中  選項“" + item + "”觸發!");
            // 查看是否由取消選中選項觸發
        } else if (stateChange == ItemEvent.DESELECTED) {
            System.out.println("此次事件由  取消選中  選項“" + item + "”觸發!");
        } else {// 由其他原因觸發
            System.out.println("此次事件由其他原因觸發!");
        }
    }
});

getContentPane().add(comboBox);

5、表格模型中的事件

    當向表格模型中添加行時,或者是修改或刪除表格模型中的現有行時,將發出表格模型事件。TableModelEvent類負責捕獲表格模型事件,可以通過爲組件添加實現了TableModelListener接口的監聽器類來處理相應的表格模型事件。

String[] columnNames = { "A", "B" };
String[][] rowValues = { { "A1", "B1" }, { "A2", "B2" },
		{ "A3", "B3" }, { "A4", "B4" } };
// 創建表格模型對象
tableModel = new DefaultTableModel(rowValues, columnNames);
// 爲表格模型添加事件監聽器
tableModel.addTableModelListener(new TableModelListener() {
	public void tableChanged(TableModelEvent e) {
		int type = e.getType();// 獲得事件的類型
		int row = e.getFirstRow() + 1;// 獲得觸發此次事件的表格行索引
		int column = e.getColumn() + 1;// 獲得觸發此次事件的表格列索引
		if (type == TableModelEvent.INSERT) {// 判斷是否有插入行觸發
			System.out.print("此次事件由 插入 行觸發,");
			System.out.println("此次插入的是第 " + row + " 行!");
			// 判斷是否有修改行觸發
		} 
}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章