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);
}
}
}
请问这个程序中是如何把监视器中的x y传入到画布上的?
final MyPanel mp = (MyPanel) e.getSource();这段代码是什么意思?