如果使用表格,则以下代码将:
public class Test extends JPanel{
private static final long serialVersionUID = 1L;
List objects = new ArrayList();
JTable billTable = new JTable();
JTableBinding jTableBinding;
private void init(){
objects = getNames();
}
private List getNames() {
// for better to bind, it should return list of details object
List list = new ArrayList();
return list;
}
private void initDataBindings(){
// for table binding
BeanProperty> uiBillBeanProperty = BeanProperty.create("objects");
jTableBinding = SwingBindings.createJTableBinding(UpdateStrategy.READ_WRITE, this, uiBillBeanProperty, billTable);
BeanProperty uiBillItemBeanProperty_3 = BeanProperty.create("quantity"); // property need to show
jTableBinding.addColumnBinding(uiBillItemBeanProperty_3).setColumnName("Qty");
// can create multiple property like this
}
}
优点:
>自动计算列表大小.无需更新,但是当您使用普通的jlabel时,您必须创建要显示的jlabel数量
但不知道大小
>您可以在类内部绑定属性(变量).
请注意,您还可以使用GlazedLists并根据您可以使用的条件进行绑定.
下面的代码用于Jlabel绑定,
public class Test extends JPanel{
private JLabel lblName;
Details details;
public Test(){
lblName = new JLabel();
add(lblName);
init();
initBinding();
}
private void init() {
String sql = "SELECT * FROM details limit 1";
try
{
con = Db.getConnection();
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
details = (Details) rs;
}catch(Exception e){
e.printStackTrace();
}
}
private void initBinding(){
BeanProperty beanProperty = BeanProperty.create("name");
BeanProperty jTextFieldBeanProperty = BeanProperty.create("text");
AutoBinding autoBinding_20 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, details, beanProperty, lblName, jTextFieldBeanProperty);
autoBinding_20.bind();
// can bind variables
}
}
class Details(){
private Stirng name;
private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
this);
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName,
listener);
}
protected void firePropertyChange(String propertyName, Object oldValue,
Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue,
newValue);
}
}