2011-03-23 3 views
1

i m пытается использовать привязку бобов с использованием netbeans IDE. Я хотел бы обновить текст на ярлыке. Вот боб, который я создал.Проблема с обновлением JLabel с привязкой бобов

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)); 
} 

}

Код для связывания в моей 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(); 

и 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); 
     } 
    } 
} 

}

Метка не обновляется. Спасибо за помощь.

ответ

1

Недавно я использовал привязки bean и просто решил проблему чтения/записи в своем коде. Я немного изменил свой основной код, чтобы обновить время, изменив SystemTimeBean. Я считаю, что проблема с вашим кодом заключается в том, что вы не обновляете связанный объект.

public class Main { 

private JFrame _frame; 
private SystemTimeModel _systemTimeModel = new SystemTimeModel(); 

public static void main(final String[] args) { 
    final Main systemTimeFrame = new Main(); 

    systemTimeFrame._frame.setVisible(true); 

    systemTimeFrame.doStuff(); 
} 

public Main() { 
    initialize(); 
} 

public void doStuff() { 
    for(int i = 0; i < 10; i++) { 
     _systemTimeModel.setSystemTime(System.currentTimeMillis()); 
     try { 
      Thread.sleep(1000); 
     } 
     catch (InterruptedException ex) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

private void initialize() { 
    _frame = new JFrame(); 
    _frame.setBounds(100, 100, 450, 300); 
    _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JLabel lblBinding = new JLabel(""); 
    _frame.add(lblBinding); 

    BindingGroup bindingGroup = new BindingGroup(); 
    BeanProperty< SystemTimeBean, String > sourceProperty = BeanProperty.create("systemTime"); 
    BeanProperty< JLabel, String > targetProperty = BeanProperty.create("text"); 
    AutoBinding< SystemTimeBean, String, JLabel, String > binding = 
     Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, _systemTimeModel.getBean(), sourceProperty, lblBinding, targetProperty); 
    binding.bind(); 
    bindingGroup.addBinding(binding); 
} 

}

Смежные вопросы