GMF:如何让网格显示在background,而不是foreground

前言

很久没写文章了,准备写一系列关于Eclipse RCP /Plugin的文章。 这些文章都是trouble shooting性质的,不准备写的很细,当你碰到这样的问题,google到时,能帮你把问题解决了,这就ok了。另外有些问题我也是不求甚解的,哈。

正文

GMF中,Grid,也就是用来对齐的网格,默认是显示在foreground的,这样网格就会覆盖在你的图形上面,看上去很糟糕。解决办法是在Editor中configureGraphicalViewer()方法添加如下代码

protected void configureGraphicalViewer() {
	super.configureGraphicalViewer();
	DiagramEditorContextMenuProvider provider = new DiagramEditorContextMenuProvider(this, getDiagramGraphicalViewer());
	getDiagramGraphicalViewer().setContextMenu(provider);
	getSite().registerContextMenu(ActionIds.DIAGRAM_EDITOR_CONTEXT_MENU, provider, getDiagramGraphicalViewer());
	
	//ADDED START
	DiagramRootEditPart root = (DiagramRootEditPart) getDiagramGraphicalViewer().getRootEditPart();
	Layer printableLayers = (Layer)root.getLayer(LayerConstants.PRINTABLE_LAYERS);
	Layer gridLayer = (Layer)root.getLayer(LayerConstants.GRID_LAYER);
	if (printableLayers != null && gridLayer != null){
		LayeredPane paneForPrintable = (LayeredPane)printableLayers.getParent();
		LayeredPane paneForGrid = (LayeredPane)gridLayer.getParent();
		if (paneForGrid == paneForPrintable) {
			paneForGrid.removeLayer(LayerConstants.GRID_LAYER);
			paneForGrid.addLayerBefore(gridLayer, LayerConstants.GRID_LAYER, LayerConstants.PRINTABLE_LAYERS);
		}
	}
	//ADDED END
}

 

解决方案来自http://www.eclipse.org/forums/index.php/t/296417/

原文地址:https://www.cnblogs.com/Binhua-Liu/p/3266784.html