gpt4 book ai didi

java - SWT Tree - 可以降低 native 展开图标吗?

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:17 25 4
gpt4 key购买 nike

我有一个带有 SWT Tree 底层的 JFace TreeViewer,我正在为自己绘制单元格以获得多行支持。目前,它看起来像这样:

normal

我希望展开图标和标签都像这样降低:

lowered

这对于标签来说没有问题,因为我从 StyledCellLabelProvider 扩展并覆盖 paint()measure() - 问题是我不知道是否可以设置展开图标的 Y 坐标。恐怕不是......如果是这样,我也想为自己绘制一个自定义展开图标,但还有一点:是否可以完全消失 native 展开图标?我在 measure()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 ();
}
}

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

enter image description here

关于java - SWT Tree - 可以降低 native 展开图标吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com