动作监听:
先创建一个图形化界面,接着创建一个按钮对象,设置按钮的大小。
添加一个addActionListener();
addActionListener()
方法定义在 java.awt.event.ActionListener
接口相关的上下文中,许多支持用户交互产生动作事件的组件类(如 JButton
、JMenuItem
等)都实现了该方法。通过调用这个方法,可以将一个实现了 ActionListener
接口的对象注册到组件上,当组件上发生特定动作(通常是点击操作)时,会触发相应的动作事件,进而调用监听器中的处理方法。
import javax.swing.*;
public class Test3 {
public static void main(String[] args){
JFrame jFrame=new JFrame();
jFrame.setSize(603,680);
jFrame.setTitle("演示");
jFrame.setAlwaysOnTop(true);
jFrame.setLocationRelativeTo(null);
jFrame.setDefaultCloseOperation(3);
jFrame.setLayout(null);
//创建一个按钮对象
JButton jtb=new JButton();
jtb.setBounds(0,0,100,50);
//jtb:组件对象,表示你要给哪个组件添加事件
//addActionListener:表示我要给组件添加哪个事件监听
jtb.addActionListener(new MyJFrame2());
//把按钮添加到界面当中
jFrame.getContentPane().add(jtb);
jFrame.setVisible(true);
}
}
但是,这个new MyJFrame2()只被用了一次,所以可以使用匿名内部类,在 GUI 编程中,为组件添加事件监听器时,经常使用匿名内部类来实现事件监听器接口。在 Java 中,匿名内部类是一种特殊的局部内部类,它没有显式的类名。使用匿名内部类可以在需要创建一个实现某个接口或继承某个类的对象时,无需显式定义一个新的类,从而使代码更加简洁。
jtb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("别点");
}
第二种方式:
我们先声明并初始化两个JButton类,他们两个要是成员变量,这样整段代码都能使用它,接着创建成员构造方法。创建一个窗口,并创造两个按钮对象。按钮对象可以直接调用this(这里的this为了实现下面actionPerformed方法)
Object source = e.getSource()
:获取触发动作事件的组件对象。if (source == jtb1)
:判断触发事件的组件是否为jtb1
,如果是,则将jtb1
按钮的大小设置为 200x200 像素。else if (source == jtb2)
:若触发事件的组件是jtb2
,则使用Random
类生成两个 0 到 199 之间的随机整数,作为jtb2
按钮的新宽度和高度。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class Test3 extends JFrame implements ActionListener {
JButton jtb1=new JButton("点");
JButton jtb2=new JButton("点");
public Test3(){
this.setSize(603,680);
this.setTitle("演示");
this.setAlwaysOnTop(true);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setLayout(null);
//创建一个按钮对象
jtb1.setBounds(0,0,100,50);
jtb1.addActionListener(this);
jtb2.setBounds(0,0,100,50);
jtb2.addActionListener(this);
//jtb:组件对象,表示你要给哪个组件添加事件
//addActionListener:表示我要给组件添加哪个事件监听
//把按钮添加到界面当中
this.getContentPane().add(jtb1);
this.getContentPane().add(jtb2);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source==jtb1){
jtb1.setSize(200,200);
} else if (source==jtb2) {
Random random=new Random();
jtb2.setSize(random.nextInt(200),random.nextInt(200));
}
}
}
鼠标监听:
一个鼠标点击一个按钮之后,可以分为:划入动作,按下动作,松开动作,划出动作。
给按钮绑定鼠标事件:
一个简单的鼠标监听机制,当你的鼠标做相应动作的时候,程序会打印相应的动作。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
public class Test3 extends JFrame implements MouseListener {
JButton jtb1=new JButton("点");
public Test3(){
this.setSize(603,680);
this.setTitle("演示");
this.setAlwaysOnTop(true);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setLayout(null);
jtb1.setBounds(0,0,100,50);
jtb1.addMouseListener(this);
//把按钮添加到界面当中
this.getContentPane().add(jtb1);
this.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("单击");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("按住不松");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("送开");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("划入");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("划出");
}
}
键盘监听机制:
跟前面两个监听方法类似
@Override
public void keyTyped(KeyEvent e) {
// 当用户按下并释放一个键,产生一个字符时调用
char keyChar = e.getKeyChar();
label.setText("你输入的字符是: " + keyChar);
}
@Override
public void keyPressed(KeyEvent e) {
// 当用户按下某个键时调用
int keyCode = e.getKeyCode();
label.setText("你按下的键码是: " + keyCode);
}
@Override
public void keyReleased(KeyEvent e) {
// 当用户释放某个键时调用
int keyCode = e.getKeyCode();
label.setText("你释放的键码是: " + keyCode);
}
public static void main(String[] args) {
// 在事件调度线程中创建和显示 GUI
javax.swing.SwingUtilities.invokeLater(() -> new KeyboardListenerExample());
}
}