【问题标题】:mouse listener only one instance works鼠标监听器只有一个实例有效
【发布时间】:2012-08-22 10:46:57
【问题描述】:

所以我通过以下方式将鼠标侦听器设置为 java 组件:

int[] monsters = new int[12];
        monsters[0] = MonsterSelector.BL_BLUE_BUFF;
        monsters[1] = MonsterSelector.BL_RED_BUFF;
        monsters[2] = MonsterSelector.BL_WOLVES;
        monsters[3] = MonsterSelector.BL_WRAITHS;
        monsters[4] = MonsterSelector.BL_GOLEMS;
        monsters[5] = MonsterSelector.BARON;
        monsters[6] = MonsterSelector.PU_BLUE_BUFF;
        monsters[7] = MonsterSelector.PU_RED_BUFF;
        monsters[8] = MonsterSelector.PU_WOLVES;
        monsters[9] = MonsterSelector.PU_WRAITHS;
        monsters[10] = MonsterSelector.PU_GOLEMS;
        monsters[11] = MonsterSelector.DRAGON;    
for(int monster = 1; monster < MonsterSelector.LAST+1; monster++){
        final int currentMonster = monsters[monster-1];
        ImageView iv = new ImageView(images.get(currentMonster), 50, 50);
        ivs.put(currentMonster, iv);
        ivs.get(currentMonster).addMouseListener(this); 
    }

我的班级中有以下鼠标监听器的实现:

    @Override
    public void mouseReleased(MouseEvent e) {

        Component src = (Component) e.getSource();

        Log.e(TAG, ""+src.getName());
    }

现在的问题是只有第一个 mouselistener 集真正给出了输出。其余的只是忽略。我究竟做错了什么?我不能在多个对象上设置相同的鼠标监听器?

【问题讨论】:

  • 如果将ivs.get(currentMonster).addMouseListener(this); 替换为iv.addMouseListener(this); 会有同样的行为吗?你确定currentMonster 在每个循环中都不同吗?
  • 您能否发布初始化images 列表的代码以及您的MonsterSelector 常量的声明位置?如果其中任何一个有问题,都可能导致此问题。
  • 你奇怪的循环习语是怎么回事:for(int monster = 1; monster &lt; MonsterSelector.LAST+1; monster++)?为什么不从 0 开始?
  • 这些布局怎么样??它们重叠吗?

标签: java swing components awt mouselistener


【解决方案1】:

我猜MonsterSelector.LAST 没有设置为应有的最高值。或者您正在初始化 MonsterSelector.BL_BLUE_BUFFMonsterSelector.BL_RED_BUFF 等以使其具有相同的 int 值?

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 2013-07-20
    • 2014-12-13
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多