Java 鼠标事件分析

importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMouseEventDemo... import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MouseEventDemo extends JFrame implements MouseListener,
MouseMotionListener{
int intX,intY;
JPanel pnlMain;
JLabel lblX,lblY,lblStatus;
JTextField txtX,txtY,txtStatus;
GridLayout glMain;
public MouseEventDemo(){
pnlMain=new JPanel();
getContentPane().add(pnlMain);
glMain=new GridLayout(3,2);
pnlMain.setLayout(glMain);

lblX=new JLabel("当前鼠标X坐标:");
lblY=new JLabel("当前鼠标Y坐标:");
lblStatus=new JLabel("当前鼠标状态:");

txtX=new JTextField(5);
txtY=new JTextField(5);
txtStatus=new JTextField(5);

pnlMain.add(lblX);
pnlMain.add(txtX);
pnlMain.add(lblY);
pnlMain.add(txtY);
pnlMain.add(lblStatus);
pnlMain.add(txtStatus);

addMouseListener(this);
addMouseMotionListener(this);

setVisible(true);
setTitle("好啊");
setSize(250,150);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void mouseClicked(MouseEvent me){

}//这是空操作为什么啊,有什么用?

public void mousePressed(MouseEvent me){
txtStatus.setText("按下");
}
public void mouseEntered(MouseEvent me){
txtStatus.setText("移入");
}
public void mouseExited(MouseEvent me){
txtStatus.setText("移出");
}
public void mouseReleased(MouseEvent me){
txtStatus.setText("释放");
}
public void mouseMoved(MouseEvent me){
intX=me.getX();
intY=me.getY();
txtX.setText(String.valueOf(intX));
txtY.setText(String.valueOf(intY));
}
public void mouseDragged(MouseEvent me){}//这也是空操作为什么啊,有什么用?

public static void main(String[] args){
MouseEventDemo med=new MouseEventDemo();//这是整个程序的入口可是它这形式怎么和一般的不一样啊?好像我见过的形如:new MouseEventDemo();这样的形式更多点吧,这和上面的这种形式有什么区别?
}
}
以上是小弟最近学习Java遇到的一个例子不过我看了半天有几处还是搞不懂为什么要这样做有哪个学长知道希望给小弟仔细讲解下这段代码(越仔细越好,呵呵),小弟在此先谢了...(以上程序有两处申明了方法,可是却是空操作,这是为什么啊...我在想这是不是和抽像类有什么关系...好晕啊~~)
展开
 我来答
jessiejacky
2009-08-14 · TA获得超过227个赞
知道答主
回答量:107
采纳率:0%
帮助的人:0
展开全部
我估计你还没有看到抽象类和接口,MouseListener和MouseMotionListener是两个接口,MouseEventDemo实现了这两个接口,那么燃手他必须皮前嫌实现这两个接口中的所有方法。对于这个程序,可能有些方法是用不到的,那么它只能留个空方法体表示“实现”了这个方法。但其实这是不好的代码风格和编程习惯,所以Java中对于接口方法很多的那些接口提供了适配器类,所谓的适配器类,就是一个实现某个接口的类,但所有方法实现都是空方法,这样你可以继承这个类,同时继承了这些空实现,这样你只需要重写需要用到的函数版本。
而适配器通常使用匿名内部类实现的。
this.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me){
txtStatus.setText("按下");
}
public void mouseReleased(MouseEvent me){
txtStatus.setText("释放");
}
});

