SWT树 - 可以降低原生扩展图标吗? [英] SWT Tree - Lowering the native expand icon possible?
问题描述
我有一个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屋!