关于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();
}