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

Java 为什么我的布尔变量搞砸了?,java,swing,jbutton,Java,Swing,Jbutton,我声明了布尔变量,但它的作用似乎与我所希望的相反。当我点击一个按钮时,当布尔变量为false时,它会删除自身。我如何修复它,以便每当我单击“delete”(删除)按钮时,将“deleteNow”(删除现在)变量变为true?因为现在似乎永远都是真的。以下是我的代码片段: public class deleteButton { public boolean deleteNow = false; class ClickListener implements ActionListen

我声明了布尔变量,但它的作用似乎与我所希望的相反。当我点击一个按钮时,当布尔变量为false时,它会删除自身。我如何修复它,以便每当我单击“delete”(删除)按钮时,将“deleteNow”(删除现在)变量变为true?因为现在似乎永远都是真的。以下是我的代码片段:

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)


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

以下一行是您的错误:

if (deleteNow = true)
需要

 if (deleteNow == true)
让它工作


不检查是否相等,而是在案例中执行赋值,这将始终导致条件为真,因此请删除按钮。

以下一行是您的错误:

if (deleteNow = true)
需要

 if (deleteNow == true)
让它工作


不检查是否相等,而是在您的案例中执行赋值,这将始终导致条件为true,因此请删除您的按钮。

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

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


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

因为您的代码是伪代码和无效的java,我猜@Darshan Mehta提到的错误不是真正的问题

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


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

使用
=
进行比较,而不是
=
(分配值)。使用boolean,您可以删除整个
=true
部分。出于上述原因,投票以打字错误结束。这是伪代码,不是有效的java。可能不是100%的副本,他在原稿中写的==为什么是伪代码,这是我程序中的一个片段?@oligofren Check OP感谢对其中一个非主题答案的评论。。。它的排版。。。最好不要回答。回答前3分钟,一条评论起了作用,使用
=
进行比较,而不是
=
(分配值)。使用boolean,您可以删除整个
=true
部分。出于上述原因,投票以打字错误结束。这是伪代码,不是有效的java。可能不是100%的副本,他在原稿中写的==为什么是伪代码,这是我程序中的一个片段?@oligofren Check OP感谢对其中一个非主题答案的评论。。。它的排版。。。最好不要回答。在回答前3分钟,一条评论起了作用。我认为这只是伪代码。我认为这只是伪代码。