2016-02-27 79 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將簡單地顛倒事件偵聽器的順序。

更好的方法是不必在不同的事件偵聽器上運行相同的狀態。如果他們真的打算一前一後合併成一個 - 就像他們在這裏做的那樣。然後,您可以更輕鬆地控制操作流程。