1

我正在使用带有映射器和表面的 jzy3d/SWT 以及此代码来创建图表(容器是与 gridLayout 的组合):

Settings.getInstance().setHardwareAccelerated(true);
jzy3DChart = SWTChartComponentFactory.chart(container);
((CanvasNewtSWT)jzy3DChart.getCanvas()).setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
jzy3DChart.black();
jzy3DChart.getScene().getGraph().add(surface);
ChartLauncher.openChart(jzy3DChart);

我在初始创建时得到了这个渲染: 在此处输入图像描述

But when another part is selected, the newt window always stay on top (chart3 is 2D chart and should be on top) : 在此处输入图像描述

我尝试使用以下方法切换 newt 窗口的可见性:

newtCanvasSWT.getNEWTChild().setVisible(false/true);

但是这样做,newt 窗口变得独立并且不再嵌入到它的 SWT 容器中,并且可以在不应该的时候在其他控件下消失。

在此处输入图像描述

我究竟做错了什么 ?如何设置 newt 窗口不总是在顶部?

编辑 :

这是我使用的解决方法代码:

getSite().getPage().addPartListener(new IPartListener2() {
    @Override
    public void partHidden(IWorkbenchPartReference partRef) {
        // Dispose jsyz3d chart composite when this part is hidden
        if(partRef.getPart(false) == XYZChartEditor.this) {
            if(chart != null) {
                chart.dispose();
                chart = null;
            }
        }
    }
    @Override
    public void partVisible(IWorkbenchPartReference partRef) {
        // Refresh or rebuild chart when this part reappears
        if(partRef.getPart(false) == XYZChartEditor.this) {
            if(chart != null) {
                // Force chart parent composite to layout
                chartContainer.layout();
                return;
            }
            // Rebuild chart
            chart = SWTChartFactory.chart(chartContainer, Quality.Nicest());
            chart.getView().setViewPoint(xyzChartData.getViewPoint());   
            chart.getView().addViewPointChangedListener(XYZChartEditor.this);
            chart.black();
            ChartLauncher.openChart(chart);
            // Force chart parent composite to layout
            chartContainer.layout();
            boolean wasDirty = XYZChartEditor.this.isDirty();
            SelectionChangedEvent event = new SelectionChangedEvent(trialsListViewer, trialsListViewer.getSelection());
            XYZChartEditor.this.selectionChanged(event);
            if(!wasDirty) XYZChartEditor.this.setDirty(false);
            ((CanvasNewtSWT)chart.getCanvas()).addMouseListener(XYZChartEditor.this);       
            canvas = ((CanvasNewtSWT) chart.getCanvas());
            newtCanvasSWT = canvas.getCanvas();
            newtWindow = ((CanvasNewtSWT) chart.getCanvas()).getCanvas().getNEWTChild();
        }
    }
});
4

0 回答 0