我正在使用带有映射器和表面的 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();
}
}
});