MindFusion.Diagramming for Java问题集锦(二):如何使图表只读?

本文整理了用户在使用MindFusion.Diagramming for Java常见的问题,希望对您有所帮助。

MindFusion.Diagramming for Java(之前版本为JDiagram)为您图表的自定义以及个性化提供了多种不同选项。您能在多种外形、箭头以及色彩风格中选择。

简易的界面、丰富的事件与程序设置使编程变得快速简单。在不需要花费宝贵的时间进行调整与调试的情况下,您能快速方便地找到正确的属性以及建立正确的图表。该控制组件使您能将更多精力集中在您应用程序的架构上,而不是将精力消耗在编码以及优化上。

MindFusion.Diagramming for Java最新试用版

本文整理了用户在使用MindFusion.Diagramming for Java常见的问题,希望对您有所帮助。

问:如何使图表只读,以便用户无法修改任何内容/strong>

答:调用DiagramView.setBehavior(Behavior.DoNothing); Behavior属性指定控件如何响应鼠标输入,DoNothing模式忽略所有鼠标输入。可以设置其他模式以允许绘制链接但不允许节点,以允许选择和移动现有项目但不创建新项目等。

问:如何阻止用户调整节点大小,但仍允许移动节点/strong>

答:调用node.setEnabledHandles(AdjustmentHandles.Move); 也可以设置句柄组合,例如AdjustmentHandles.Move | AdjustmentHandles.Rotate仅允许移动和调整节点大小。

问:我可以阻止用户删除流程图中的特定节点,例如开始和结束节点吗/strong>

答:实现DiagramListener.nodeDeleting方法并为不应删除的节点调用NodeValidationEvent.setCancel(true)。

问:如何使用鼠标右键单击图元素时显示上下文菜单/strong>

答:实现DiagramListener.nodeClicked(或链接的linkClicked)并显示JMenuPopup,例如:

public void nodeClicked(NodeEvent e)
{
final DiagramNode node = e.getNode();
if (e.getMouseButton() == MouseEvent.BUTTON3)
{
JPopupMenu menu = new JPopupMenu();
menu.add("Delete").addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent)
{
diagram.getNodes().remove(node);
}
});
Point p = diagramView.docToDevice(e.getMousePosition());
menu.show(diagramView, p.x, p.y);
}
};

问:我可以在SWT(标准窗口小部件工具包)应用程序中使用Java图表控件吗/strong>

答: JDiagram是一个Swing组件,它可以使用SWT / AWT Bridge库嵌入到SWT应用程序中。创建并显示可滚动的DiagramView的最小SWT程序如下所示。

import java.awt.Frame;
import java.awt.Panel;

import javax.swing.JScrollPane;

import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import com.mindfusion.diagramming.DiagramView;

public class SwtApp
{
public static void main(String[] args)
{
// create SWT main window
Display display = new Display ();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Composite composite = new Composite(shell, SWT.EMBEDDED | SWT.NO_BACKGROUND);

// add a Swing frame to the SWT composite control
Frame frame = SWT_AWT.new_Frame(composite);
Panel panel = new Panel(new java.awt.BorderLayout());
frame.add(panel);

// add a DiagramView to the Swing frame
DiagramView flowchart = new DiagramView();
JScrollPane scrollPane = new JScrollPane(flowchart);
panel.add(scrollPane);

// run the SWT event loop
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose ();
}
}

请注意,Swing和SWT处理不同线程中的事件。因此,如果需要更新SWT用户界面以响应图事件,则必须使用Display.asyncExec或Display.syncExec方法运行SWT处理代码。如果需要更新图表以响应SWT事件,请使用SwingUtilities.invokeLater或SwingUtilities.invokeAndWait方法运行图表处理代码。

教程持续更新中,感兴趣的朋友记得持续关注后续教程~

想要购买MindFusion.Diagramming for Java正版授权的朋友可以咨询官方客服

更多精彩内容,敬请关注下方的微信公众号,及时获取产品最新资讯▼▼▼

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月18日
下一篇 2019年7月18日

相关推荐

发表回复

登录后才能评论