关于Java鼠标监听器的问题

我按网上的鼠标监听器的内部类的方法写的结构,但是不知道为什么用鼠标之后没有结果,麻烦各位大神帮我看看

新人第一次用这个提问,关于提问的方式或者表述不清楚也欢迎大家指正啊

谢谢大家!!!

buttonListener是Map1的内部类

import javax.swing.*;
public class test
{
    public static void main(String[] args){  
        JFrame frame=new Map1(); 
        frame.setVisible(true);
        new Map1();
    }  
}


import javax.swing.JFrame;
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.*;
import java.awt.event.*;

public class Map1 extends JFrame 
{
    ImageIcon bank1 = new ImageIcon("bank1.jpg");//为按钮加载图片
    ImageIcon bank2 = new ImageIcon("bank2.jpg");
    ImageIcon plank1 = new ImageIcon("plank1.jpg");
    ImageIcon plank1_man = new ImageIcon("plank1_man.jpg");
    ImageIcon plank2 = new ImageIcon("plank2.jpg");
    ImageIcon plank2_man = new ImageIcon("plank2_man.jpg");
    ImageIcon stump1 = new ImageIcon("stump1.jpg");
    ImageIcon stump1_man = new ImageIcon("stump1_man.jpg");
    ImageIcon stump2 = new ImageIcon("stump2.jpg");
    ImageIcon stump2_man = new ImageIcon("stump2_man.jpg");
    ImageIcon stump3 = new ImageIcon("stump3.jpg");
    ImageIcon stump3_man = new ImageIcon("stump3_man.jpg");
    ImageIcon water1 = new ImageIcon("water1.jpg");
    ImageIcon water2 = new ImageIcon("water2.jpg");
    ImageIcon water3 = new ImageIcon("water3.jpg");
    ImageIcon water4 = new ImageIcon("water4.jpg");
   JButton[][] button=new JButton[13][9];//创建按钮对象
    public int xmove;
    public int ymove;
    public int xdecide=4;
    public int ydecide=12;
    public int decide[][]={
                   {0,0,0,0,0,0,0,0,0},//小人是1
                   {0,0,0,0,0,0,0,0,0},//木桩子是q2   
                   {2,0,0,0,0,0,0,0,0},//桥是3
                   {0,0,0,0,0,0,0,0,0},
                   {0,0,0,0,2,0,0,0,0},
                   {0,0,0,0,0,0,0,0,0},
                   {2,0,2,3,3,3,2,0,0},
                   {0,0,0,0,0,0,0,0,0},
                   {2,0,0,0,2,0,0,0,0},
                   {3,0,0,0,3,0,0,0,0},
                   {2,0,0,0,3,0,0,0,0},
                   {0,0,0,0,3,0,0,0,0},
                   {0,0,0,0,1,0,0,0,0},
                                     };
   public Map1()
   {
        setSize(300,450);//设置大小
        //JButton[][] button=new JButton[13][9];//创建按钮对象
        JPanel panel=new JPanel();
        setTitle("RiverCrossing");
        this.add(panel);
        panel.setLayout(new GridLayout(13,9,0,0));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        for(int a=0;a<9;a++)
        {
            button[0][a]=new JButton(bank2);        
        }
        for(int a=0;a<9;a++)
        {
            button[12][a]=new JButton(bank1);
        }
        for(int a=1;a<12;a++)
        {
            for(int b=0;b<9;b++)
            {
                button[a][b]=new JButton(water1);
            }
        }
        //下面是第一个地图的(这些跟问题没关)
        button[2][0]=new JButton(stump1);
        button[6][0]=new JButton(stump1);
        button[8][0]=new JButton(stump1);
        button[10][0]=new JButton(stump1);
        button[3][1]=new JButton(water4);
        button[5][1]=new JButton(water3);
        button[5][2]=new JButton(water4);
        button[6][2]=new JButton(stump1);
        button[8][2]=new JButton(water4);
        button[2][4]=new JButton(water4);
        button[4][4]=new JButton(stump1);
        button[8][4]=new JButton(stump1);
        button[3][6]=new JButton(water3);
        button[6][6]=new JButton(stump1);
        button[12][4]=new JButton(stump2_man);
        button[0][4]=new JButton(stump3);
        button[9][0]=new JButton(plank2);
        button[9][4]=new JButton(plank2);
        button[10][4]=new JButton(plank2);
        button[11][4]=new JButton(plank2);
        buttonListener btListener[][]=new buttonListener[13][9];//创建监听器
        for(int a=0;a<13;a++)
        {
           for(int b=0;b<9;b++)
           {
             panel.add(button[a][b]);
             button[a][b].addMouseListener(btListener[a][b]);//给监听器加到按钮
             //System.out.printf("21");
           }
        }

   }
     public class buttonListener implements MouseListener
     {
          public void mouseReleased(MouseEvent e)
      {   System.out.printf("1");
          outterloop:if(e.getButton() == MouseEvent.BUTTON1)//左键该执行的操作(移动小人)
           { 
              for(ymove=0;ymove<13;ymove++)//行的位置
              {
                  for(xmove=0;xmove<9;xmove++)//列的位置
                  {
                      if(e.getSource()==button[ymove][xmove])//点击的那个按钮的坐标
                      {   
                         //move(button,ymove,xmove);
                         ymove=0;
                         xmove=0;
                         break outterloop;
                      }
                  }
              }
           }

      }  
      public void mousePressed(MouseEvent e)
      {
      }
      public void mouseClicked(MouseEvent e)
      { 

      }
      public void mouseEntered(MouseEvent e)
      {

      }
      public void mouseExited(MouseEvent e)
      {

      }
   }
}

