JFace中的表格型樹TableTreeViewer


表格型樹是用TableTreeViewer來實現,自從SWT下的TableTree被廢棄之后,其擴展TableTreeViewer也成了雞肋,不再被建議使用,既然Tree可以實現表格型樹,那么其擴展TreeView當然也沒有問題,用TreeViewer實現的表格型樹,之前的TreeViewer實例菜單的呢過功能代碼不用做任何修改.

修改的不多,一是在主程序為樹加上幾列對象TreeColumn,二是創建一個新的表格型樹的標簽器,關於TreeColumn在Tree組件的時候有此內容的講解.這個地方和之前一樣.

TreeViewer3.java

 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 }

標簽器換了一個,它必須實現ITableLabelProvider接口.

 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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM