Swing是目前Java中不可缺少的窗口工具組
Java Swing中處理各組件事件的一般步驟是
以上步驟我們可以用多種方法實現
為了說明如何使用上述三種方法實現事件的處理方法
首先
/*
* Simple
* 在這個例子中
* 用一些if語句來決定是哪個事件源
*/
import java
import java
import javax
public class Simple
{
private static JFrame frame; // 定義為靜態變量以便main使用
private static JPanel myPanel; // 該面板用來放置按鈕組件
private JButton button
private JButton button
public Simple
{
// 新建面板
myPanel = new JPanel();
// 新建按鈕
button
button
SimpleListener ourListener = new SimpleListener();
// 建立一個actionlistener讓兩個按鈕共享
button
button
myPanel
myPanel
}
private class SimpleListener implements ActionListener
{
/*
* 利用該內部類來監聽所有事件源產生的事件
* 便於處理事件代碼模塊化
*/
public void actionPerformed(ActionEvent e)
{
// 利用getActionCommand獲得按鈕名稱
// 也可以利用getSource()來實現
// if (e
String buttonName = e
if (buttonName
JOptionPane
else if (buttonName
JOptionPane
else
JOptionPane
}
}
public static void main(String s[])
{
Simple
frame = new JFrame(
// 處理關閉事件的通常方法
frame
public void windowClosing(WindowEvent e)
{System
frame
frame
frame
}
}
讓我們來看看以上代碼是如何工作的
在程序入口main方法中
利用一個監聽器來處理事件的缺點是
通過使用匿名內部類可以解決上述存在的問題
/*
* Simple
* 在這個例子中
* 避免使用一些if語句來決定是哪個事件源
*/
import java
import java
import javax
public class Simple
{
private static JFrame frame; // 定義為靜態變量以便main使用
private static JPanel myPanel; // 該面板用來放置按鈕組件
private JButton button
private JButton button
public Simple
{
// 新建面板
myPanel = new JPanel();
// 新建按鈕
button
button
// 每一個事件源需要一個監聽器
// 定義一個匿名內部類來監聽事件源產生的事件
button
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JOptionPane
}
}
;
button
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JOptionPane
}
}
;
myPanel
myPanel
}
public static void main(String s[])
{
Simple
frame = new JFrame(
// 處理關閉事件的通常方法
frame
public void windowClosing(WindowEvent e)
{System
frame
frame
frame
}
}
使用匿名內部類同樣存在許多另外的問題
我們使用一般的命名內部類可以解決以上許多問題
以下是實現代碼
/*
* Simple
* For this example
* 在這個例子中
* 該方法避免了第二種方法中由於使用匿名內部類而導致的代碼混亂
* 便於集中處理事件代碼
* 每一個Hander可以被工具欄或菜單多次使用
*/
import java
import java
import javax
public class Simple
{
private static JFrame frame; // 定義為靜態變量以便main使用
private static JPanel myPanel; // 該面板用來放置按鈕組件
private JButton button
private JButton button
// 利用一般內部類來監聽每一個事件源產生的事件如(button
private class Button
{
public void actionPerformed(ActionEvent e)
{
JOptionPane
}
}
private class Button
{
public void actionPerformed(ActionEvent e)
{
JOptionPane
}
}
public Simple
{
// 新建面板
myPanel = new JPanel();
// 新建按鈕
button
button
// 對每一個組件注冊監聽內部類
button
button
myPanel
myPanel
}
public static void main(String s[])
{
Simple
frame = new JFrame(
// 處理關閉事件的通常方法
frame
public void windowClosing(WindowEvent e)
{System
frame
frame
frame
}
}
以上分析了在Java Swing中三種事件的處理方式
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26407.html