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遇到的一个例子不过我看了半天有几处还是搞不懂为什么要这样做有哪个学长知道希望给小弟仔细讲解下这段代码(越仔细越好,呵呵),小弟在此先谢了...(以上程序有两处申明了方法,可是却是空操作,这是为什么啊...我在想这是不是和抽像类有什么关系...好晕啊~~) 展开
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遇到的一个例子不过我看了半天有几处还是搞不懂为什么要这样做有哪个学长知道希望给小弟仔细讲解下这段代码(越仔细越好,呵呵),小弟在此先谢了...(以上程序有两处申明了方法,可是却是空操作,这是为什么啊...我在想这是不是和抽像类有什么关系...好晕啊~~) 展开
4个回答
展开全部
我估计你还没有看到抽象类和接口,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内部的多线程机制,则在那个线程结束后,后者会被垃圾回收,前者不会。
当然对于这个程序而言加个引用没多大意义。
总之,你的路还长着呢。。。。。。
而适配器通常使用匿名内部类实现的。
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 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
展开全部
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这两个空操作是implements MouseListener,
MouseMotionListener接口中定义的肢游抽象方法
接口中的抽象方法必须在接口的实现类中实现,而这两个方法跟这个程序的实正猜现没历清销有什么关系,所以就没有定义该方法的实现。
MouseMotionListener接口中定义的肢游抽象方法
接口中的抽象方法必须在接口的实现类中实现,而这两个方法跟这个程序的实正猜现没历清销有什么关系,所以就没有定义该方法的实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MouseEventDemo med=new MouseEventDemo();//这是整个程序的入口可是它这形式怎么和一般的不一样啊?好像我见过的形如:new MouseEventDemo();这样的形式更多锋毁拦点吧,这和上面的这种形式有银胡什么区余猜别?
一个在栈中给了个引用而已,没有其他区别
一个在栈中给了个引用而已,没有其他区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询