2011-12-01 13 views
0

我試圖設置一個類似於帶有默認CRUD數據庫模板的保存按鈕的按鈕(其中按鈕只有在變量爲true時才變爲活動狀態)。我已經看過了保存按鈕的代碼,並制定了,我需要:在netbeans的JButton上使用啓用的屬性

  1. 一個變量,它與(saveNeeded在他們的情況下)鏈接
  2. 的操作來運行

我有在另一個按鈕上重新創建了這兩個按鈕,但它從不接受啓用。我有2個其他按鈕的打印語句用於設置變量我有我的按鈕鏈接到true和false,所以我可以看到值正在改變。 我缺少一些關鍵步驟嗎?這似乎應該是相當直接的。

另一件事,如果我在我的構造函數中將該變量更改爲true並運行該應用程序,則啓用該按鈕並將其禁用,以使該部分工作,而不是更改。

,我已經花了幾個小時的努力,不能弄明白

感謝

回答

1

變量或任何幫助,將不勝感激「屬性」必須或許使用PropertyChangeSupport對象中莫名其妙地看着,並允許其他對象向其添加PropertyChangeListener,使其成爲「​​」。 Swing應用程序有一個特殊版本,用於處理Swing事件線程SwingPropertyChangeSupport,並且您可能希望使用它。

編輯
你問

感謝您的答覆,我認爲會是什麼中的firePropertyChange( 「saveNeeded」,saveNeeded,saveNeeded!);正在做,但這是做什麼?這是否只是通知程序,或者我需要在某處找到句柄?這是基於預先生成的代碼,所以我不知道它是否在後臺添加了一些東西。

保存監視變量的類將需要私有SwingPropertyChangeSupport字段。你想給它一個公共addPropertyChangeListener方法,你會允許其他類聽其綁定屬性,像這樣(如果該屬性是一個String):

import java.beans.PropertyChangeEvent; 
import java.beans.PropertyChangeListener; 
import javax.swing.event.SwingPropertyChangeSupport; 

public class Foo { 
    public static final String MY_BOUND_PROPERTY = "My Bound Property"; 
    private SwingPropertyChangeSupport spcSupport = new SwingPropertyChangeSupport(
     this); 
    private String myBoundProperty; 

    public void addPropertyChangeListener(PropertyChangeListener listener) { 
     spcSupport.addPropertyChangeListener(listener); 
    } 

    public void removePropertyChangeListener(PropertyChangeListener listener) { 
     spcSupport.removePropertyChangeListener(listener); 
    } 

    public String getMyBoundProperty() { 
     return myBoundProperty; 
    } 

    public void setMyBoundProperty(String myBoundProperty) { 
     Object oldValue = this.myBoundProperty; 
     Object newValue = myBoundProperty; 

     this.myBoundProperty = myBoundProperty; 
     PropertyChangeEvent pcEvent = new PropertyChangeEvent(this, 
      MY_BOUND_PROPERTY, oldValue, newValue); 
     spcSupport.firePropertyChange(pcEvent); 
    } 

} 

那麼任何想聽聽類更改只需將PropertyChangeListener添加到此類的對象中,並根據需要對其進行響應。

+0

感謝您的回覆,我認爲這將是什麼'firePropertyChange(「saveNeeded」,!saveNeeded,saveNeeded);'在做,但是這樣做?這是否只是通知程序,或者我需要在某處找到句柄?這是基於預先生成的代碼,所以我不知道它是否在後臺添加了一些東西。感謝 – Darc

+0

@Darc:請參閱上面的編輯 –

+0

感謝您的幫助,我仍然不能看到生成的代碼如何工作,但我不在乎,我寧願寫代碼我自己,所以我知道它是如何工作的。感謝您的幫助 – Darc