首页 > 解决方案 > MousePressed 获取错误的源 JPanel

问题描述

我正在编写一个简单的移动游戏,但我在使用 MouseListener 时遇到了一些问题。

这是游戏的视图

这是游戏的视图

单个面板定义在一个数组中,每个面板都有一个鼠标监听器

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

        labels[i] = new JLabel();
        labels[i].setPreferredSize(new Dimension(70, 70));

        if (numbers[i] != null) {
            labels[i].addMouseListener(mausListener);
            labels[i].setBorder(border);
            labels[i].setText(Integer.toString(numbers[i]));
            labels[i].setFont(font);
            labels[i].setBackground(Color.LIGHT_GRAY);
            labels[i].setHorizontalAlignment(SwingConstants.CENTER);
            labels[i].setOpaque(true);
        } else {
            labels[i].setText("null");
            labels[i].setVisible(false);
        }

        this.add(labels[i]);

    }

numbers 是一个填充了未排序数字的 Array:

[8, 2, 3, 1, 5, 4, 7, null, 6]

这是我的鼠标监听器:

 public void mousePressed(MouseEvent e) {

    clicked = (JLabel) e.getSource();

    if (clicked.getText() != "null") {

        System.out.println(clicked.getText());
        logik.move(Integer.parseInt(clicked.getText()));
        System.out.println(Arrays.toString(logik.getNummern()));
    }
}

move 函数检查单击的标签是否是可能的标签,并将其切换为空标签。这个函数是我们教授给的,所以不会出错。现在的问题是,当我单击后单击空标签时,例如“6”标签,mousePressed 函数将“6”标签作为源对象,尽管我按下了空标签。

我希望有人可以帮助我解决这个问题。

谢谢大家 :D

标签: mouseeventjlabel

解决方案


推荐阅读