在 Eclipse 插件项目中清除并重绘视图

Clear and redraw view in eclipse plugin project

我使用 this 教程在我的 Eclipse 应用程序中创建了一个自定义视图,它负责可视化图形(由不同的点定义,存储在数组中)。

此视图还包含一个下拉菜单,用户可以在其中选择不同的图表名称。

这是我的代码:

private List<Action> actionList = new ArrayList<Action>();

HashMap<String, int[]> graphCoordinates = new HashMap<String, int[]>();

@Override
public void createPartControl(Composite parent) {
    declareMaps();
    createActions();
    createMenu();

    Canvas canvas = new Canvas(parent, SWT.NONE);
    canvas.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent e) {
            if (graphCoordinates.isEmpty()) {
                declareGraphCoordinates(e.width, e.height);
            }
        }
    });
}

private void createActions() {
    for (String column : graphNames) {
        Action action = new Action(column) {
            public void run() {
                int[] polylinePoints = graphCoordinates.get(getId());
                // TODO: Draw!
            }
        };
        action.setId(column);
        actionList.add(action);
    }
}

private void createMenu() {
    IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
    for (int i = 0; i < graphNames.size(); i++) {
        mgr.add(actionList.get(i));
    }
}

declareMaps() 方法相当广泛。它声明地图,其中包含必须绘制的图形的坐标。主要是将图形添加到 HashMap graphCoordinates,其中键是图形名称,值是带有折线点的 int[]。但这不是问题。

createActions() 中,我为每个图形定义 Action 个对象并将它们存储在 ArrayList 中。 在 createMenu() 中,我将 Actions 添加到菜单中。

此实现允许用户在我的视图的菜单中选择图表名称,然后在他单击其中一个之后,调用相应 Actionrun() 方法。在 run() 方法中,我想清除视图并绘制新图形,具体取决于用户的决定:

e.gc.drawPolyline(graphCoordinates.get(userDecision));

阅读用户决定也不是问题,但如何重置视图(如有必要,删除旧图表)并绘制新图表?绘图发生在 createPartControl() 方法内部。我是否必须再次调用它或者实现它的最佳方法是什么?

只需在 canvas 控件上调用 redraw() 告诉它您要重绘它。这将导致绘制侦听器再次被调用。在 PaintListener 中绘制已选择的任何内容。