[原]用Tree代替TableTree制作表格型树

    表格型树是表格和树的结合体,其整体是一个表格,然后可以在表格的单元格中显示树状结构,用于显示某些数据时比较清晰。按《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

Eclipse 3.6.2 JFace 对话框显示中文
解决SWT中ViewForm与ToolBar的兼容问题
解决java.lang.UnsupportedClassVersionError 错误
中山大学MSE-101 课程:面向对象技术与方法的PPT文档

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/103958.html

(0)
上一篇 2021年8月25日
下一篇 2021年8月25日

相关推荐

发表回复

登录后才能评论