Tôi đã mã hóa bằng java và C# trong một thời gian dài và Tôi đã mã hóa propertyChangeListeners của riêng mình bằng Java bằng cách bắt chước .net và dưới đây là phương pháp của tôi.
Để tuần tự hóa đối tượng này, tôi đã mã hóa các bộ lọc đặc biệt chống lại bộ nối tiếp, tức là. XStream, java serialization object
Nếu bạn cần DIY bạn có thể sử dụng theo cách của mình hoặc bạn cũng có thể tiến bộ bằng cách đi qua cơ sở hạ tầng của Oracle như @Pau Kiat Wee liên kết nó trong câu trả lời của mình.
Có một cái nhìn JGoodies cho dữ liệu Swing ràng buộc cho đã hơn được xây dựng trong công cụ http://www.jgoodies.com/download/presentations/binding.pdf http://www.jgoodies.com/downloads/demos/
Đây là thực hiện của tôi,
đối tượng kinh doanh của bạn sẽ được mở rộng từ lớp trừu tượng này.
Chắc chắn, nếu bạn đã mở rộng từ một thứ khác và đây không phải là một trong các tùy chọn này có thể làm việc cho bạn.
thể Hầu hết các bạn không có ý định để serialize propertyChangeListeners
đăng ký và gửi một số dữ liệu đến một nơi nào với nó (một dịch vụ từ xa mà không biết UI lớp phụ thuộc của bạn và điều này sẽ là đau đầu) Vì vậy, chúng ta đang bỏ qua serialization Bằng cách này.
Xin lưu ý private void writeObject(java.io.ObjectOutputStream out)
và private void readObject(java.io.ObjectInputStream in)
chữ ký. Tôi cố ý để trống chúng và những chữ ký phương thức quan trọng này được xem xét bởi Java Object Serialization
.
Đây là giao diện bắt chước PropertyChangeEvent của chúng tôi, chúng tôi sẽ sử dụng mẫu quan sát để thông báo cho người đăng ký của chúng tôi.
public interface IPropertyChangedListener extends EventListener {
public void onPropertyChanged(Object source,String propertyName,Object oldValue,Object newValue);
}
Đây là cơ sở của chúng ta về 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 {
}
}
Bây giờ, cho phép sử dụng nó
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 !!!
}
});
Đây là những gì bạn cần làm trong DataObject bạn
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);
}
}
Nếu bạn không muốn làm theo cách của tôi, hoặc bạn có thể ' t vì lý do nào đó. Bạn nên làm theo JGoodies, điều này có vẻ tốt nhất của tất cả. Trong bản demo tải xuống tệp JNLP và bạn sẽ thấy phần DataBinding. Có phần mã khi bạn bấm vào một mũi tên được đặt lên bên phải. Chúc may mắn! http://www.jgoodies.com/downloads/demos/
xin và câu hỏi của bạn (s) là/khoảng ???, xin vui lòng gửi một [SSCCE] (http://sscce.org/) trình bày vấn đề của bạn (s) với Bindings/DataBinding – mKorbel
Tôi đặt ra chính xác những gì Im đang làm trong danh sách trên. Không phải mọi câu hỏi đều yêu cầu một SSCCE đặc biệt là một câu hỏi như thế mà không hỏi về vấn đề mã. Tôi hỏi nếu databinding là có thể với java bởi vì trong C# nó là cách tiêu chuẩn làm công việc GUI. Tôi đã không tìm thấy bất kỳ mặt trời chính thức xác nhận thông tin dữ liệu java trên google và kết quả google trang đầu tiên tôi nhận được cho 'Java databinding' chứa những thứ như 'api databinding java chưa sẵn sàng cho primetime' và 'Beans Binding: Một giải pháp liên kết dữ liệu Java với một vấn đề nghiêm trọng ' –
thì câu trả lời của bạn có thể là ống thổi hoặc JSR296 – mKorbel