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

Why is my boolean variable messed up?

我声明了我的布尔变量,但它似乎与我想要它做的相反。当我点击一个按钮时,当布尔变量为假时,它会自行删除。我该如何修复它,以便每当我单击 'delete' 按钮时,都会将 '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");
            }
        } 
    }

}

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

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

下一行是你的错误:

if (deleteNow = true)

需要

 if (deleteNow == true)

让它发挥作用。

您不是检查相等性,而是在您的情况下进行赋值,这将始终导致条件为真,因此请删除您的按钮。

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

从您的代码来看,真正的问题是您有两个事件侦听器在同一状态下运行。那么结果将取决于第一个事件侦听器是否在另一个事件侦听器有机会读取其值之前更改了按钮的状态。似乎这里的简单逻辑是按照添加的顺序调用事件侦听器。一个快速修复方法就是简单地颠倒事件监听器的顺序。

更好的方法是不必在同一状态下运行不同的事件侦听器。如果它们真的要串联运行,请将它们合并为一个——就像它们在这里所做的那样。然后您可以更轻松地控制操作流程。