action对按钮事件的混淆

时间:2015-02-25 22:16:55

标签: java swing actionlistener

我正在尝试在java中制作游戏,当按下按钮时我希望它改变图标以指示该按钮已被选中,然后当再次单击它时我想将其更改为其原始图标以显示它已被取消选择。

public void actionPerformed(ActionEvent e)
{
    if(e.getSource() == b[7][4] && selected == false)
    {
        b[7][4].setIcon(selected);
        selected = true;
    }

    if(e.getSource() == b[7][4] && selected == true)
    {
        b[7][4].setIcon(king);
        selected = false;           
    }
}

此代码目前按照我的意愿执行,但它同时运行,因此更改图标,然后立即将其更改回原始图标。如何点击将其更改为selected,然后第二次点击将其更改为king图标?

3 个答案:

答案 0 :(得分:5)

在下一个else之前使用if链接它们:

public void actionPerformed(ActionEvent e)
{
    if(e.getSource() == b[7][4] && selected == false)
    {
        b[7][4].setIcon(selected);
        selected = true;
    }
    else if(e.getSource() == b[7][4] && selected == true)
    {
        b[7][4].setIcon(king);
        selected = false;           
    }
}

这样,只有在第一个条件的计算结果为if时,才会检查第二个false子句。

答案 1 :(得分:2)

更简单的解决方案:使用JToggleButton并通过setIcon(...)setSelectedIcon(...)设置其Icon及其selectedIcon。

答案 2 :(得分:2)

考虑将代码压缩为一个setIcon()调用:

public void actionPerformed(ActionEvent e)
{
    if (e.getSource() == b[7][4]) {
        b[7][4].setIcon(selected ? king : defau1t);
        selected = !selected;
    }
}