我在Eclipse插件项目中实现了一个自定义视图,我希望在其中显示由用户选择的不同图形。创建自定义视图没有问题,使用org.eclipse.swt.graphics.GC
并绘制所需的部分,但我想实现以下内容:
在自定义视图中,我希望在视图的边界上有一些固定区域,我可以在其中显示坐标系(x轴和y轴以及相应的标注),这是固定的。在这些边界之间,我想显示图形,该图形根据用户选择动态变化。
所以我需要的是一个自定义视图,它构建如下:
在左侧和底部的灰色区域内,我想要坐标系轴(显示为红色),在白色区域内我想绘制图形。
如何在视图中创建这样的区域?它应该只是一个没有任何翻译或尺度的文件,只是一个独立的区域,就像一个视图内的视图......
@Override
public void init(IViewSite site) throws PartInitException {
super.init(site);
}
@Override
public void createPartControl(Composite parent) {
canvas = new Canvas(parent, SWT.NONE);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
drawCoordinateSystem(e);
drawGraph(e);
});
public void drawCoordinateSystem(PaintEvent e) {
// 1. create area inside view
// 2. draw coordinate system
}
public void drawGraph() {
// 3. draw graph
}
我知道如何解决第2点和第3点。但我不知道,如何在我的视图中创建这样的区域。
我将不胜感激任何帮助!
答案 0 :(得分:1)
我建议你以不同的方式添加多个控件并处理不同情况的绘图。
例如,不是只有一个单片画布,它可以绘制从图形到坐标,到有用标签的所有内容。在顶部添加一组标签控件,用于显示坐标,添加父级或坐标系标签等。
您的125
应如下所示:
createPartControl
答案 1 :(得分:0)
你应该在paintListener中绘制所有内容,如果你的图形只是改变了图形的重绘区域,例如:
d = {}
with open("data.txt") as f:
for line in f:
(key, val) = line.split(": ")
Id[key.strip()] = val.strip()
print(d.get("A"))
print(d.get('B'))
print(d.get('C'))
print(d.get('D'))
print(d.get('E'))
print(d.get('F'))
print(d.get('G'))
print(d.get('H'))
print(d.get('I'))
print(d.get('J'))
print(d.get('K'))
print(d.get('L'))
params = d.get('A'), d.get('B'), d.get('C'), d.get('D'), d.get('E'), d.get('F'), d.get('G'), d.get('H'), d.get('I'), d.get('J'), d.get('K'), d.get('L')
这将重绘图形区域。为了避免在paintListener中对轴区域进行不必要的计算,paintEvent的gc区域需要重新绘制,称为裁剪。你可以写这样的条件:
Rectangle rect = getGraphBoundries(); //you must implement this method
canvas.redraw(rect.x, rect.y, rect.width, rect.height, true);