鼠标点击案例效果如下图所示:
实现的代码参考
package top.linksinke.demo;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* 鼠标事件的实战<br/>
* create by LINKSINKE on 2020/2/29
*/
public class MouseEventTest extends JFrame {
public MouseEventTest() {
// 设置close按钮的操作(关闭窗口并停止程序运行)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口默认打开的位置和大小
this.setBounds(30, 40, 800, 380);
// 获取容器对象
Container ctainer = this.getContentPane();
// 设置布局方式为绝对布局
ctainer.setLayout(null);
// 将文本域对象添加到滚动面板
final JTextArea txtArea = new JTextArea();
txtArea.setRows(20);
txtArea.setEnabled(false);// 设置文本域不能够输入
txtArea.setDisabledTextColor(Color.RED);// 设置文本域在不能够输入的情况下,显示的文本颜色为红色
JScrollPane sp = new JScrollPane(txtArea);
sp.setBounds(0, 0, 350, 300);
// 文本标签(无文本内容)
JLabel lb = new JLabel();
lb.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLUE),"监听区域"));
lb.setBounds(360, 0, 400, 300);
/**
* 设置文本标签的鼠标监听事件<br/>
* mouseReleased:鼠标按键被释放时被触发<br/>
* mousePressed:鼠标按键被按下时被触发<br/>
* mouseExited:鼠标移出组件时被触发<br/>
* mouseEntered:鼠标移入组件时被触发<br/>
* mouseClicked:发生单击事件时被触发(不管是不是按下还是释放,只要点了就触发该事件)
*/
lb.addMouseListener(new MouseListener() {
// 鼠标按键被释放时被触发
@Override
public void mouseReleased(MouseEvent e) {
String str = String.format("鼠标%s%d次,鼠标被释放,坐标:x=%d,y=%d\n", getMouseButton(e.getButton()),
e.getClickCount(), e.getX(), e.getY());
txtArea.append(str);
}
// 鼠标按键被按下时被触发
@Override
public void mousePressed(MouseEvent e) {
String str = String.format("鼠标%s%d次,鼠标被按下,坐标:x=%d,y=%d\n", getMouseButton(e.getButton()),
e.getClickCount(), e.getX(), e.getY());
txtArea.append(str);
}
// 鼠标移出组件时被触发
@Override
public void mouseExited(MouseEvent e) {
String str = String.format("鼠标%s%d次,鼠标移出了Label组件了,最后一次坐标:x=%d,y=%d\n", getMouseButton(e.getButton()),
e.getClickCount(), e.getX(), e.getY());
txtArea.append(str);
}
// 鼠标移入组件时被触发
@Override
public void mouseEntered(MouseEvent e) {
String str = String.format("鼠标%s%d次,鼠标进入了Label组件了,开始的坐标:x=%d,y=%d\n", getMouseButton(e.getButton()),
e.getClickCount(), e.getX(), e.getY());
txtArea.append(str);
}
// 发生单击事件时被触发(不管是不是按下还是释放,只要点了就触发该事件)
@Override
public void mouseClicked(MouseEvent e) {
String str = String.format("鼠标%s%d次,开始点击,开始的坐标:x=%d,y=%d\n", getMouseButton(e.getButton()),
e.getClickCount(), e.getX(), e.getY());
txtArea.append(str);
}
});
// “清空信息”的按钮
JButton btn = new JButton("清空信息");
btn.setBounds(212, 304, 100, 30);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txtArea.setText("");
}
});
// 向容器中放入滚动面板组件、文本标签组件和按钮组件
ctainer.add(sp);
ctainer.add(lb);
ctainer.add(btn);
this.setVisible(true);
}
/**
* 通过按下的鼠标按键来获取与之对应的鼠标按键
*
* @param mouseBtn
* 按下的鼠标键
* @return 鼠标按键(左键,中键,右键)
*/
public String getMouseButton(int mouseBtn) {
StringBuffer mouseStr = new StringBuffer();
switch (mouseBtn) {
case MouseEvent.BUTTON1:
mouseStr.append("左键");
break;
case MouseEvent.BUTTON2:
mouseStr.append("中键");
break;
case MouseEvent.BUTTON3:
mouseStr.append("右键");
break;
default:
mouseStr.append("");
break;
}
return mouseStr.toString();
}
public static void main(String args[]) {
JFrame jframe = new MouseEventTest();
}
}