我在Eclipse应用程序中使用this教程创建了一个自定义视图,该教程负责可视化图形(由不同点定义,存储在数组中)。
此视图还包含一个下拉菜单,用户可以在其中选择不同的图名。
这是我的代码:
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
添加到菜单中。
此实现允许用户在我的视图菜单中选择图形名称,并在单击其中一个之后,调用相应run()
的{{1}}方法。在Action
方法中,我想清除视图并绘制新图,具体取决于用户的决定:
run()
阅读用户决策也不是问题,但如何重置视图(如有必要,删除旧图)并绘制新图?绘图发生在e.gc.drawPolyline(graphCoordinates.get(userDecision));
方法内。我是否必须再次调用它或者实现它的最佳方法是什么?
答案 0 :(得分:1)
只需在画布控件上调用redraw()
即可告诉它您需要重绘它。这将导致再次调用绘图侦听器。在PaintListener
绘制所选择的任何内容。