zoukankan      html  css  js  c++  java
  • 通过TreeColumn实现“表格树”TableTree

    Eclipse 3.1里deprecate了TableTree这个控件,与之对应的jface的TableTreeViewer虽然没有deprecate,但使用它会得到很多警告。在TableTreeViewer的第一列里是不能显示图标的,因为这个位置被+/-符号占用了,而且TableTree是显示不出 Tree的层次的,也就是没有缩进。

    SWT 3.1里的Tree控件新支持了列的显示,是通过TreeColumn来实现的。在jface里则没有添加新的viewer,使用原先的TreeViewer即可支持,下面是一段例子代码,注意如果在windows里运行要修改一下setInput()这条语句的参数,例如改为setInput(new File("c:\\"))。

    import java.io.File;
    
    import org.eclipse.jface.viewers.ILabelProviderListener;
    import org.eclipse.jface.viewers.ITableLabelProvider;
    import org.eclipse.jface.viewers.ITreeContentProvider;
    import org.eclipse.jface.viewers.TreeViewer;
    import org.eclipse.jface.viewers.Viewer;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.graphics.Image;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.TreeColumn;
    
    
    public class TreeColumnTest {
        
        public void run(){
            final Display display = new Display();
            final Shell shell = new Shell(display);
            shell.setLayout(new FillLayout());
            
            final TreeViewer viewer = new TreeViewer(shell, SWT.FULL_SELECTION);
            viewer.getTree().setHeaderVisible(true);
            TreeColumn column = new TreeColumn(viewer.getTree(), SWT.LEFT);
            column.setText("Name");
            column.setWidth(200);
            column = new TreeColumn(viewer.getTree(), SWT.LEFT);
            column.setText("Size");
            column.setWidth(100);
            column = new TreeColumn(viewer.getTree(), SWT.LEFT);
            column.setText("Hidden");
            column.setWidth(100);
            viewer.setContentProvider(new MyTreeContenetProvider());
            viewer.setLabelProvider(new MyTableLableProvider());
            viewer.setInput(new File("/"));
    
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            display.dispose();
        }
    
        public static void main(String[] args) {
            new TreeColumnTest().run();
        }
        
        class MyTreeContenetProvider implements ITreeContentProvider{
    
            public Object[] getChildren(Object parentElement) {
                File file=(File)parentElement;
                if(file.isDirectory())
                    return file.listFiles();
                else
                    return null;
            }
    
            public Object getParent(Object element) {
                File file=(File)element;
                return file.getParentFile();
            }
    
            public boolean hasChildren(Object element) {
                File file=(File)element;
                return file.isDirectory()/*&&file.list().length>0*/;
            }
    
            public Object[] getElements(Object inputElement) {
                File file=(File)inputElement;
                return file.isDirectory()?file.listFiles():new Object[]{file};
            }
    
            public void dispose() {
                
            }
    
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
                
            }
            
        }
        
        class MyTableLableProvider implements ITableLabelProvider{
    
            public Image getColumnImage(Object element, int columnIndex) {
                return null;
            }
    
            public String getColumnText(Object element, int columnIndex) {
                File file=(File)element;
                switch (columnIndex) {
                case 0:
                    return file.getName();
                case 1:
                    return ""+file.length();
                case 2:
                    return ""+file.isHidden();
                default:
                    return "";
                }
            }
    
            public void addListener(ILabelProviderListener listener) {
                
            }
    
            public void dispose() {
                
            }
    
            public boolean isLabelProperty(Object element, String property) {
                return false;
            }
    
            public void removeListener(ILabelProviderListener listener) {
                
            }
            
        }
    }

    下面是运行画面:

    如果觉得本文内容有帮助:试试我开发的Android应用 应用计时折扣君推荐+1(需登录)

  • 相关阅读:
    韦大仙--Katalon---一款好用的selenium自动化测试插件
    Python之路,Day3
    Python之路,Day2
    Python之路,Day1
    Python基础02 基本数据类型
    Python基础01 Hello World!
    韦大仙--LoadRunner压力测试:详细操作流程
    韦大仙--python对文件操作 2--写入与修改
    韦大仙--python对文件操作
    更新pip10后 ImportError: cannot import name ‘main'
  • 原文地址:https://www.cnblogs.com/bjzhanghao/p/344853.html
Copyright © 2011-2022 走看看