我在SWT(没有JFace)工作,我正在尝试自定义我使用侧栏的Tree的行为。
树中的顶级项目不应该是可选的;他们基本上是头。应该只有这些项目的子项目是可选的。因此,我希望用户界面的行为能够表明这一点;单击其中一个顶级项目应该展开或折叠,但不应该在指示器改变其状态和子级可见性改变之外提供任何类型的视觉反馈。
问题似乎是,在OS X上,展开/折叠指示器是一个三角形(不知道它是图像还是unicode字符),指向右边或下面,但也是根据“选择”状态着色的。我已经设法覆盖了顶级项目的所有相关行为,除了箭头改变颜色。
软件。擦除项
侦听器,用于挂接到背景绘图,以便背景不会更改颜色。这按预期工作。软件。绘制项
侦听器,以确保顶级项中的文本不会更改颜色。这按预期工作,但似乎对指标没有任何影响;我甚至尝试过不重置GC的前景色,但指标的颜色仍然会改变:未选择:
已选
我试图做的一些事情,都失败了:
> < li>
只需在指示器顶部绘制一个矩形。无论我将PaintListener连接到什么,指示器似乎总是在顶部。
在选择事件类型上使用侦听器,检查< code>event.item是否是顶级项之一,然后处理事件位和重绘标志。这似乎一点也不好用;行为完全不可预测。代码看起来像这样:
sideBar.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event event)
{
TreeItem eventItem = (TreeItem) event.item;
if(sideBarRoots.contains(event.item))
{
event.detail = 0;
event.type = 0;
event.doit = false;
sideBar.setRedraw(false);
}
else
{
sideBar.setRedraw(true);
event.type = SWT.Selection;
event.doit = true;
}
}
});
由于redraw标志只是一个提示,有时它会被正确设置,有时则不会。它要么不起作用,要么被锁定在一种状态,在这种状态下,侧边栏中不会重绘任何内容。
我知道很多这种行为都与底层原生小部件的行为高度耦合,但我想知道是否有任何方法可以在不从头开始滚动自定义小部件的情况下获得我正在寻找的行为?
我认为在你这种情况下,你最好不要在树头上选择。
您可以通过不允许单击来取消选择事件。但这可能是一个有点笨拙的实现,特别是对于按键导航。
如果可能的话,更安全的方法是在选择树父节点时只移动选择。因此,如果通过键盘或鼠标选择父节点,应该这样做:展开节点并将选择移动到第一个子节点。
通过这种方式,您可以避免隐藏选择状态的所有绘画技巧。
我正在使用Netbeans 7.2开发JavaFX2.2应用程序。我正在使用一个treeview,我扩展了TreeCell,为每个TreeItem提供一个上下文菜单,其中有一个MenuItem具有“collpase all”功能。treeview的最大深度级别为4。当用户右键单击级别2的TreeItem并单击“全部折叠”MenuItem时,我想使级别3的所有TreeItem折叠(setExpand
我正在处理树状态(展开/选择的节点)保存,并创建了一个实用程序类,可以保存和恢复节点状态。工作很好。 但JTree本身仍然存在一个问题--当用户使用某个JTree实例(展开/折叠节点)时,可能会出现某个节点(隐藏在另一个折叠节点下)被展开的情况。没什么特别的--那很好。 JTree将有关展开/折叠节点的记录保存在单独的哈希表中,使用节点路径作为键,使用布尔值作为展开状态值。因此,当折叠的父节点下的
展开或折叠代码 操作步骤: 菜单栏:Code —> Folding —> Expand 快捷键: Mac: command + “+” Windows\/Linux: Ctrl + "+" 展开或折叠代码 操作步骤: 菜单栏:Code —> Folding —> Collapse 快捷键: Mac: command + “-” Windows\/Linux: Ctrl + "-" 展开或折叠当前代
在我的angular 2应用程序中,我正在使用一个折叠和扩展菜单,并且根据一个项目是否被扩展,图标会被切换。当前,当我展开一个菜单项时,图标会正确地切换和更改,但它也会对所有未展开的菜单项进行更改。 我如何确保图标css切换只发生在单击的菜单项。另外,我如何确保在展开新项之前,前一个展开的项也被折叠。因此一次只展开一个菜单项。 下面是我的Html,它是for循环的一部分: 在“我的组件”中:
在我的应用程序中,我需要能够从TreeView中删除每个项目。 我给树景注入了控制器 我的删除代码: 实际问题是:如何删除根元素?我在api中找不到任何方法,我不想创建新实例,我更喜欢依赖项注入解决方案。我想我可以在创建下一个节点之前隐藏此项,但它似乎有点不正常。 谢谢你花在这个话题上的时间!
我是SWT/JFace技术的新手,我发现了一个让我发疯的问题。在Eclipse RCP应用程序中,我有一个视图,其中放置了一个带有JFace TreeViewer的SWT树,该树通过标签提供程序提供标签和图标。根据客户要求,树的背景颜色为深蓝色,字体颜色为白色。当节点被选中时,这种颜色的组合导致节点文本的可视化效果不佳,文本不适合树区域,我们将鼠标指针放在节点上。不知何故出现了“本地高亮显示”。这