之前在界面文章中提到,按钮在没有设置事件监听时,无论怎么按都不会起作用,如果要使这些按钮被按下时可以执行不同的操作,就必须使用监听器。
ActionListener:可以提供用于监听按钮的监听器,一旦有按钮被按下就会调用其方法actionPerformed,执行里面的内容。
方法actionPerformed:
public void actionPerformed(ActionEvent e) {
//ActionEvent为按钮点击事件
}
一般需要创建一个类来实现这个接口,然后在按钮实例上调用addActionListener()方法使监听器在该按钮上生效。
例子:一个简单的模拟开关
实现监听器的类:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
public class Button_Listener implements ActionListener {
//实现ActionLsitener接口
JLabel jl = new JLabel();
JButton jb = new JButton();
//创建成员变量用于存传进来的标签和
public Button_Listener() {
// TODO Auto-generated constructor stub
}
public Button_Listener(JLabel jl, JButton jb) {
this.jl = jl;
this.jb = jb;//构造函数中传入标签和按钮
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String str = e.getActionCommand();//获得触发事件的按钮的Text
if (str.equals("按下")) {
if (jl != null) {
jl.setText("按钮按下");//切换组件的Text
jb.setText("已按下");
}
}
if (str.equals("已按下")) {
if (jl != null) {
jl.setText("没按下按钮");
jb.setText("按下");
}
}
//根据不同的Text引发不同的操作。
}
}
主程序:
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Listener_Example {
public static void main(String[] args) {
// TODO Auto-generated method stub
Listener_Example l = new Listener_Example();
l.show();
}
public void show() {
JFrame jf = new JFrame();
jf.setSize(200, 200);
jf.setLocationRelativeTo(null);//创建一个界面
FlowLayout f = new FlowLayout();
jf.setLayout(f);//流式布局
JButton jb = new JButton("按下");
jb.setPreferredSize(new Dimension(100, 50));
jf.add(jb);
JLabel jl = new JLabel("没按下按钮");
jl.setPreferredSize(new Dimension(100, 50));
jf.add(jl);
Button_Listener btListener = new Button_Listener(jl, jb);//创建一个监听器实例
jb.addActionListener(btListener);//为按钮添加监听器
jf.setDefaultCloseOperation(3);
jf.setVisible(true);
}
}
结果:
没按之前
按下之后
MouseListener,MouseMotionListener:用于监听鼠标的事件,一共有以下一堆方法:
MouseListener内:
mouseClicked:鼠标在监听器所监听的组件点击后触发。
mouseEntered:鼠标进入所监听组件后触发。
mouseExited:鼠标离开所监听组件后触发。
MouseMotionListener内:
mousePressed:鼠标在监听器所监听的组件按下后触发。
mouseReleased:鼠标在监听器所监听的组件释放后触发。
mouseDragged:鼠标在监听器所监听的组件拖动时触发。
mouseMoved:鼠标在监听器所监听的组件移动时触发。
KeyListener:用于监听键盘的事件,有以下方法:
keyPressed:键盘在焦点是所监听的组件时按下触发。
keyReleased:键盘在焦点是所监听的组件时释放触发。
keyTyped:在键盘输入的为字符时触发。
同时,一般是在界面(JFrame,JPanel)中使用addMouseListener,addMouseMotionListener,addKeyListener设置,方法同ActionListener。这些会在接下来的绘图板项目中详细介绍。
监听器远不止这些,想要知道详细的可以查阅有关资料,本人只举例一些比较简单的用于简单的项目编写。
预告,绘图板项目。