私は長い間JavaとC#でコーディングしていました。 私は自分のpropertyChangeListenersをJavaでコーディングしました。
このオブジェクトのシリアル化では、シリアライザ、 XStream、Javaネイティブ・オブジェクトの直列化
DIYを使用する必要がある場合は、自分の方法を使用するか、@Pau Kiat WeeがOracleのインフラストラクチャを経由して進むこともできます。
はここより、すでにものにhttp://www.jgoodies.com/download/presentations/binding.pdf http://www.jgoodies.com/downloads/demos/
を建て
バインディングSwingのデータのためのルックなJGoodiesをお持ちの
あなたのビジネス・オブジェクトは、この抽象クラスから拡張されます、私の実装です。
すでに何か他のものから拡張していると、これはあなたのためにこのオプション信じられない作品あなたの 1でない場合は、確かに。
ほとんどおそらくあなたはpropertyChangeListeners
登録をシリアル化し、それ(あなたのUIに依存するクラスを知らないと、これは頭痛の種になりますリモートサービス)。だから、我々はスキップされているシリアル化してどこかにいくつかのデータを送信するつもりはありませんこのようにして。
private void writeObject(java.io.ObjectOutputStream out)
とprivate void readObject(java.io.ObjectInputStream in)
署名を注意してください。私は意図的にそれらを空のままにして、これらの重要な メソッドシグネチャはJava Object Serialization
とみなされます。
これはPropertyChangeEventの模倣されたインターフェイスです。私たちはobserverパターンを使用して登録者に通知します。
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);
}
}
を行うために必要なものですあなたは私のやり方をしたくない、 t何らかの理由で。あなたはJGoodiesに従うべきです、これはすべての中で最高のものです。 デモでJNLPファイルをダウンロードすると、DataBindingの部分が表示されます。右上にある矢印をクリックするとコードセクションが表示されます。がんばろう! http://www.jgoodies.com/downloads/demos/
してくださいとあなたの質問(複数可)/ ???に関するものですさのbetterbeansbinding.jarファイル、[SSCCE](http://sscce.org/)を投稿してくださいバインディング/データバインディングに関する問題を示す – mKorbel
私は上記のリストで何をしているのかを正確に説明しました。すべての質問がSSCCEを必要とするわけではありません。特に、このような問題は、コードの問題については問いません。私はデータバインディングがJavaで可能であるかどうか尋ねています。なぜならC#ではGUI作業を行う標準的な方法なのでです。私はすべての公式の太陽がGoogleのデータバインディングの情報をGoogleと最初のページのGoogleの結果を私は 'Javaのdatabinding'のようなものが含まれている見つかりませんでした 'Javaのdatabinding apiの準備ができていない'と '豆のバインド:Javaのデータバインディングソリューション深刻な問題が発生しました。 –
あなたの答えは蛇紋岩かJSR296 – mKorbel