gpt4 book ai didi

java - 自定义 View 内的框架

转载 作者:行者123 更新时间:2023-12-01 11:06:23 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com