江苏高端品牌网站建设,深圳有做网站的吗,iis网站服务器安全隐患分析,做网站设计工作的报告书前言
使用JFace创建表格还是比较方便的, 如果仅仅是创建空表格的话, 以下2步即可完成:
创建TableViewer对象, 指定样式, 比如是否支持多行选择, 有无边框, 是否支持滚动条等创建TableColumn对象: 包括列展示名称, 宽度和样式等, 最终绑定到table对象
实例
创建表格
//注意…前言
使用JFace创建表格还是比较方便的, 如果仅仅是创建空表格的话, 以下2步即可完成:
创建TableViewer对象, 指定样式, 比如是否支持多行选择, 有无边框, 是否支持滚动条等创建TableColumn对象: 包括列展示名称, 宽度和样式等, 最终绑定到table对象
实例
创建表格
//注意这里,SWT.MULTI代表可以选择多行,SWT.FULL_SELECTION代表可以整行选择,SWT.BORDER边框SWT.V_SCROLL ,SWT.H_SCROLL滚动条
TableViewer tableViewer new TableViewer(shell,SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);Table table tableViewer.getTable();
// 表格边框线是否可见
table.setLinesVisible(true);
// 表头是否可见
table.setHeaderVisible(true);
// 设置表格大小
table.setBounds(97, 79, 373, 154);
String[] titles {ID, 姓名, 性别, 年龄};
// 创建列头信息, 并最终绑定到table
Arrays.stream(titles).forEach(title - TableColumnFactory.newTableColumn(SWT.NONE).width(80).text(title).create(table));运行效果 添加数据
一般情况下我们会将表格数据映射为对象列表, 比如我们有一个叫People的类, 它的属性与表中的列一一对应:
public class People {private int id;private String name;private String sex;private int age;
}我们需要将一个People列表作为原始数据渲染到表格当中, 关键步骤:
接收源数据数组(也可以是单个对象或者其他集合类型): TableViewer.setInput(Object)渲染接收的数据 渲染表头: TableViewer.setLabelProvider(IBaseLabelProvider)渲染内容: TableViewer.setContentProvider(IContentProvider)
在实际开发当中步骤刚好相反, 先提供渲染逻辑, 然后再输入数据:
tableViewer.setContentProvider(PeoplesProvider.getInstance());
tableViewer.setLabelProvider(PeopleLabelProvider.getInstance());People people new People();
people.setId(1);
people.setName(张三);
people.setSex(男);
people.setAge(10);
tableViewer.setInput(new People[]{people});由于LabelProvider和ContentProvider逻辑是通用的, 所以采用了单例模式由于是演示, 这里仅提供了包含单个People实例的数组, 实际当中可能是很大的一个列表或其他数据类型 PeoplesProvider我们直接继承IStructuredContentProvider:
import org.eclipse.jface.viewers.IStructuredContentProvider;public class PeoplesProvider implements IStructuredContentProvider {private static final PeoplesProvider provider new PeoplesProvider();public static PeoplesProvider getInstance() {return provider;}Overridepublic Object[] getElements(Object inputElement) {if (inputElement instanceof People[] objects) {return objects;}return new Object[0];}
}注意getElements方法中的数据类型转换, 决定了输入的数据类型是什么, 此处我们使用People[]接收和解析, 所以在设置数据源的地方也输入同类型的数据tableViewer.setInput(People[]); PeopleLabelProvider我们继承LabelProvider并实现ITableLabelProvider:
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;public class PeopleLabelProvider extends LabelProvider implements ITableLabelProvider {private final static PeopleLabelProvider provider new PeopleLabelProvider();private PeopleLabelProvider() {}public static PeopleLabelProvider getInstance() {return provider;}Overridepublic Image getColumnImage(Object element, int columnIndex) {return null;}Overridepublic String getColumnText(Object element, int columnIndex) {if (!(element instanceof People people)) {return ;}return switch (columnIndex) {case 0 - String.valueOf(people.getId());case 1 - people.getName();case 2 - people.getSex();case 3 - String.valueOf(people.getAge());default - throw new IllegalStateException(Unexpected value: columnIndex);};}
}运行效果 源码
Main:
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.widgets.TableColumnFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;import java.util.Arrays;public class Main {/*** 1. 创建TableViewer对象, 指定样式, 比如是否支持多行选择, 有无边框, 是否支持滚动条等* 2. 创建TableColumn对象: 包括列展示名称, 宽度和样式等, 最终绑定到table对象** param args*/public static void main(String[] args) {final Display display Display.getDefault();final Shell shell new Shell();shell.setLayout(new FillLayout());shell.setSize(500, 375);shell.setText(SWT Application);//注意这里,SWT.MULTI代表可以选择多行,SWT.FULL_SELECTION代表可以整行选择,SWT.BORDER边框SWT.V_SCROLL ,SWT.H_SCROLL滚动条TableViewer tableViewer new TableViewer(shell,SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);Table table tableViewer.getTable();// 表格边框线是否可见table.setLinesVisible(true);// 表头是否可见table.setHeaderVisible(true);// 设置表格大小table.setBounds(97, 79, 373, 154);String[] titles {ID, 姓名, 性别, 年龄};// 创建列头信息, 并最终绑定到tableArrays.stream(titles).forEach(title - TableColumnFactory.newTableColumn(SWT.NONE).width(80).text(title).create(table));tableViewer.setContentProvider(PeoplesProvider.getInstance());tableViewer.setLabelProvider(PeopleLabelProvider.getInstance());People people new People();people.setId(1);people.setName(张三);people.setSex(男);people.setAge(10);tableViewer.setInput(new People[]{people});shell.open();while (!shell.isDisposed()) {if (!display.readAndDispatch()) {display.sleep();}}}
}扩展阅读
idea开发jface、swt环境搭建Swt/Jface tableViewer入门教程一(显示tableViewer)