自定义视图内的框架

时间:2015-10-02 09:35:10

标签: java view graphics eclipse-plugin swt

我在Eclipse插件项目中实现了一个自定义视图,我希望在其中显示由用户选择的不同图形。创建自定义视图没有问题,使用org.eclipse.swt.graphics.GC并绘制所需的部分,但我想实现以下内容:

在自定义视图中,我希望在视图的边界上有一些固定区域,我可以在其中显示坐标系(x轴和y轴以及相应的标注),这是固定的。在这些边界之间,我想显示图形,该图形根据用户选择动态变化。

所以我需要的是一个自定义视图,它构建如下:

Mockup

在左侧和底部的灰色区域内,我想要坐标系轴(显示为红色),在白色区域内我想绘制图形。

如何在视图中创建这样的区域?它应该只是一个没有任何翻译或尺度的文件,只是一个独立的区域,就像一个视图内的视图......

@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点。但我不知道,如何在我的视图中创建这样的区域。

我将不胜感激任何帮助!

2 个答案:

答案 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);