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); } }
更多建议: