Eventos del mouse de Java, haga clic en el botón izquierdo para dibujar un círculo, haga clic con el botón derecho para dibujar un rectángulo, haga doble clic en el botón izquierdo para borrar

Descripción del Título

Escriba un programa Java, cree un formulario e implemente la interacción. En el formulario, "haga clic en el botón izquierdo del mouse", dibuje un "círculo verde" en el cursor; "haga clic en el botón derecho del mouse" en el formulario, dibuje un "cuadro rojo" en el cursor; "haga doble clic en el botón izquierdo del mouse "en la tecla de formulario" para borrar todos los "círculos" y "cuadrados" dibujados.

Uno, la idea básica

El tema es una interacción de formulario simple, el código principal es agregar un detector de eventos del mouse al panel y luego implementar el detector.


En segundo lugar, el análisis de clase referenciado

1. Para realizar el dibujo en la ventana, es necesario introducir la clase Gráficos.

2. Para realizar el evento de doble clic del mouse, el evento de doble clic del mouse se puede realizar juzgando el número de clics del mouse a través del origen del evento e.getClickCount () == 2. Pero en este caso, el programa ejecutará nuevamente el evento de clic izquierdo antes de ejecutar el evento de doble clic. Para evitar esta situación, aquí se utiliza la clase de temporizador Timer en Java.

Programación del método del temporizador (tarea TimerTask, Date firstTime, período largo) Este método consiste en programar una tarea, comenzar a programar desde el evento firstTime y esperar el período (ms) para continuar la programación después de cada programación.

(El uso de la clase Timer en el código implementado se toma prestado del contenido de muchos artículos de bloggers)


Tres, implementación de código

import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MyFrame extends JFrame {
    
    
	MyPanel panel;

	MyFrame() {
    
    
		panel = new MyPanel();
		this.setBounds(500, 500, 600, 600);
		panel.addMouseListener(new Draw()); // 为面板添加鼠标监听器
		this.add(panel);
		this.setVisible(true);
	}

	public static void main(String[] args) {
    
    
		MyFrame mf = new MyFrame();
	}
}

class MyPanel extends JPanel {
    
    
	int judge = 0; // 判断鼠标点击状态
	int x;
	int y;

	@Override
	public void paint(Graphics g) {
    
    
		if (judge == 1) // 单击左键
		{
    
    
			g.setColor(Color.GREEN);
			g.fillOval(x, y, 50, 50);
		} else if (judge == 2) // 双击左键
		{
    
    
			g.setColor(Color.WHITE);
			super.paint(g);
		} else if (judge == 3) // 单击右键
		{
    
    
			g.setColor(Color.RED);
			g.fillRect(x, y, 50, 50);
		}
	}
}

class Draw extends MouseAdapter {
    
    

	static boolean f = false;
	static int n = 1;

	@Override
	public void mouseClicked(MouseEvent e) {
    
     // 实现监听器

		final MyPanel mp = (MyPanel) e.getSource();

		mp.x = e.getX(); // 获取鼠标点击的位置,为画图确定坐标
		mp.y = e.getY();

		f = false;

		if (e.getButton() == e.BUTTON3) {
    
     // 单击右键
			n = 3;
			mp.judge = n;
			mp.repaint();
			n = 1;
			return;
		}

		else if (e.getButton() == e.BUTTON1) {
    
    

			if (n == 2) {
    
     // 双击左键
				mp.judge = n;
				mp.repaint();
				n = 1;
				f = true;
				return;
			}

			Timer timer = new Timer(); // 使用定时器来判断双击和单击左键

			timer.schedule(new TimerTask() {
    
    

				int num = 0;

				@Override
				public void run() {
    
    

					if (f) {
    
     // 判断双击事件是否已经执行,若已执行则取消定时器任务
						num = 0;
						n = 1;
						this.cancel();
						return;
					}

					if (num == 1) {
    
    
						mp.judge = num; // 定时器再次执行,调用左键单击事件,然后取消定时器任务
						mp.repaint();
						f = true;
						n = 1;
						num = 0;
						this.cancel();
						return;
					}
					n++;
					num++;
				}
			}, new Date(), 150);
		}

	}
}

resultado de la operación:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_46027243/article/details/109062343
Recomendado
Clasificación