当需要按钮被按下时执行一定的任务,就要为按钮编写动作事件监听器的代码,并向按钮注册动作事件监听器。编写动作事件监听器需要实现ActionListener监听接口,并实现actionPerformed方法
ActionListener监听接口声明了actionPerformed方法,用于处理动作事件,在发生操作时调用,语法是:
public void actionPerformed(ActionEvent e);
按钮中注册与注销动作事件监听器的方法如下
public void addActionListener(ActionListener l):为按钮注册指定的监听器。
public void removeActionListener(ActionEvent l):注销按钮的监听器
事件源与监听器并非只能一对一,而还可以一对多,多对一
~一个事件源可以注册多个同类型的监听器,也可以注册多种,多个事件监听器
~多个事件源可以注册一个事件监听器(就好比一个顾客到商场买东西。可能有很多柜台的售货员都在关注这个顾客,都可以对这个顾客的动作或提问做出响应,同时每一个售货员又可以回答和解决多个顾客的问题)
~一个事件源可以注册多个同类型的监听器,也可以注册多种,多个事件监听器
~多个事件源可以注册一个事件监听器(就好比一个顾客到商场买东西。可能有很多柜台的售货员都在关注这个顾客,都可以对这个顾客的动作或提问做出响应,同时每一个售货员又可以回答和解决多个顾客的问题)
实现代码:
package ch9;
import java.awt.event.*;
import javax.swing.*;
public class ClickButton extends JFrame
{
private JPanel jp = new JPanel(); //创建面板JPanel对象
private JButton button1 = new JButton("按钮1");
private JButton button2 = new JButton("按钮2");
private JButton button3 = new JButton("按钮3"); //创建按钮对象和数组
private JButton [] button = new JButton[] {button1,button2,button3};
private JLabel jl = new JLabel("请点击按钮");
private int Count = 0;
ClickButton()
{
for(int i=0;i<button.length;i++)
{
jp.add(button[i]);
}
jp.add(jl);
this.add(jp);
this.setTitle("点击按钮,记录点击按钮名及次数");
this.setBounds(100,300,400,200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button1.addActionListener(new ActionListener() //按钮一同时注册两个监听器
{
public void actionPerformed(ActionEvent a) //实现ActionListener接口的方法
{
ClickButton.this.jl.setText(jl.getText()+".按钮一同时注册两个监听器");
}
});
for(int i=0;i<button.length;i++)
{
button[i].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent a)
{
if(a.getSource()==button1)
{
ClickButton.this.jl.setText("您单击的是按钮一,合计单击了"+(++Count)+"次按钮");//修改标签内容
}
else if(a.getSource()==button2)
{
ClickButton.this.jl.setText("您单击的是按钮二,合计单击了"+(++Count)+"次按钮");
}
else if(a.getSource()==button3)
{
ClickButton.this.jl.setText("您单击的是按钮三,合计单击了"+(++Count)+"次按钮");
}
}
});
}
}
public static void main(String args[])
{
new ClickButton();
}
}