ActionListener三种实现
/**
* Simple1.java - 处理事件的第一种方法
* 在这个例子中,利用一个ActionListener来监听事件源产生的事件
* 用一些if语句来决定是哪个事件源
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Simple1
{
private static JFrame frame; // 定义为静态变量以便main使用
private static JPanel myPanel; // 该面板用来放置按钮组件
private JButton button1; // 这里定义按钮组件
private JButton button2; // 以便让ActionListener使用
public Simple1() // 构造器, 建立图形界面
{
// 新建面板
myPanel = new JPanel();
// 新建按钮
button1 = new JButton("按钮1"); // 新建按钮1
button2 = new JButton("按钮2");
SimpleListener ourListener = new SimpleListener();
// 建立一个actionlistener让两个按钮共享
button1.addActionListener(ourListener);
button2.addActionListener(ourListener);
myPanel.add(button1); // 添加按钮到面板
myPanel.add(button2);
}
private class SimpleListener implements ActionListener
{
/**
* 利用该内部类来监听所有事件源产生的事件
* 便于处理事件代码模块化
*/
public void actionPerformed(ActionEvent e)
{
// 利用getActionCommand获得按钮名称
// 也可以利用getSource()来实现
// if (e.getSource() ==button1)
String buttonName = e.getActionCommand();
if (buttonName.equals("按钮1"))
JOptionPane.showMessageDialog(frame,
"按钮1 被点击");
else if (buttonName.equals("按钮2"))
JOptionPane.showMessageDialog(frame,
"按钮2 被点击");
else
JOptionPane.showMessageDialog(frame,
"Unknown event" );
}
}
public static void main(String s[])
{
Simple1 gui = new Simple1(); // 新建Simple1组件
frame = new JFrame("Simple1"); // 新建JFrame
// 处理关闭事件的通常方法
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{System.exit(0);} });
frame.getContentPane().add(myPanel);
frame.pack();
frame.setVisible(true);
}
}
/**
* Simple2.java - 处理事件的第二种方法
* 在这个例子中,利用匿名内部类来监听每一个事件源产生的事件
* 避免使用一些if语句来决定是哪个事件源
*/
import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.*;
public
class
Simple2
{
private
static
JFrame frame;
// 定义为静态变量以便main使用
private
static
JPanel myPanel;
// 该面板用来放置按钮组件
private
JButton button1;
// 这里定义按钮组件
private
JButton button2;
// 以便让ActionListener使用
public
Simple2()
// 构造器, 建立图形界面
{
// 新建面板
myPanel =
new
JPanel();
// 新建按钮
button1 =
new
JButton(
"按钮1"
);
// 新建按钮1
button2 =
new
JButton(
"按钮2"
);
// 每一个事件源需要一个监听器
// 定义一个匿名内部类来监听事件源产生的事件
button1.addActionListener(
new
ActionListener()
{
public
void
actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(frame,
"按钮1 被点击"
);
}
}
);
button2.addActionListener(
new
ActionListener()
{
public
void
actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(frame,
"按钮2 被点击"
);
}
}
);
myPanel.add(button1);
// 添加按钮到面板
myPanel.add(button2);
}
public
static
void
main(String s[])
{
Simple2 gui =
new
Simple2();
// 新建Simple2组件
frame =
new
JFrame(
"Simple2"
);
// 新建JFrame
// 处理关闭事件的通常方法
frame.addWindowListener(
new
WindowAdapter() {
public
void
windowClosing(WindowEvent e)
{System.exit(
0
);} });
frame.getContentPane().add(myPanel);
frame.pack();
frame.setVisible(
true
);
}
}
/**
* Simple3.java - 处理事件的第三种方法
* For this example, we will use inner member classes to
* 在这个例子中,利用一般内部类来监听每个事件源产生的事件
* 该方法避免了第二种方法中由于使用匿名内部类而导致的代码混乱
* 便于集中处理事件代码
* 每一个Hander可以被工具栏或菜单多次使用
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Simple3
{
private static JFrame frame; // 定义为静态变量以便main使用
private static JPanel myPanel; // 该面板用来放置按钮组件
private JButton button1; // 这里定义按钮组件
private JButton button2; // 以便让ActionListener使用
// 利用一般内部类来监听每一个事件源产生的事件如(button1, button2)
private class Button1Handler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(frame,"按钮1 被点击");
}
}
private class Button2Handler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(frame,"按钮2 被点击");
}
}
public Simple3() // // 构造器, 建立图形界面
{
// 新建面板
myPanel = new JPanel();
// 新建按钮
button1 = new JButton("按钮1"); // 新建按钮1
button2 = new JButton("按钮2");
// 对每一个组件注册监听内部类
button1.addActionListener(new Button1Handler());
button2.addActionListener(new Button2Handler());
myPanel.add(button1); // 添加按钮到面板
myPanel.add(button2);
}
public static void main(String s[])
{
Simple3 gui = new Simple3(); // 新建Simple3组件
frame = new JFrame("Simple3"); // 新建JFrame
// 处理关闭事件的通常方法
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{System.exit(0);} });
frame.getContentPane().add(myPanel);
frame.pack();
frame.setVisible(true);
}
}
最新文章
- 基础知识javascript--事件
- PHP入门part4
- JavaScript之毒瘤
- UVALive 5061 Lightning Energy Report --LCA
- ngCordova插件安装使用
- postgresql之ctid的浅谈
- @responseBody注解的使用
- Ext 4.2 RowEditing
- Linux C 程序 字符串运算符-表达式(TWO)
- BZOJ 2599: [IOI2011]Race( 点分治 )
- dev控件chart简单实现多图例,双曲线,双柱图,曲线与柱图
- [Codeforces 235B]Let's Play Osu!
- Basic Git commands
- C语言之linux内核实现最大公约数算法
- JAVA版本8u171与8u172的区别
- BZOJ4589 Hard Nim FWT 快速幂 博弈
- Web版记账本开发记录(七)
- 29:ISBN号码
- DevOps自动化工具集合
- 软工个人博客-week7
热门文章
- 数据库Tsql语句创建--约束--插入数据
- Hello World基于.net framework中CLR的执行
- Java中将String转json对象
- Could not create connection to database server. Attempted reconnect 3 times. Giving up.错误
- Unity 给FindGameObjectsWithTag排序
- CMSIS-RTOS 时间管理之虚拟定时器Virtual Timers
- ArcGIS api for javascript——图形-增加图形到地图
- Linux异常关机后,Mysql启动出错ERROR 2002 (HY000)
- openGl超级宝典学习笔记 (2) 7个主要的几何图元
- cocoapods的安装,使用,卸载,以及你可能会遇到的坑..