【问题标题】:How to implement custom FlowLayout in a GEF editor?如何在 GEF 编辑器中实现自定义 FlowLayout?
【发布时间】:2014-06-27 19:53:56
【问题描述】:

我正在实现一个 GEF 编辑器,并面临以下问题。

EditPart 有两种类型:1) GraphEditPart,2) NodeEditPart。 我的编辑器扩展了GraphicalEditor,因为我根本不需要调色板。我使用SimpleRootEditPart 作为GraphicalViewer

GraphEditPart 有一个类型为Layer 的图形,其布局为FlowLayout。它的模型子节点是节点,应根据FlowLayout 显示,即一个接一个地显示,当节点图形(Label)超出GraphicalViewer 的可见部分时,会出现“换行符”。这通常是水平滚动条出现的地方。为了抑制滚动条,我设置了layer.setPreferredSize(new Dimension(getViewer().getControl().getSize()))。这工作得很好,所以当我将应用程序窗口调整为更小的尺寸时,编辑器会变小,并且节点图形会像 FlowLayout 一样执行准“换行”。

但是,如果图表中有很多节点,我想显示垂直滚动条,因为就像现在一样,节点只是在屏幕底部下方消失。

所以基本上,我想要实现的行为就像一个文本编辑器,如果你输入足够多的文本,它会向下滚动(就像 stackoverflow 上的 WYSIWYG 文本编辑器)...

我尝试通过调用((FigureCanvas) getViewer()).getControl.setVerticalScrollbarVisibility(FigureCanvas.AUTOMATIC)) 设置滚动条可见,但无济于事。

【问题讨论】:

    标签: java swt eclipse-gef flowlayout draw2d


    【解决方案1】:

    我认为问题在于您使用的是SimpleRootEditPart,它不支持滚动。尝试将其更改为ScalableRootEditPart 甚至ScalableFreeformRootEditPart(这就是我正在使用的)。您正在进行的调用会影响包含编辑部分的控件,但由于 GEF 管理它自己的视图,因此您的调用无效。

    【讨论】:

    • 滚动不是GraphicalViewerControl 的功能吗?如果我是正确的,ScrollingGraphicalViewer 的默认Control(我认为从Graphical Editor 向下的类型层次结构中所有 GEF 编辑器的默认查看器)是FigureCanvas(API 文档称之为“滚动帆布”无论如何)。好吧,至少 FigureCanvas 为滚动条的可见性提供了静态字段。 @QueNuevo:vainolo 是对的,因为您的电话不会产生任何效果。您是否尝试过根据孩子的Bounds 动态计算首选大小?这有效果吗?
    • 我对代码@s.d 做了一些挖掘,我认为 GEF 有它自己的滚动机制,不受 Eclipse UI 控制。但我最近对日食生疏了,所以我可能错了。无论如何,我总是使用上面的类和滚动作品。
    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多