有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Eclipse画布侦听器从未调用

我正在为eclipse创建一个编辑器扩展,并为编辑器的一部分创建一个编辑器,我需要绘制简单的图形部分。据我所知,我应该能够为此使用eclipse小部件画布。但从未调用添加到画布的PaintListener的paintControl方法。我假设我遗漏了一些关键的简单部分,但我找不到。下面是在画布上创建、添加和调用redraw的代码

void createGraphicPage() {
    Composite composite = new Composite(getContainer(), SWT.NONE);
    drawWidget = new Canvas(composite, SWT.NONE);

    FormLayout layout = new FormLayout();
    drawWidget.setLayout(layout);
    drawWidget.addPaintListener(new PaintListener() {
        @Override
        public void paintControl(PaintEvent e) {
            System.out.println("inDrawWidget");
            Rectangle r = drawWidget.getClientArea();
            e.gc.drawOval(0, 0, r.width, r.height);
        }
    });
    drawWidget.redraw();
    int index = addPage(composite);
    setPageText(index, "Graphics Editor");
}

共 (1) 个答案

  1. # 1 楼答案

    您需要在包含控件的每个Composite上设置布局,并且通常在控件上设置布局数据。因此:

    Composite composite = new Composite(getContainer(), SWT.NONE);
    composite.setLayout(new GridLayout());
    
    Canvas drawWidget = new Canvas(composite, SWT.NONE);
    drawWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    
    drawWidget.addPaintListener(new PaintListener() {
        @Override
        public void paintControl(final PaintEvent e) {
            System.out.println("inDrawWidget");
            final Rectangle r = drawWidget.getClientArea();
            e.gc.drawOval(0, 0, r.width, r.height);
        }
    });
    

    我已经在Composite中添加了GridLayout,在Canvas中添加了GridData布局数据。GridData使Canvas使用所有可用空间