且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JFace中的表格型树TableTreeViewer

更新时间:2022-09-04 23:11:00

表格型树是用TableTreeViewer来实现,自从SWT下的TableTree被废弃之后,其扩展TableTreeViewer也成了鸡肋,不再被建议使用,既然Tree可以实现表格型树,那么其扩展TreeView当然也没有问题,用TreeViewer实现的表格型树,之前的TreeViewer实例菜单的呢过功能代码不用做任何修改.

修改的不多,一是在主程序为树加上几列对象TreeColumn,二是创建一个新的表格型树的标签器,关于TreeColumn在Tree组件的时候有此内容的讲解.这个地方和之前一样.

TreeViewer3.java

JFace中的表格型树TableTreeViewer
 1 public class TreeViewer3 {
 2     public static void main(String[] args) {
 3         new TreeViewer3().open();
 4     }
 5 
 6     public void open() {
 7         final Display display = new Display();
 8         final Shell shell = new Shell();
 9         shell.setSize(300, 300);
10         // -----------界面核心代码-------------------
11         shell.setLayout(new FillLayout());
12         TreeViewer tv = new TreeViewer(shell, SWT.BORDER);
13 
14         Tree tree = tv.getTree();
15         tree.setHeaderVisible(true);
16         TreeColumn column = new TreeColumn(tree, SWT.LEFT);
17         column.setText("名称");
18         column.setWidth(150);
19         column = new TreeColumn(tree, SWT.LEFT);
20         column.setText("子结点数");
21         column.setWidth(80);
22         column = new TreeColumn(tree, SWT.LEFT);
23         column.setText("性别");
24         column.setWidth(40);
25 
26         tv.setContentProvider(new TreeViewerContentProvider());
27         tv.setLabelProvider(new MyTableLableProvider());
28         // 和TableViewer一样,数据的入口也是setInput方法
29         List<Country> input = (List)DataFactory.createTreeData();
30         tv.setInput(input);
31         // --------------插入代码:START------------------
32         MyActionGroup actionGroup = new MyActionGroup(tv);// 生成一个ActionGroup对象
33         actionGroup.fillContextMenu(new MenuManager());// 将按钮注入到菜单对象中
34         // -----------END------------------
35         shell.open();
36         while (!shell.isDisposed()) {
37             if (!display.readAndDispatch())
38                 display.sleep();
39         }
40         display.dispose();
41     }
42 }
JFace中的表格型树TableTreeViewer

标签器换了一个,它必须实现ITableLabelProvider接口.

JFace中的表格型树TableTreeViewer
 1 public class MyTableLableProvider implements ITableLabelProvider {
 2     public String getColumnText(Object element, int columnIndex) {
 3         ITreeEntry entry = (ITreeEntry) element;
 4         switch (columnIndex) {
 5         case 0:
 6             return entry.getName();
 7         case 1:
 8             List list = entry.getChildren();
 9             if (list == null)
10                 return "";
11             return String.valueOf(list.size());
12         case 2:
13             if (entry instanceof People) {
14                 boolean sex = ((People) entry).isSex();
15                 return sex ? "男" : "女";
16             }
17             return "";
18         default:
19             return "";
20         }
21     }
22 
23     public Image getColumnImage(Object element, int columnIndex) {
24         return null;
25     }
26     public void addListener(ILabelProviderListener listener) {}
27     public void removeListener(ILabelProviderListener listener) {}
28     public void dispose() {}
29     public boolean isLabelProperty(Object element, String property) {
30         return false;
31     }
32 }
JFace中的表格型树TableTreeViewer

JFace中的表格型树TableTreeViewer


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4178219.html,如需转载请自行联系原作者