一、动态展示数据
当对表格展示的数据进行删除和增加的时候,想实时进行表格数据更新显示。用到的方法是,首先将表格数据全部删掉,然后在读取数据库最新的数据显示到表格中。
可以将显示表格信息的代码封装成一个方法,当对当前表格进行插入和删除数据之后,调用之前封装的方法即可。
1.清空表格:
Table table = new Table(shell,SWT.NONE);
table.removeAll();
2.更新数据:
TableItem item = null;try {List<Map<String, Object>> list = dao.finds(); //dao.getDatas()为从数据库读取的数据for(Map<String,Object> m:list) {item = new TableItem(table,SWT.NONE);item.setText(new String[]{"数据1","数据2","数据3" });}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}
删除全部数据可以直接放在更新数据内。
二、案例
点击确认按钮之后,更新当前表格的值,都是模拟的数据。
显示数据代码:
private void showTableInfos() {table.removeAll(); //首先清空之前table里的数据。TableItem item = null;try {List<Map<String, Object>> list = students;for(Map<String,Object> m:list) {item = new TableItem(table,SWT.NONE);item.setText(new String[]{String.valueOf(m.get("id")),String.valueOf(m.get("name")), });}} catch (Exception e) {e.printStackTrace();} }
效果:
点击确认后,表格会更新:会将第一行的数据删除。只是模拟数据。实际上只需要再次读取更新后的数据就可了。
完整代码:
package ctest;import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;public class Test {protected Shell shell;private Table table;List<Map<String,Object>> students = null;/*** Launch the application.* @param args*/public static void main(String[] args) {try {Test window = new Test();window.open();} catch (Exception e) {e.printStackTrace();}}/*** Open the window.*/public void open() {Display display = Display.getDefault();createContents();shell.open();shell.layout();while (!shell.isDisposed()) {if (!display.readAndDispatch()) {display.sleep();}}}/*** Create contents of the window.*/protected void createContents() {shell = new Shell();shell.setSize(730, 630);shell.setText("SWT Application");table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);table.setBounds(195, 127, 206, 250);table.setHeaderVisible(true);table.setLinesVisible(true);TableColumn tblclmnNewColumn = new TableColumn(table, SWT.NONE);tblclmnNewColumn.setWidth(100);tblclmnNewColumn.setText("ID");TableColumn tblclmnNewColumn_1 = new TableColumn(table, SWT.NONE);tblclmnNewColumn_1.setWidth(100);tblclmnNewColumn_1.setText("Name");Button btnNewButton = new Button(shell, SWT.NONE);btnNewButton.addSelectionListener(new SelectionAdapter() {@Overridepublic void widgetSelected(SelectionEvent e) {students.remove(1); //只是用来模拟,实际只需要进行数据库删除再从数据库读取数据即可。showTableInfos();}});btnNewButton.setBounds(248, 404, 98, 30);btnNewButton.setText("确认");initDatas(); //模拟数据showTableInfos();}private void showTableInfos() {table.removeAll(); //首先清空之前table里的数据。TableItem item = null;try {List<Map<String, Object>> list = students;for(Map<String,Object> m:list) {item = new TableItem(table,SWT.NONE);item.setText(new String[]{String.valueOf(m.get("id")),String.valueOf(m.get("name")), });}} catch (Exception e) {e.printStackTrace();} }public void initDatas(){students = new ArrayList<>();Map<String,Object> s1 = new HashMap<>();s1.put("id","1001");s1.put("name","张三");Map<String,Object> s2 = new HashMap<>();s2.put("id","1002");s2.put("name","李四");Map<String,Object> s3 = new HashMap<>();s3.put("id","1003");s3.put("name","王五");students.add(s1);students.add(s2);students.add(s3);}}
三、删除选中表格行
如果遇到想删除表格中的某行数据,那么就需要通过table的事件监听获取选中该行的数据,然后将数据库里的这行数据删除,在更新数据即可