SWT树 - 可以降低原生扩展图标吗? [英] SWT Tree - Lowering the native expand icon possible?

查看:164
本文介绍了SWT树 - 可以降低原生扩展图标吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个JFace TreeViewer ,其中包含SWT ,我正在绘制我的单元格以获得多行支持我。目前,它看起来像这样:

I have a JFace TreeViewer with a SWT Tree underlaying and I am painting my cells for multiple row support for myself. Currently, it looks like this:

我希望将展开图标和标签都降低如下:

I want both the expand icon and the label to be lowered like this:

标签没问题,因为我从<$延伸c $ c> StyledCellLabelProvider 并覆盖 paint() measure() - 问题是我不知道是否可以为展开图标设置Y坐标。我担心不是..如果是这样,我也想为自己画一个自定义的扩展图标,但还有另外一点:是否有可能彻底消除原生扩展图标?我在 measure() paint()方法中尝试了这个,但它没有用:

This is no problem for the label because I am extending from StyledCellLabelProvider and am overwriting paint() and measure() - the problem is that I have no clue if its possible to set the Y Coordinate for the Expand Icon. I'm afraid it isn't.. If so, I would like to paint a custom expand icon for myself, too, but there's another point then: Is it possible to completely vanish the native expand icon? I tried this in both the measure() and paint() method, but it didn't worked:

event.detail &= ~SWT.FOREGROUND;


推荐答案

我刚在Tree上添加了简单的绘制方法。这应该可以帮助你获得方向

I just added simple paint method on Tree. this should help you to get the direction

public class Snippet {public static void main (String [] args) {
    Display display = new Display ();
    Shell shell = new Shell (display);
    shell.setLayout(new FillLayout());
    final Tree tree = new Tree (shell, SWT.BORDER);
    for (int i=0; i<4; i++) {
        TreeItem iItem = new TreeItem (tree, 0);
        iItem.setText ("TreeItem (0) -" + i);
        for (int j=0; j<4; j++) {
            TreeItem jItem = new TreeItem (iItem, 0);
            jItem.setText ("TreeItem (1) -" + j);
            for (int k=0; k<4; k++) {
                TreeItem kItem = new TreeItem (jItem, 0);
                kItem.setText ("TreeItem (2) -" + k);
                for (int l=0; l<4; l++) {
                    TreeItem lItem = new TreeItem (kItem, 0);
                    lItem.setText ("TreeItem (3) -" + l);
                }
            }
        }
    }

    tree.addListener(SWT.PaintItem, new Listener() {

        @Override
        public void handleEvent(Event event) {
            GC gc = event.gc;
            TreeItem item = (TreeItem) event.item;
            Tree tree = (Tree) event.widget;
            Rectangle rect = tree.getClientArea();
            Rectangle bounds = item.getBounds();

            /**
             * expand/collapse native control bounds
             */

             TreeItem  parentItem= item.getParentItem();

             Rectangle ecb = null;
             if(parentItem != null){
                 Rectangle pBounds = parentItem.getBounds();
                 ecb = new Rectangle(pBounds.x, bounds.y, Math.abs(pBounds.x-bounds.x), bounds.height);
             }
             else
             {
                 ecb = new Rectangle(rect.x, bounds.y, Math.abs(rect.x-bounds.x), bounds.height);
             }

            gc.setAlpha(200);

            /**
             * paint image in this bounds depending on state
             * testing purpose: filling background
             */
            if(item.getExpanded()){
                gc.setBackground(event.display.getSystemColor(SWT.COLOR_RED));
                gc.fillRectangle(ecb.x,ecb.y,ecb.width,ecb.height);
            }
            else
            {
                gc.setBackground(event.display.getSystemColor(SWT.COLOR_CYAN));
                gc.fillRectangle(ecb.x,ecb.y,ecb.width,ecb.height);
            }
        }
    });
    shell.setSize (200, 200);
    shell.open ();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();
}
} 

您需要绘制展开/折叠图片而不是填充背景

you need to draw your expand / collapse images instead filling background

这篇关于SWT树 - 可以降低原生扩展图标吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