我一直在使用java和c#編寫很長時間,並且 我在Java中通過模仿.net編碼了自己的propertyChangeListeners,並且在我的方法之下。
對於這個對象的序列化,我編碼了針對序列化器的特殊濾波器, XStream,java原生對象序列化
如果您需要DIY,您可以使用我的方式,或者您也可以通過Oracle的基礎架構進行升級,因爲@Pau Kiat Wee將其鏈接到他/她的答案中。
有秋千數據看的JGoodies更多的已建成的東西http://www.jgoodies.com/download/presentations/binding.pdf http://www.jgoodies.com/downloads/demos/
這裏是我的實現結合,
你的業務對象從這個抽象類進行擴展。
當然,如果你已經從其他東西延伸,這不是 你的一個這個選項不可能爲你工作。
大多數可能你無意序列propertyChangeListeners
註冊者和一些數據發送到某處與它(遠程服務,不知道你的用戶界面相關的類,這將是頭痛)。所以,我們跳過序列通過這種方式。
請注意private void writeObject(java.io.ObjectOutputStream out)
和private void readObject(java.io.ObjectInputStream in)
簽名。我故意將它們留空,並且這些重要的方法簽名被Java Object Serialization
考慮。
這是我們的PropertyChangeEvent模仿接口,我們將使用觀察者模式來通知我們的註冊人。
public interface IPropertyChangedListener extends EventListener {
public void onPropertyChanged(Object source,String propertyName,Object oldValue,Object newValue);
}
這是我們DataBusinessObject
public abstract class DataObjectBase implements Serializable {
private List<IPropertyChangedListener> propertyChangeListeners=new ArrayList<IPropertyChangedListener>();
public void addOnPropertyChangedListener(IPropertyChangedListener propertyChangeListener)
{
ensureRegisterListCreated();
propertyChangeListeners.add(propertyChangeListener);
}
public void removeOnPropertyChangedListener(IPropertyChangedListener propertyChangeListener)
{
ensureRegisterListCreated();
propertyChangeListeners.remove(propertyChangeListener);
}
public DataObjectBase()
{
ensureRegisterListCreated();
}
public void ensureRegisterListCreated()
{
if(propertyChangeListeners==null)
propertyChangeListeners=new ArrayList<IPropertyChangedListener>();
}
protected void onPropertyChanged(Object source,String propertyName,Object oldValue,Object newValue)
{
if(propertyChangeListeners.size()<=0)
return;
for (IPropertyChangedListener listener : propertyChangeListeners) {
listener.onPropertyChanged(source, propertyName, oldValue, newValue);
}
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
{
}
private void readObject(java.io.ObjectInputStream in)
throws IOException {
}
}
現在的基礎上,讓使用它
dataObject.addOnPropertyChangedListener(new IPropertyChangedListener() {
@Override
public void onPropertyChanged(Object source, String propertyName,
Object oldValue, Object newValue) {
System.out.println(String.format("%s %s %s",propertyName,oldValue,newValue));
//TODO:Fire your UI change now !!!
}
});
以下是你需要在你的dataObject時做什麼
public class dataObject extends BaseDataObject
{
private String editable;
public String getEditable() {
return editable;
}
public void setEditable(String isEditable) {
String oldValue=this.editable;
this.editable = isEditable;
onPropertyChanged(this,"Editable",oldValue,isEditable);
}
}
如果你不想按照我的方式,或者你可以'由於某種原因。你應該遵循JGoodies,這看起來是最好的一個。 在演示中下載JNLP文件,您將看到DataBinding部分。點擊放置在右側的箭頭時有代碼段。祝你好運! http://www.jgoodies.com/downloads/demos/
,請與您的問題(S)是/是約???,請張貼[SSCCE(http://sscce.org/)用綁定/數據綁定來展示你的問題 – mKorbel 2012-03-28 12:59:29
我確定了我在上面的列表中做了什麼。並非每個問題都需要一個SSCCE,特別是像這樣的問題,而不是詢問代碼問題。我問是否可以用java進行數據綁定,因爲在C#中,這是執行GUI工作的標準方式。我還沒有在google上找到任何正式的Sun贊同的數據綁定信息,第一頁谷歌結果我得到'Java數據綁定'包含像'java數據綁定api沒有準備好黃金時間'和'豆綁定:Java數據綁定解決方案與一個嚴重的問題' – 2012-03-28 13:10:07
那麼你的答案可能是波紋管或JSR296 – mKorbel 2012-03-28 13:15:21