使用 beans 绑定更新 JLabel 时出现问题
我正在尝试使用 netbeans IDE 来使用 beans 绑定。我想更新标签中的文本。 这是我创建的 bean。
public class SystemTimeBean implements Serializable {
public static final String PROP_SAMPLE_PROPERTY = "systemTime";
private String systemTime;
private PropertyChangeSupport propertySupport;
public SystemTimeBean() {
propertySupport = new PropertyChangeSupport(this);
}
public String getSystemTime() {
return systemTime;
}
public void setSystemTime(String value) {
String oldValue = systemTime;
systemTime = value;
propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, systemTime);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertySupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertySupport.removePropertyChangeListener(listener);
}
}
public class SystemTimeModel {
private long systemTime;
private SystemTimeBean bean;
public SystemTimeModel() {
bean = new SystemTimeBean();
}
public long getSystemTime() {
return systemTime;
}
public void setSystemTime(long systemTime) {
this.systemTime = systemTime;
bean.setSystemTime(Long.toString(systemTime));
}
}
中的绑定代码
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
systemTimeBean1 = new beansbindingapp.SystemTimeBean();
lblBinding = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, systemTimeBean1, org.jdesktop.beansbinding.ELProperty.create("${systemTime}"), lblBinding, org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
bindingGroup.bind();
我的 JFrame和 Main.class
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new SystemTimeFrame();
frame.setVisible(true);
}
});
SystemTimeModel time = new SystemTimeModel();
for(int i = 0; i < 10; i++) {
time.setSystemTime(System.currentTimeMillis());
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
标签未更新。 感谢您的帮助。
i m trying to use beans binding using netbeans IDE. I would like to update the text in a label.
Here is the bean that i created.
public class SystemTimeBean implements Serializable {
public static final String PROP_SAMPLE_PROPERTY = "systemTime";
private String systemTime;
private PropertyChangeSupport propertySupport;
public SystemTimeBean() {
propertySupport = new PropertyChangeSupport(this);
}
public String getSystemTime() {
return systemTime;
}
public void setSystemTime(String value) {
String oldValue = systemTime;
systemTime = value;
propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, systemTime);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertySupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertySupport.removePropertyChangeListener(listener);
}
}
public class SystemTimeModel {
private long systemTime;
private SystemTimeBean bean;
public SystemTimeModel() {
bean = new SystemTimeBean();
}
public long getSystemTime() {
return systemTime;
}
public void setSystemTime(long systemTime) {
this.systemTime = systemTime;
bean.setSystemTime(Long.toString(systemTime));
}
}
The code for binding in my JFrame
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
systemTimeBean1 = new beansbindingapp.SystemTimeBean();
lblBinding = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, systemTimeBean1, org.jdesktop.beansbinding.ELProperty.create("${systemTime}"), lblBinding, org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
bindingGroup.bind();
and the Main.class
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new SystemTimeFrame();
frame.setVisible(true);
}
});
SystemTimeModel time = new SystemTimeModel();
for(int i = 0; i < 10; i++) {
time.setSystemTime(System.currentTimeMillis());
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
The label is not updated.
Thanks for help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我最近一直在使用 bean 绑定,刚刚解决了代码中的读/写问题。我稍微修改了您的 Main 代码,通过更改 SystemTimeBean 来更新时间。我相信您的代码的问题是您没有更新绑定对象。
}
I have been using bean bindings recently and just solved the read/write issue in my code. I modified your Main code a bit to make the time update by changing the SystemTimeBean. I believe that the issue with your code is that you are not updating the bound object.
}