Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新zest 2中节点的标签/图标_Java_Eclipse Rcp_Zest - Fatal编程技术网

Java 更新zest 2中节点的标签/图标

Java 更新zest 2中节点的标签/图标,java,eclipse-rcp,zest,Java,Eclipse Rcp,Zest,我正在使用带有SpaceTreeLayout算法的GraphViewer,并尝试在创建图形后更新节点的标签/图标 已经测试过的 viewer.refresh(node, true); 及 与查看器或其图形控件的各种刷新/重画方法结合使用,但没有成功 有关查看器使用的更多详细信息: GraphViewer viewer = new GraphViewer(parent, SWT.BORDER); ArrayContentProvider content = new MyArrayContentP

我正在使用带有SpaceTreeLayout算法的GraphViewer,并尝试在创建图形后更新节点的标签/图标

已经测试过的

viewer.refresh(node, true);

与查看器或其图形控件的各种刷新/重画方法结合使用,但没有成功

有关查看器使用的更多详细信息:

GraphViewer viewer = new GraphViewer(parent, SWT.BORDER);
ArrayContentProvider content = new MyArrayContentProvider(..);

viewer.setContentProvider(content);
LabelProvider glp = new MyGraphLabelProvider(..);
viewer.setLabelProvider(glp);

List<MyNodeClass> nodes = .. //list of all node elements
viewer.setInput(nodes);

TriangleSubgraphFactory subGraphFactory = new TriangleSubgraphFactory();
SpaceTreeLayoutAlgorithm spaceTreeAlg = new SpaceTreeLayoutAlgorithm();

viewer.getGraphControl().setSubgraphFactory(subGraphFactory);
viewer.getGraphControl().setExpandCollapseManager(
    spaceTreeAlg.getExpandCollapseManager());
viewer.setLayoutAlgorithm(spaceTreeAlg, true);
以下用于刷新,但这不可能是预期用途:

GraphLabelProvider glp
GraphNode n = viewer.getGraphModelNode(node);
n.setText(glp.getText(node));
n.setImage(glp.getImage(node));

我不确定您到底是如何使用查看器的,但最简单的方法可能是将查看器的输入重置为要可视化的新数据(您在内容和标签提供程序中处理这些数据)。设置输入时,图形将自动更新:

viewer.setInput(myChangedDataToBeVisualized);

这会触发整个图形的更新吗?如果我只需要更新一个节点,那将是非常低效的。我是否使用了viewer.refresh错误,如果我想触发单个节点的刷新,应该如何使用它?以后使用viewer.setInput会导致异常。我添加了更多关于我的查看器使用情况的信息,可能我在那里做错了什么。
GraphLabelProvider glp
GraphNode n = viewer.getGraphModelNode(node);
n.setText(glp.getText(node));
n.setImage(glp.getImage(node));
viewer.setInput(myChangedDataToBeVisualized);