在 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
添加到菜单中。
此实现允许用户在我的视图的菜单中选择图表名称,然后在他单击其中一个之后,调用相应 Action
的 run()
方法。在 run()
方法中,我想清除视图并绘制新图形,具体取决于用户的决定:
e.gc.drawPolyline(graphCoordinates.get(userDecision));
阅读用户决定也不是问题,但如何重置视图(如有必要,删除旧图表)并绘制新图表?绘图发生在 createPartControl()
方法内部。我是否必须再次调用它或者实现它的最佳方法是什么?
只需在 canvas 控件上调用 redraw()
告诉它您要重绘它。这将导致绘制侦听器再次被调用。在 PaintListener
中绘制已选择的任何内容。
我使用 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
添加到菜单中。
此实现允许用户在我的视图的菜单中选择图表名称,然后在他单击其中一个之后,调用相应 Action
的 run()
方法。在 run()
方法中,我想清除视图并绘制新图形,具体取决于用户的决定:
e.gc.drawPolyline(graphCoordinates.get(userDecision));
阅读用户决定也不是问题,但如何重置视图(如有必要,删除旧图表)并绘制新图表?绘图发生在 createPartControl()
方法内部。我是否必须再次调用它或者实现它的最佳方法是什么?
只需在 canvas 控件上调用 redraw()
告诉它您要重绘它。这将导致绘制侦听器再次被调用。在 PaintListener
中绘制已选择的任何内容。