我正在尝试在 vaadin 中构建一个自定义组件。组件将在面板中有一个对象列表,我通过迭代我定义的 BeanItemContainer 手动获取它们。它基本上工作正常。但现在我想要一个添加按钮,每次单击它都会在列表中添加一个新元素。单击添加按钮时,将弹出一个包含一些字段和保存按钮的窗口。如果您单击窗口中的保存按钮,则新项目将被保存到数据库中。现在我可以创建一个新项目并将其保存到容器中。但是,我不知道如何更新或刷新 UI(列表),以便我的新对象将显示在列表。我应该添加一个重绘侦听器还是创建一个始终重绘列表面板或其他内容的线程?我该怎么做?感谢您的任何建议或提示。非常感谢您的帮助。以下是定义主组合和列表的代码。
public adminComposite(String listType,String objectType,Container source) {
this.container=source;
mainLayout = new VerticalLayout();
panel = buildPanel(source);
label =new Label(listType);
mainLayout.addComponent(label);
mainLayout.addComponent(panel);
setCompositionRoot(mainLayout);
}
private Panel buildPanel(Container c) {
Panel bpanel = new Panel();
bpanel.setHeight("400px");
// verticalLayout_1
panelLayout = (VerticalLayout)bpanel.getContent();
//iterate the container to fetch all Items
for(Iterator i=c.getItemIds().iterator();i.hasNext();){
//get current Item id,then get a item
Object id = i.next();
Item it =c.getItem(id);
// get data out of the item and fill them into the horizontalLayout
String caption =(String)(it.getItemProperty("caption").getValue());
String shortmsg = (String)(it.getItemProperty("sms").getValue());
Date time = (Date)(it.getItemProperty("timestamp").getValue());
int uid = (Integer)(it.getItemProperty("uid").getValue());
HorizontalLayout newline = buildHorizontalLayout(uid,caption,shortmsg,time);
newline.setSizeFull();
panelLayout.addComponent(newline);
}
add = new Button("Add New");
add.setDescription("Add a new object in the list and database");
bpanel.addComponent(add);
panelLayout.setSpacing(true);
panelLayout.setMargin(true);
return bpanel;
}