2016-02-27 27 views
0

我声明了我的布尔变量,但它似乎与我想要的做相反。当我点击一个按钮时,它会自行删除,当布尔变量为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"); 
      } 
     } 
    } 

} 
+4

使用'=='来进行比较,而不是'='(它们赋值)。用布尔值可以删除整个'= true'部分。 – Olli

+2

由于上述原因投票结束为错字。 – Tunaki

+0

它是伪代码,不是有效的java。可能不是100%的副本,并且他在原文中写入==。 – oligofren

回答

1

if (deleteNow = true)需要被改变到if (deleteNow == true)

=操作者指定的值true到可变而==操作者只是执行比较。

+0

我认为这只是伪代码。 – oligofren

+0

谢谢,它工作! –

1

下面一行是你的错误:

if (deleteNow = true) 

必须

if (deleteNow == true) 

要使它发挥作用。

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

0

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

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

更好的方法是不必在不同的事件侦听器上运行相同的状态。如果他们真的打算一前一后合并成一个 - 就像他们在这里做的那样。然后,您可以更轻松地控制操作流程。

相关问题