Java Swing教程 - 事件
Java Swing教程 - 事件
Swing中的事件是用户采取的动作。 例如,按下按钮,在键盘上向下/向上按下一个键。
事件的源是生成事件的组件。例如,当我们按下一个JButton时,点击的事件发生在那个JButton上。 在这种情况下,JButton是点击事件的来源。
事件表示在源组件上发生的操作。
行动事件
ActionListener接口有一个称为actionPerformed()的方法。接口声明如下:
public interface ActionListener extends EventListener {
void actionPerformed(ActionEvent event);
}
所有事件侦听器接口都从java.util.EventListener接口继承。
EventListener接口是一个标记接口,它没有任何方法。
当按下JButton时,将调用其所有注册的Action侦听器的actionPerformed()方法。
以下代码使用lambda表达式向JButton添加Actionlistener:
closeButton.addActionListener(e -> System.exit(0));
以下代码显示了如何为关闭按钮添加点击事件处理程序以退出Swing应用程序。
import java.awt.Container;
//from w w w. ja v a 2 s .c o m
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
// Add a close button
JButton closeButton = new JButton("Close");
contentPane.add(closeButton);
closeButton.addActionListener(e -> System.exit(0));
frame.pack();
frame.setVisible(true);
}
}
例子
以下代码将操作侦听器添加到具有匿名类的按钮。
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*from ww w .j ava 2 s.co m*/
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
static int counter;
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
JButton counterButton = new JButton("Clicked #0");
JButton closeButton = new JButton("Close");
frame.setLayout(new FlowLayout());
contentPane.add(closeButton);
contentPane.add(counterButton);
counterButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
counterButton.setText("Clicked #" + counter++);
}
});
closeButton.addActionListener(e -> System.exit(0));
frame.pack();
frame.setVisible(true);
}
}
实施例2
此示例显示如何从JButton获取操作命令。 动作命令是一个字符串对象,我们可以使用它来计算哪个按钮被点击。
import java.awt.Container;
/*from w w w . j a va 2 s . c o m*/
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
// Add a close button
JButton closeButton = new JButton("Close");
contentPane.add(closeButton);
closeButton.addActionListener(e ->{
System.out.println(e.getActionCommand());
System.exit(0);
} );
frame.pack();
frame.setVisible(true);
}
}
鼠标事件
我们可以处理鼠标事件,例如鼠标点击,进入,退出,按下和释放组件。
MouseEvent类的一个对象表示组件上的鼠标事件。
要处理Mouse事件,请使用MouseListener接口。这里是如何声明接口:
public interface MouseListener extends EventListener {
public void mouseClicked(MouseEvent e);
public void mousePressed(MouseEvent e);
public void mouseReleased(MouseEvent e);
public void mouseEntered(MouseEvent e);
public void mouseExited(MouseEvent e);
}
MouseListener接口有五个方法,我们不能使用lambda表达式来创建鼠标事件处理程序。
当发生特定的鼠标事件时,将调用MouseListener接口的一种方法。
MouseEvent类具有向我们提供有关鼠标事件的详细信息的方法:
getClickCount()方法返回鼠标点击次数。getX()和getY()方法返回鼠标的x和y位置。getXOnScreen()和getYOnScreen()方法返回鼠标的绝对x和y位置。
以下代码演示了JButton的鼠标输入和退出事件。
import java.awt.Container;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//from w w w.ja v a 2 s .co m
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
JButton closeButton = new JButton("Close");
contentPane.add(closeButton);
closeButton.addActionListener(e -> System.exit(0));
// Add a MouseListener to the JButton
closeButton.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
closeButton.setText("Mouse has entered!");
}
@Override
public void mouseExited(MouseEvent e) {
closeButton.setText("Mouse has exited!");
}
});
frame.pack();
frame.setVisible(true);
}
}
事件适配器
Swing包括一些事件侦听器接口的方便类。类名称以Adapter结尾。
Adapter类被声明为抽象,并且实现了一种Listener接口。
Adapter类为事件侦听器接口中的所有方法提供了空实现。
并非所有事件侦听器接口都具有对应的适配器类。具有多个方法的事件侦听器接口具有对应的适配器类。
以下代码在上面的代码中重写了事件处理程序。
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/*from w ww . j ava 2 s .c om*/
import javax.swing.JButton;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
JButton closeButton = new JButton("Close");
contentPane.add(closeButton);
closeButton.addActionListener(e -> System.exit(0));
// Add a MouseListener to the JButton
closeButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
closeButton.setText("Mouse has entered!");
}
@Override
public void mouseExited(MouseEvent e) {
closeButton.setText("Mouse has exited!");
}
});
frame.pack();
frame.setVisible(true);
}
}

免费 AI IDE


更多建议: