java - 自定义 View 内的框架

标签 java view graphics eclipse-plugin swt

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

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

所以我需要的是一个自定义 View ,其构建如下:

Mockup

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

如何在我的 View 中创建这样的区域?它应该只是一个文件,没有任何平移或比例,只是一个独立的区域,就像 View 中的 View ......

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

如果有任何帮助,我将不胜感激!

最佳答案

我建议您添加多个控件并以不同的方式处理不同情况的绘图。

例如,不要只有一个单一的 Canvas 来绘制从图形到坐标再到有用标签的所有内容。在顶部添加一堆标签控件以显示坐标,添加父级或坐标系标签等。

您的createPartControl应如下所示:

    Composite topBar = new Composite(parent, SWT.None);
    topBar.setLayout(new GridLayout(3, false));

    Label title = new Label(topBar, SWT.NONE);
    title.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));

    Label x = new Label(topBar, SWT.NONE);
    Label y = new Label(topBar, SWT.NONE);

    Composite graphArea = new Composite(parent, SWT.NONE);
    graphArea.setLayout(new GridLayout(2, false));

    Canvas xAxis = new Canvas(graphArea, SWT.NONE);
    GridData gd = new GridData(GridData.CENTER, GridData.FILL, false, true);
    gd.widthHint = 10;
    xAxis.setLayoutData(gd);
    xAxis.addPaintListener(new PaintListener() {
        @Override
        public void paintControl(PaintEvent e) {
            drawXAxis();
        }
    });

    Canvas graph = new Canvas(graphArea, SWT.NONE);
    graph.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent e) {
            drawGraph(e);
        }
    });

    Label emptySpace = new Label(graphArea, SWT.NONE);

    Canvas yAxis = new Canvas(graphArea, SWT.NONE);
    GridData gd = new GridData(GridData.FILL, GridData.CENTER, true, false);
    gd.heightHint = 10;
    xAxis.setLayoutData(gd);
    yAxis.addPaintListener(new PaintListener() {
        @Override
        public void paintControl(PaintEvent e) {
            drawYAxis();
        }
    });

关于java - 自定义 View 内的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32904388/

相关文章:

java - 如何缩小/减少android中按钮的点击区域?

mysql - 计算满足条件的行

c++ - 从粗糙点生成三次贝塞尔曲线

java - 构建文件夹中的values.xml 中发生错误

java - MyISAM 存储引擎在 Java Hibernate 中更可取吗?

java - 使用Java的DelayQueue时,是否还要实现equals()和hashCode()?

model-view-controller - 如何将变量从 Controller 传递到 View joomla mvc

java - 不同的分辨率是否需要多个 VBO/DL?

java - 绘制形状在graphics2D中不起作用

java - Netty UDP 服务器可以有多个 eventloop 线程吗?