在这个匿名类中就不需要那些空方法了,当然用这种方法,implements 后面的东悔兆西也可以不要了。
当然如果你对Java刚入门,对继承接口之类的还不了解,则不一定明白我在说什么。
至于main函数中的 MouseEventDemo med=new MouseEventDemo();
new MouseEventDemo是声明了一个新的对象,并把它赋给了med引用,这样你可以用这个引用调用这个类中的方法。例如这个类有继承自JFrame的setTitle方法,你可以med.setTitle("dfdfd");
光一个new MouseEventDemo则没有被引用罢了,但本质上他们都调用了这个类的构造函数。只不过当构造函数结束后,如果是单线程,后者会被垃圾回收,前者不会。因为还有对象引用存在,这在你看到垃圾回收机制后才能明白,如果向这里一样GUI内部的多线程机制,则在那个线程结束后,后者会被垃圾回收,前者不会。
当然对于这个程序而言加个引用没多大意义。
总之,你的路还长着呢。。。。。。
微测检测5.10
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇... 点击进入详情页
本回答由微测检测5.10提供
撒白风05F
2009-08-14 · TA获得超过1010个赞
知道小有建树答主
回答量:735
采纳率:0%
帮助的人:512万
展开全部
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MouseEventDemo extends JFrame implements MouseListener,
MouseMotionListener {
int intX, intY;
JPanel pnlMain;
JLabel lblX, lblY, lblStatus;
JTextField txtX, txtY, txtStatus;
GridLayout glMain;

public MouseEventDemo() {
pnlMain = new JPanel();
getContentPane().add(pnlMain);
glMain = new GridLayout(3, 2);
pnlMain.setLayout(glMain);

lblX = new JLabel("当前鼠标X坐标:");
lblY = new JLabel("当前鼠标Y坐标:");
lblStatus = new JLabel("当前鼠标状态:");

txtX = new JTextField(5);
txtY = new JTextField(5);
txtStatus = new JTextField(5);

pnlMain.add(lblX);
pnlMain.add(txtX);
pnlMain.add(lblY);
pnlMain.add(txtY);
pnlMain.add(lblStatus);
pnlMain.add(txtStatus);

addMouseListener(this);
addMouseMotionListener(this);

setVisible(true);
setTitle("好啊");
setSize(250, 150);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void mouseClicked(MouseEvent me) { //MouseListener中的方法,必须要实现
//你猜物缓继承穗模了MouseListener, MouseMotionListener 这两个接口,必须要实现它里面定蚂手义的方法,哪怕是个空,没有就会报错,编译通不过
//这几个方法都是要实现的,只是你自己没有写而已
}// 这是空操作为什么啊,有什么用?

public void mousePressed(MouseEvent me) {
txtStatus.setText("按下");
}

public void mouseEntered(MouseEvent me) {
txtStatus.setText("移入");
}

public void mouseExited(MouseEvent me) {
txtStatus.setText("移出");
}

public void mouseReleased(MouseEvent me) {
txtStatus.setText("释放");
}

public void mouseMoved(MouseEvent me) {
intX = me.getX();
intY = me.getY();
txtX.setText(String.valueOf(intX));
txtY.setText(String.valueOf(intY));
}

public void mouseDragged(MouseEvent me) {
txtStatus.setText("拖我干什么?");
}// 这也是空操作为什么啊,有什么用?

public static void main(String[] args) {
MouseEventDemo med = new MouseEventDemo();// 这是整个程序的入口可是它这形式怎么和一般的不一样啊?好像我见过的形如:new
// MouseEventDemo();这样的形式更多点吧,这和上面的这种形式有什么区别?
//你new 了一个对象,但med从来没用过,留着也没用,不如直接用 new MouseEventDemo();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
junqing1987
2009-08-14 · TA获得超过343个赞
知道答主
回答量:72
采纳率:0%
帮助的人:0
展开全部
这两个空操作是implements MouseListener,
MouseMotionListener接口中定义的肢游抽象方法
接口中的抽象方法必须在接口的实现类中实现,而这两个方法跟这个程序的实正猜现没历清销有什么关系,所以就没有定义该方法的实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
freish
2009-08-14 · TA获得超过2878个赞
知道大有可为答主
回答量:3153
采纳率:0%
帮助的人:2691万
展开全部
MouseEventDemo med=new MouseEventDemo();//这是整个程序的入口可是它这形式怎么和一般的不一样啊?好像我见过的形如:new MouseEventDemo();这样的形式更多锋毁拦点吧,这和上面的这种形式有银胡什么区余猜别?

一个在栈中给了个引用而已,没有其他区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式