关于java中的鼠标监听器
在java中,我们会看到各式各样的接口,今天我想讲一讲我最近新学到的鼠标监听器,既然叫监听器,
自然就可以监听鼠标的各种动作,但是它自身也是一种接口,需要被放置在一个类中,再由这个带接口的类来
帮助其实现监听的功能。
关于鼠标监听器,具体功能如下:
void功能
mouseClicked(MouseEvent e)鼠标按键在组件上单击(按下并释放)时调用。mouseEntered(MouseEvent e)鼠标进入到组件上时调用。mouseExited(MouseEvent e)鼠标离开组件时调用。mousePressed(MouseEvent e)鼠标按键在组件上按下时调用。mouseReleased(MouseEvent e)鼠标按钮在组件上释放时调用。
关于这些功能,我们可以用它来做一个画图板,来具体操作一下。
首先,我们创建一个窗口作为画图板,然后给它附上各种属性;
public void addui
{
JFrame drawui
= new JFrame();
drawui
.setSize(900,800);
drawui
.setTitle("画图板");
drawui
.setLocationRelativeTo(null
);
drawui
.setDefaultCloseOperation(JFrame
.EXIT_ON_CLOSE
);
}
既然要画图,那我们就需要一支画笔,于是
Graphics g
= jpc
.getGraphics();
画笔在我们的窗口内作画,需要我们通过鼠标点击,按压与释放来完成绘制,自然就离不开鼠标监听器了,这时候
我们就需要创建一个类把监听器写进来了。于是
public class DrawListener implements MouseListener{
public void mousePressed(MouseEvent e
){
}
public void mouseReleased(MouseEvent e
){
}
}
我们把监听器作为接口写入这个类,今天我们这里只讨论画直线这一种行为,我们需要在鼠标按下时的地点
与松开时的地点之间画一条直线,这个动作只与监听器中“按下”与“松开”两个动作有关,所以我们今天先只讲他们
写入,读者可以自行补充剩余动作指令。
但是这个新创建的类中,没有画笔,所以我们还需要再创建一个对象
public class DrawListener implements MouseListener{
Graphics gr
;
public void mousePressed(MouseEvent e
){
}
public void mouseReleased(MouseEvent e
){
}
之后,经过思考,画笔作画,需要知道准确的坐标,才能够做出符合预期的图像,而如何得到我们的准确坐标
呢?这就要交给我们的鼠标监听器了。于是
int x1
,x2
,y1
,y2
;
public void mousePressed(MouseEvent e
){
x1
= e
.getX();
y1
= e
.getY();
}
public class DrawPad {
public void mouseReleased(MouseEvent e
){
x2
=e
.getX();
y2
= e
.getY();
gr
.drawLine(x1
,y1
,x2
,y2
);
}
在我们鼠标点下时,鼠标监听器会记录我们点下时的坐标,并将其赋给x1和y1,同理,在我们松开鼠标时,鼠标
监听器会将坐标赋给x2,y2,再让画笔gr在点(x1,y1)与(x2,y2)直接画一条直线。这样,我们的带鼠标监听器
的类就写完了,但是我们还需要把监听器插进原来的类中,于是,我们返回原来的类,插入监听器
public void addui
{
JFrame drawui
= new JFrame();
drawui
.setSize(900,800);
drawui
.setTitle("画图板");
drawui
.setLocationRelativeTo(null
);
drawui
.setDefaultCloseOperation(JFrame
.EXIT_ON_CLOSE
);
drawui
.setVisible(true);
DrawListener dl
= new DrawListener();
drawui
.addMouseListener(dl
);
dl
.gr
= g
;
}
}
public static void main(String
[] args
) {
DrawPad dp
= new DrawPad();
dp
.addUI();
}