0

6个回答

本例中没有效果应该两处的问题:
1、只是为监听类创建了数组,并没有为每个数组元素new实例 ;
buttonListener btListener[][]=new buttonListener[13][9]
for(int a=0;a<13;a++){
for(int b=0;b<9;b++){
btListener[a][b]=new buttonListener();
}
}
2、button类比较时应用equals()方法,而不是==。
所以这个语句(if(e.getSource()==button[ymove][xmove]))是一直返回false的;
其实,完全没必要建立多监听实例,所有按钮可以共用同一个监听,在监听中判断它是哪个按钮触发的就可以了。
一个类最好只有一个Class,Map1类继承JFrame后可以继续implements MouseListener接口,
然后所有按钮 button[a][b].addMouseListener(this);然后在监听中判断属于哪个按钮,在进行相应的处理。

0
Wanbolin
Wanbolin 谢谢了,的确是没有为监听器new实例,但是e.getSource==button[ymove][xmove]是可以运行的,我试了您提供的equals(),也是可以运行的,然后也把代码改成一个类了,谢谢啦
8 个月之前 回复

鼠标点击的是按钮,所以内部类不应该实现MouseListener,而是ActionListener,应该给按钮添加按钮监听器(ActionLister),而不是鼠标监听器(MouseListener)
求给分^^

2
Wanbolin
Wanbolin 谢谢您,已经解决了,是创建监听器的时候没有初始化。我试了您建议的ActionListener,是好使的,但是Mouse Listener也是好使的,最后谢谢啦
8 个月之前 回复

public class Map1 extends JFrame 改为public class Map1 extends JFrame implements ActionListener(){}看看,没有足够时间看,如果还不行的话就有可能你是没有添加监听或是监听的出错,添加监听可以类似为这样a.addActionListener(this);

1
Wanbolin
Wanbolin 谢谢您,已经解决了,是因为创建监听器的时候没有初始化
8 个月之前 回复

btListener只是建了个数组,数组的对象初始化,这样改一下应该就好了:


for(int a=0;a<13;a++)


    {
       for(int b=0;b<9;b++)

       {

        btListener[a][b]=new buttonListener();//这是增加的代码**

         panel.add(button[a][b]);

         button[a][b].addMouseListener(btListener[a][b]);//给监听器加到按钮

         //System.out.printf("21");

       }

    }

1
Wanbolin
Wanbolin 谢谢您,已经解决了,确实是因为创建监听器的时候没有初始化,谢谢啦
8 个月之前 回复

鼠标点击的是按钮,所以内部类不应该实现MouseListener,而是ActionListener,应该给按钮添加按钮监听器(ActionLister),而不是鼠标监听器(MouseListener)

1
Wanbolin
Wanbolin 谢谢了,已经解决了,是因为创建监听器没有初始化,我试了ActionListener的确可以运行,但是MouseListener也是可以运行的,谢谢啦
8 个月之前 回复

