代码如下:我输入编号,点击查询后,能从数据库中得到数据并显示成table。但第二次输入另一个编号,点查询时,table不会更新。
final Composite composite_3 = new Composite(tabFolder, SWT.NONE);
composite_3.setBackground(SWTResourceManager.getColor(192, 192, 192));
tabItem_5.setControl(composite_3); text = new Text(composite_3, SWT.BORDER);
text.setBounds(245, 118, 211, 37); final Label label_4 = new Label(composite_3, SWT.NONE);
label_4.setBackground(SWTResourceManager.getColor(192, 192, 192));
label_4.setFont(SWTResourceManager.getFont("", 11, SWT.NONE));
label_4.setAlignment(SWT.CENTER);
label_4.setText("请输入需要查询的志愿者编号:");
label_4.setBounds(22, 129, 217, 37); final Button button_3 = new Button(composite_3, SWT.NONE);
button_3.setFont(SWTResourceManager.getFont("", 11, SWT.NONE));
button_3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
try {

String id=text.getText();
id= id.replaceAll(" ","");

if(id!=null &&id!=""){
DB db=new DB();
String name = db.getUserValue(id,"name");
String hours=db.getUserValue(id,"hours");
String gender=db.getUserValue(id,"gender");
String contacts=db.getUserValue(id,"contacts");
String college=db.getUserValue(id,"college");
table = new Table(composite_3, SWT.BORDER);
table.setLinesVisible(true);
table.setHeaderVisible(true);
table.setBounds(14, 202, 753, 166);
final TableColumn newColumnTableColumn = new TableColumn(table, SWT.CENTER);
newColumnTableColumn.setAlignment(SWT.CENTER);
newColumnTableColumn.setWidth(80);
newColumnTableColumn.setText("编号"); final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
newColumnTableColumn_1.setAlignment(SWT.CENTER);
newColumnTableColumn_1.setWidth(130);
newColumnTableColumn_1.setText("姓名"); final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
newColumnTableColumn_2.setAlignment(SWT.CENTER);
newColumnTableColumn_2.setWidth(129);
newColumnTableColumn_2.setText("服务时间(小时)"); final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE);
newColumnTableColumn_3.setAlignment(SWT.CENTER);
newColumnTableColumn_3.setWidth(79);
newColumnTableColumn_3.setText("性别"); final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE);
newColumnTableColumn_4.setAlignment(SWT.CENTER);
newColumnTableColumn_4.setWidth(146);
newColumnTableColumn_4.setText("联系方式"); final TableColumn newColumnTableColumn_5 = new TableColumn(table, SWT.NONE);
newColumnTableColumn_5.setAlignment(SWT.CENTER);
newColumnTableColumn_5.setWidth(182);
newColumnTableColumn_5.setText("学院"); final TableItem tableItem = new TableItem(table, SWT.BORDER);
tableItem.setText(5, college==null?"无对应数据":college);
tableItem.setText(4, contacts==null?"无对应数据":contacts);
tableItem.setText(3, gender==null?"无对应数据":gender);
tableItem.setText(2, hours==null?"无对应数据":hours);
tableItem.setText(1, name==null?"无对应数据":name);
tableItem.setText(0,id);

}
else{
MessageDialog.openError(shell,"查询失败","请输入需要查询的志愿者编号");
}

} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}



}
});
button_3.setText("查询");
button_3.setBounds(470, 118, 120, 37);

解决方案 »

  1.   

    不是。因为我两次输入了不同的编号,点击查询,按理说事件触发后就会重新生成一个table,table里放数据的item也会变。
      

  2.   

    ok,自己解决了。把table的定义放到事件外边,包括tableItem的声明以及初始化。在触发的事件里,再来tableItem.setText()就行。
    如果tableItem还是放在事件里,每查一次,table中就会多一行。
    虽然解决了,但还是不知道为什么。为什么写jsp时,就可以这样呢,jsp中的table会自动刷新,重新生成。
      

  3.   

    jsp的页面是每次都重新生成的
    所以你能看到变化而SWT写的客户端,创建的客户端是一直存在的
    你在事件里面生成新的table,八成是在第一次生成的控件的背后
    你可以把上面的坐标,颜色等改成动态的,
    让每次生成的table都错开,看看效果