为什么我的布尔变量搞砸了?

时间:2016-02-27 23:46:27

标签: java swing jbutton

我声明了我的布尔变量,但它似乎与我想要它做的相反。当我点击一个按钮时,当布尔变量为false时,它会自行删除。我怎么能修复它,这样每当我点击'删除'按钮将'deleteNow'变量变为true?因为看起来deleteNow总是如此。以下是我的代码片段:

public class deleteButton
{
    public boolean deleteNow = false;

    class ClickListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
             deleteNow = true;
        }
    }
    ActionListener deleteButtonClicked = new ClickListener();
    deleteButton.addActionListener(deleteButtonClicked);

    class ClickListenerTwo implements ActionListener
    {
        public void actionPerformed(ActionEvent f)
        {
            if (deleteNow = true)
            {
                JButton buttonThatWasClicked = (JButton) e.getSource();
                Container parent = buttonThatWasClicked.getParent();
                parent.remove(buttonThatWasClicked);
                parent.revalidate();
                parent.repaint();
            }
            else
            { 
                System.out.println("The button wasn't deleted");
            }
        } 
    }

}

3 个答案:

答案 0 :(得分:1)

if (deleteNow = true)需要更改为if (deleteNow == true)

=运算符将值true分配给变量,而==运算符只执行比较。

答案 1 :(得分:1)

以下行是您的错误:

if (deleteNow = true)

需要

 if (deleteNow == true)

让它发挥作用。

不是检查是否相等,而是在你的情况下做一个赋值,这将总是导致条件为真,所以删除你的按钮。

答案 2 :(得分:0)

由于您的代码是伪代码且无效的java,我的猜测是@Darshan Mehta提到的错误不是真正的问题。

从您的代码中,真正的问题是您有两个事件侦听器在相同的状态下运行。然后,结果将取决于第一个事件侦听器是否在另一个有机会读取其值之前更改了按钮的状态。似乎这里的简单逻辑是在添加的顺序中调用事件侦听器。然后,quickfix将简单地颠倒事件侦听器的顺序。

更好的方法是不必在不同的事件监听器上运行相同的状态。如果它们真正意味着串联运行,那么将它们组合成一个 - 就像它们在这里一样。然后,您可以更轻松地控制操作流程。