所以我正在尝试实现一个猜测和检查游戏,其中显示了英文字母的字母,然后每次点击一个字母,如果它不是指定单词的一部分就会消失。 (我猜你可以称之为刽子手,但会有更多的东西)。然后一旦游戏丢失,再次调用setLetters并将所有字母重置回屏幕。 (这是我在这里没有解决的另一个问题,并且知道属于更新和setLetters())
letters = new JLabel[26];
for (int i = 0; i < 26; i++) {
int ch = 'A' + i;
letters[i] = new JLabel("" + (char) ch);
panel.add(letters[i],c);
}
ctrl.setLetters(letters);
在ctrl类中有
public void setLetters(JLabel[] letters2) {
letterLabel = letters2;
for (int i = 0; i < letters2.length; i++) {
letterLabel[i].addMouseListener(this);
/* i'm assuming this issue is here with adding tons of mouselisteners to the label each time it resets, but i'm not sure how to fix it */
}
}
@Override
public void mousePressed(MouseEvent e) {
for (int i = 0; i < 26; i++) {
if (e.getSource() == letterLabel[i]) {
if (!game.letterAvailable((letterLabel[i].getText().charAt(0)))){
letterLabel[i].setText(" ");
}
else {
game.makeGuess((letterLabel[i].getText().charAt(0)));
}
}
}
update();
}
public void update() {
if (letterLabel != null) {
setLetters(letterLabel);
}
if (panel != null) { // redraw (not important for this error)
panel.repaint();
};
}
我得到的错误是指数式的:
java.awt.AWTEventMulticaster.mouseExited(未知来源)或 java.awt.AWTEventMulticaster.mouseExited(未知来源)
取决于单击字母的方式(尚未找出原因)
答案 0 :(得分:0)
如HoverCraftFullOfEeels的this answer所述
不要将相同的侦听器添加到其侦听器代码中的组件。
在mousePressed
你正在调用update()
,调用setLetter
,这会为该组件添加一个监听器。
看起来你将不得不做一些重构。如果没有完全理解你想要完成的任务,就无法真正帮助你。