Java里Swing的鼠标点击案例实战练习代码(8)

鼠标点击案例效果如下图所示:
在这里插入图片描述

实现的代码参考

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();
	}
}
发布了68 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_29001539/article/details/104577827
今日推荐