表格型树是表格和树的结合体,其整体是一个表格,然后可以在表格的单元格中显示树状结构,用于显示某些数据时比较清晰。按《Eclipse从入门到精通》第11章11.8的内容,是用TableTree类实现的,但Eclipse 3.6上已经没有该控件。经查询资料,从Eclipse 3.1开始,TableTree已被deprecate(即否决),与之对应的JFace的TableTreeViewer虽然没有deprecate,但使用它会得到很多警告。
同时,Tree控件本身提供了TreeColumn来代替原来TableTree+Table+TableColumn的作用。以下是一个简单的例子。
※ 该问题,在《Eclipse从入门到精通》(第二版)已经解决,处理方式相同。
最后效果如下:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
public class TableTree {
/**
* Launch the application.
*
* @param args
*/
public static void main(String[] args) {
Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(450, 300);
shell.setText(“表格型树”);
shell.setLayout(new FillLayout(SWT.HORIZONTAL));
// 用Tree代替TableTree
final Tree tree = new Tree(shell, SWT.BORDER);
// 把树的头信息显示出来,即为表格型树
tree.setHeaderVisible(true);
// 用TreeColumn代替Table+TableColumn
TreeColumn column = new TreeColumn(tree, SWT.NONE);
column.setWidth(100);
column.setText(“姓名”);
column = new TreeColumn(tree, SWT.LEFT);
column.setText(“职位”);
column.setWidth(60);
column = new TreeColumn(tree, SWT.NONE);
column.setWidth(100);
column.setText(“特点”);
// 用TreeItem代替TableTreeItem
TreeItem item1 = new TreeItem(tree, SWT.NONE);
item1.setText(“PPP项小组”);
createItem(item1, “黄俊”, “组长”, “技术全面”);
createItem(item1, “黄钰”, “程序员”, “编程超快”);
createItem(item1, “张浩”, “程序员”, “专攻难点”);
createItem(item1, “周阎”, “测试员”, “认真负责”);
item1.setExpanded(true);
TreeItem item2 = new TreeItem(tree, SWT.NONE);
item2.setText(“中国足球队”);
createItem(item2, “陈刚”, “后勤”, “擦鞋最专业”);
/* 监听选择事件,并将所选项的记录文字显示在主窗口的标题栏上 */
tree.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
TreeItem[] ttiArray = tree.getSelection();
TreeItem tti = ttiArray[0];
String str = tti.getText(0) + “,” + tti.getText(1);
shell.setText(str);
}
});
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/* 用于创建节点的自定义函数 */
static TreeItem createItem(TreeItem parentItem, String str1, String str2,
String str3) {
TreeItem item2 = new TreeItem(parentItem, SWT.NONE);
item2.setText(str1);
item2.setText(1, str2);
item2.setText(2, str3);
return item2;
}
}
※ 注意,WindowBuilder 在Design视图中,似乎无法直接插入TreeItem控件,需手动编写代码。
参考文档:
通过TreeColumn实现“表格树”TableTree
解决SWT中ViewForm与ToolBar的兼容问题
解决java.lang.UnsupportedClassVersionError 错误
中山大学MSE-101 课程:面向对象技术与方法的PPT文档
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/103958.html