我有一个JFaceTreeViewer
与 SWTTree
底层,我正在绘制我的单元格,为自己提供多行支撑。目前,它看起来像这样:
我希望展开图标和标签都像这样降低:
这对于标签来说没有问题,因为我从StyledCellLabelProvider
并且正在覆盖paint()
and measure()
- 问题是我不知道是否可以设置展开图标的 Y 坐标。恐怕不是......如果是这样,我也想为自己绘制一个自定义展开图标,但还有一点:是否可以完全消失本机展开图标?我在两个都尝试过这个measure()
and paint()
方法,但没有成功:
event.detail &= ~SWT.FOREGROUND;
我刚刚在树上添加了简单的绘制方法。这应该可以帮助你找到方向
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 ();
}
}
您需要绘制展开/折叠图像而不是填充背景
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)