Wanbolin 2018-05-16 15:12 采纳率: 33.3%
浏览 1322
已采纳

关于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)
      {

      }
   }
}

  • 写回答

6条回答 默认 最新

  • 水里的魚儿 2018-05-17 02:31
    关注

    本例中没有效果应该两处的问题:
    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);然后在监听中判断属于哪个按钮,在进行相应的处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥15 抖音看过的视频,缓存在哪个文件