我对编程很新,我正在尝试制作扫雷GUI。游戏工作完美正确点击JToggleButton在按钮上显示“B”炸弹,但当我用mouselistener中的setIcon()替换setText()时,它会在左右点击时显示图标。我在setText()时没有遇到这个问题。
public void mousePressed(MouseEvent e){
if(e.isMetaDown())
if(btnPresses == 0)
{
startTime = System.currentTimeMillis();
btnPresses++;
}
//if(btn[y][x].getText().equals("B"))
if(btn[y][x].getIcon()==flag)
{
//btn[y][x].setText("");
btn[y][x].setIcon(null);
if(bombs[y][x]!=BOMB)
markers++;
}
else
{
//btn[y][x].setText("B");
btn[y][x].setIcon(flag);
if(bombs[y][x]==BOMB)
markers++;
else
markers--;
}
我在actionlistener中添加了一个btn [y] [x] .setIcon(null),这使得标志图标在左键单击时只会短暂显示,但我宁愿它根本不显示。
答案 0 :(得分:2)
您需要区分鼠标左键单击,MouseEvent.BUTTON3和鼠标右键单击MouseEvent.BUTTON3,然后相应地执行操作。例如,当我做这样的事情时,我在我的模型中设置了“flag”布尔值(使用MVC):
@Override
public void mousePressed(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
model.upDateButtonFlag();
}
}
MouseListener只能用于设置或取消设置标志。否则,您应该让JButton通过其ActionListener响应左键单击。
答案 1 :(得分:0)
将System.err.println("" + System.currentTimeMillis() + " " + e);
添加到处理程序的开头。我强烈怀疑你的代码被调用次数比你想象的多 - 因为单击就可以生成多个事件。一旦你知道发生了什么,就应该很容易解决。