鼠标点击的是按钮,所以内部类不应该实现MouseListener,而是ActionListener,应该给按钮添加按钮监听器,而不是鼠标监听器

1
Wanbolin
Wanbolin 谢谢您,已经解决了,是创建监听器的时候没有初始化。我试了您建议的ActionListener,是好使的,但是Mouse Listener也是好使的,最后谢谢啦
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java鼠标监听器
1.按钮监听事件  JPanel jp =(JPanel) getContentPane();   jp.setLayout(new FlowLayout());   JButton jb = new JButton("点我");   jp.add(jb);   jb.addActionListener(new ActionListener() { @Override p
为按钮添加鼠标的事件监听器
实现功能为: 使用鼠标的不同按键点击按钮触发不同的事件。 使用到的知识点: 匿名内部类、创建窗体、为窗体添加按钮、添加事件监听器、使用默认布局管理器。 注意: 监听器的种类多样,要根据具体需要使用,可以查询API import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test
java鼠标监听器的总结
[size=large]鼠标监听器的总结 鼠标监听器是新学的一个监听器,与动作监听器不同,动作监听器监听的是某一动作或者行为,而鼠标监听器监听的是某一区域内鼠标的各种活动,可以用来制作画图板。动作监听器是直接加到所需监控的按钮上的,与动作监听器不同,鼠标监听器需要获得某一区域的权限(获得画布)才可以对此区域进行修改,这个修改不是覆盖,而是直接修改,都是在同一平面上进行的。在做完窗体后:[/siz...
java鼠标监听器画图+点击X关闭窗口
package awt; import java.awt.*; import java.util.*; import java.awt.event.*; public class MouseFrame extends Frame{ ArrayList Poi = new ArrayList();//将所有的圆点装起来 MouseFrame (String str){ super(str);
鼠标,键盘监听器(Java)
鼠标package jyh;import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;import javax.swing.*; public class MouseEventDemo extends JFra
java之事件监听(三)鼠标监听
package 第一版; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMot
五子棋监听器实现
五子棋的监听器实现 1.下棋的实现 我们玩五子棋最基本的实现的功能就是你往棋盘上面点一下,就会在相应的地方下一个棋子。我们想要实现这个功能就一定要给这个画板提供一个鼠标监听器,所以我们的五子棋监听器就要继承鼠标监听器。我们之前也写过有关鼠标监听器的,这里就不再赘述。当鼠标点击一个点的时候就获取到一个坐标的值,我们就在最近的交叉处画出一个圆,也就是我们的棋子。我们也就直接可以在释放鼠标的函数中完成这...
Java Swing界面编程(25)---事件处理:鼠标事件及监听处理
如果想对一个鼠标的操作进行监听,如果鼠标按下、松开等,则可以使用MouseListener接口。 package com.beyole.util; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.
Java五子棋(监听器,重绘)一
懒惰的新手小白终于写了第二篇博客。五子棋是真的磨叽了很久很久。   整理一下思路: 1.五子棋的要素:棋盘,棋子,窗体,背景,按钮,面板 2.用到的要点:监听器,哈希表,构造函数,重绘,数组(一维,二维),接口类,流式布局 3.基本功能实现 先要有个界面才能开始游戏-&amp;gt;窗体 要有选择的娱乐模式-&amp;gt;按钮(开始,悔棋,认输...) 点击之后可以得到响应,即画出个点-&amp;gt;...
Java中GUI——JTable中鼠标监听的添加
//给table加上一个鼠标事件监听器对象         table.addMouseListener(new Java.awt.event.MouseAdapter(){              publicvoid mouseClicked(MouseEvent e) {//仅当鼠标单击时响应                 //得到选中的行列的索引值       
手把手教你实现Java监听器全局监控
http://www.csdn123.com/html/blogs/20130514/12650.htm 1.前段时间,闲来无聊,想做个像QQ截图一样的截图工具,在却在做的过程中发现java自带API中的监听器带有很大的局限性,java的鼠标监听器只有在鼠标在程序窗口之上时才会生效,而键盘监听器则更加局限,只有在当前窗口为焦点窗口时才会生效,这显然是不符合我们需要效果的,我们所需要的
Java给JLabel加监听器
JLabel 不像按钮,要添加鼠标事件的话 用鼠标事件监听:JLabel jl = new JLabel(); jl.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) { // 处理鼠标点击 } public void mouseEntered(MouseEvent e) {
java鼠标事件监听
addMouseListenerpublic void addMouseListener(MouseListener l)添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。如果侦听器 l 为 null,则不会抛出异常并且不执行动作。 接口 MouseListener 用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用 MouseMot
Java鼠标监听(单击、双击、滑轮)
鼠标事件要添加MouseListener,捕获MouseEvent。MouseListener里的几个事件的参数都是MouseEvent,MouseEvent提供了获得点击了哪个键的方法  --->  getButton() public void mouseClicked(MouseEvent arg0) { if(arg0.getButton() == MouseEvent.BUTTO
java学习:创建鼠标监听事件
java语言果然挺方便,鼠标监听事件,jdk本身提供了一个接口,我们来写接口提供的代码就可以了。 MouseListener listener = new MouseListener() { //Executed when the mouse is clicked public void mouseClicked(MouseEvent e) { } //
鼠标运动事件和鼠标事件适配器
组件的鼠标运动事件 table.addMouseMotionListener(new MouseMotionListener){ public void mouseMove(mouseEvent e){       dosomething(); } } 在增加鼠标事件监听器时,不需要用MouseListener() 因为用其需要重载所有方法,可以用MouseAdapter,只需要 重
java鼠标监听程序
在窗体中对鼠标进行监听,并进行读取鼠标的坐标。
Java之GUI鼠标监听事件MouseListener
实例:鼠标进入按钮放大,移出按钮缩小,双击退出程序 /** * MouseListener:鼠标监听事件 * 给窗口添加一个按钮, * @author Administrator */ public class MouseListenerDemo { public static void main(String[] args) { // TODO Auto-generate...
JAVA第二课——事件监听以及画板的制作
之前讲了java的第一课,也就是图形界面的开发,学习了组件的应用,但是还有一个特别的问题没有解决,那就是之前我只是实现了一个界面而已,但是实际操作中,只有一个界面是没有用的,因为我们还需要点击“登录”按钮的时候,弹出登录之后的界面,那么怎么实现这个工能呢,这就需要事件监听了。 那么首先介绍几个概念,事件、事件源、事件监听方法、事件接口。第一个包括了后面三个。 1.事件源: (1).有哪些内容
Java监听器的用法(一):内部类监听器
当在处理按钮等监听事件时,需要注册监听器,监听器的位置不同,角色就不同,访问的区域就不同。 内部类是在另一个类中声明的,包含内部类的类叫做外嵌类 内部类和外嵌类的关系: 1.内部类的外嵌类的成员变量在内部类中仍有效,内部类的方法也可以调用外嵌类的方法。即内部类可以访问外部类的变量和方法。 2.在内部类的类体中不可以申明类变量和类方法,外嵌类的类体重可以用内部类声明对象作为外嵌类的成员。 三
java实现鼠标和键盘动作后台监听
有的时候需要我们对鼠标和键盘的动作(鼠标的移动,键盘的点击)进行监听,比如按键记录,鼠标坐标记录等。 我们使用JNA来实现以上的操作  tips:JNA类库使用一个很小的本地类库sub 动态的调用本地代码。程序员只需要使用一个特定的java接口描述一下将要调用的本地代码的方法的结构和一些基本属性。这样就省了为了适配多个平台而大量的配置和编译代码。因为调用的都是JNA提供的公用jar 包
jtable的鼠标事件监听
今天折腾了这个事件监听了很久,重新定义jtable 继承mouselistener还是监听不到效果,最后发现这段代码很管用,直接在生成的jtable上添加mouseListenner类: //给table加上一个鼠标事件监听器对象         table.addMouseListener(new java.awt.event.MouseAdapter(){
Java监听鼠标事件
package com.han; import java.awt.Container; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; /** * 监听鼠标事件 * 可以看出,当双击鼠标时,第一次的点击会触发一次单击事件 * @author
监听器实现定时任务(java定时器)
java代码: import java.util.Date; import java.util.Timer; import java.util.TimerTask;import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContext
textField可以添加点击事件监听器
-
关于按钮监听和键盘监听冲突问题
package gui;//创建一个匿名类实现ActionListener接口,当按钮被点击时,actionPerformed方法就会被调用//增加按钮监听//增加键盘监听//键盘监听器: KeyListener//keyPressed 代表 键被按下//keyReleased 代表 键被弹起//keyTyped 代表 一个按下弹起的组合动作//KeyEvent.getKeyCode() 可以获取...
对于Java监听器的理解
监听器模式,包括三个重要的对象,即事件源、事件对象以及监听器对象。       事件源将在发生事件时向所有的注册的监听器发送事件对象,监听器对象使用事件对象中的信息来确定它们对事件的响应。        理解如下:事件源对象首先注册监听器对象,当触发事件源时事件源发送事件对象,eg:如果是按钮源则将按钮的动作事件对象发送给监听器对象,有监听器对象处理事件对象,其中事件对象封装或者说是包含了事件
Java事件监听器原理以及使用Spring的事件监听
事件监听包括必不可少的三个元素:事件、事件源和监听器。 事件:容易理解,点击一下鼠标是一个事件,更改某个类属性也可以抽象为一个事件。 事件源:发布事件的地方,也就是事件产生的地方。 监听器:定义事件发生后要采取的操作。 1,接下来举例说明Java如何实现监听模式 事件: package com.wxy.popcorn.eventlistener.model; import jav
JAVA 监听器不能与所监听的对象在同一个线程内
监听器不能与所监听的对象在同一个线程内,否则监听不了
【Java】在JTable中设置鼠标监听器,点击操作对应数据
最终效果 鼠标点击JTable中数据,修改相应的信息 确定点击的行和列 package com.dao; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JTable; public class TableMethod extends Bas
Java Swing 键盘监听鼠标移动监听
实现监听接口 鼠标移动要实现MouseMotionListener 如果实现MouseListener就是监听鼠标的点击释放和进入离开 一定要add listener 不然没有监听的对象,就不会有监听事件发生!
关于监听器连接常见的问题及分析
关于ORACLE监听器连接常见的问题及分析
过滤器监听器面试题都在这里
以下我是归纳的过滤器监听器知识点图: 图上的知识点都可以在我其他的文章内找到相应内容。 如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章的同学,可以关注微信公众号:Java3y 监听器常见面试题 监听器有哪些作用和用法? 监听器有哪些作用和用法? Java Web开发中的监听器(listener)就是application、session、re...
java匿名类监听器
监听器类是特意为创建一个GUI组件而设计的监听器对象.监听器类是不被其他应用程序所共享的.正确的做法是将它作为一个内部类定义在框架类中. 可以使用匿名内部类简化内部类监听器.匿名内部类是没有名字的内部类. 例如      public ControlCircle(){           jbtEnlage.addActionListener(                new En
Java——事件处理机制监听者基础(三)鼠标监听MouseListener
介绍:MouseListener是监听鼠标信息的接口。如何设置监听:对监听者添加MouseListener接口,实现其所有方法,重写需要用到的方法对事件进行处理,最后对事件源注册监听。代码实现:确定事件类型 —&amp;gt; 实现该类型接口 —&amp;gt; 事件处理方法(重写接口方法)—&amp;gt; 事件源注册监听(事件源添加监听者)写一个程序,以在面板上按下鼠标的地方为起点,鼠标松开的地方为终点,画一个矩形。...
JAVA 关于按钮左键右键的监听器的使用 同时 可取消监听器
java代码介绍按钮监听器的使用,使用简单的例子,详细生动的展示了监听器的使用。
鼠标动作监听类MouseListener
import java.awt.event.ActionEvent ; import java.awt.event.ActionListener ; import java.awt.event.WindowListener ; import java.awt.event.WindowAdapter ; import java.awt.event.WindowEvent ; import java.
简单的java图片绘制和鼠标事件监听
package com.vekaco.plane; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; impor
Java学习自我总结——监听鼠标双击事件
今天在学习的过程中突然发现,在鼠标操作的监听器中,没有提供鼠标双击的监听器,而双击是很常用的一种操作。话不多说,直接看实现监听鼠标单击/双击的事件的监听器。
为自己的button添加一个监听器
1.匿名内部类的方式  button = (Button) findViewById(R.id.button);        button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // 加入逻辑 }     });     } }
文章热词 Java 双目视觉问题 特征点问题 相机标定问题 最优化问题
相关热词 c++ 关于unique的问题 java与c++读写文件的效率问题 c++ java 多重继承 菱形问题 关于python培训班 关于区块链的课程