gpt4 book ai didi

java - 向 Zest Graph 添加单选和上下文敏感的右键单击

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:18 27 4
gpt4 key购买 nike

我已经使用 Zest GraphViewer 一个多星期了,现在试图发现它可以为我的应用程序做些什么,但到目前为止我还无法让它的行为符合我的要求。

我希望有人可以指出我需要的资源,因为我在 Google 上找不到那么多有用的资源,或者可以告诉我我想要的东西是否可行。

版本

我在 RCP 项目的依赖项中有 Zest 核心 1.3.0 和 Zest 布局 1.1.0。这来 self 从 Zest 站点获取的下载站点。

要求

  • 单节点/边选择。
  • 选择空白时取消选择节点/边(这可能是一个错误?)
  • 在节点上右键单击功能以更改。 (检测鼠标何时在节点上)

右键单击功能可能来自单个选择,因为我可以在任何地方弹出窗口,但它基于当前选定的节点,但我宁愿不这样做。

如果无法做到这一点,由于性质或我们的应用程序和用户,我可能还需要找到另一个具有此功能的基于 RCP/SWT 的图形绘制包。

如能就这些问题提供任何帮助,我们将不胜感激。

格伦 x

最佳答案

基于Zest tutorial by Vogella ,我想到了这个:

public static void main(String[] args) throws FontFormatException, IOException
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());

final Graph graph = new Graph(shell, SWT.NONE);
GraphNode node1 = new GraphNode(graph, SWT.NONE, "Jim");
GraphNode node2 = new GraphNode(graph, SWT.NONE, "Jack");
GraphNode node3 = new GraphNode(graph, SWT.NONE, "Joe");
GraphNode node4 = new GraphNode(graph, SWT.NONE, "Bill");

/* Context menu */
graph.addMenuDetectListener(new MenuDetectListener()
{
@Override
public void menuDetected(MenuDetectEvent e)
{
Point point = graph.toControl(e.x, e.y);
IFigure fig = graph.getFigureAt(point.x, point.y);

if (fig != null)
{
Menu menu = new Menu(shell, SWT.POP_UP);
MenuItem exit = new MenuItem(menu, SWT.NONE);
exit.setText("Hello! This is " + ((GraphLabel) fig).getText());
menu.setVisible(true);
}
else
{
Menu menu = new Menu(shell, SWT.POP_UP);
MenuItem exit = new MenuItem(menu, SWT.NONE);
exit.setText("Nothing here...");
menu.setVisible(true);
}
}
});
/* Lets have a directed connection */
new GraphConnection(graph, ZestStyles.CONNECTIONS_DIRECTED, node1, node2);
/* Lets have a dotted graph connection */
new GraphConnection(graph, ZestStyles.CONNECTIONS_DOT, node2, node3);
/* Standard connection */
new GraphConnection(graph, SWT.NONE, node3, node1);
/* Change line color and line width */
GraphConnection graphConnection = new GraphConnection(graph, SWT.NONE, node1, node4);
graphConnection.changeLineColor(shell.getDisplay().getSystemColor(SWT.COLOR_GREEN));
/* Also set a text */
graphConnection.setText("This is a text");
graphConnection.setHighlightColor(shell.getDisplay().getSystemColor(SWT.COLOR_RED));
graphConnection.setLineWidth(3);

graph.setLayoutAlgorithm(new SpringLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), true);
graph.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
System.out.println(e.item);
/* Make sure that only the newest item is selected */
graph.setSelection(new GraphItem[]{(GraphItem)e.item});
}

});

shell.pack();
shell.open();
shell.setSize(400, 300);

while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

它支持单个节点/边缘选择、取消选择和按要求单击鼠标右键功能。

看起来像这样:

enter image description here


如果您使用本教程的 GraphViewer 示例并将其添加到 View 代码中,它仍然可以正常工作:

final Graph graph = viewer.getGraphControl();
graph.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
System.out.println(e.item);
graph.setSelection(new GraphItem[]{(GraphItem)e.item});
}

});

关于java - 向 Zest Graph 添加单选和上下文敏感的右键单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21698420/

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