我正在使用商业 CAD/CAM 系统(NX,正式为 Unigraphics)。这有一个我可以开发的 API(使用 Java)。它允许我创建一个 JAR 并从普通的 NX UI 内部执行它。现在我想使用 SWT 创建一个对话框供用户交互。我可以创建一个 Shell 并将其传递给默认的 Display,然后窗口就会完美弹出。我到目前为止的代码如下:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
...
...
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout());
final Label label = new Label(shell, SWT.NONE);
label.setText("Hello, World!");
Button button = new Button(shell, SWT.PUSH);
button.setText("Create lines");
button.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
createLines();
}
@Override
public void widgetSelected(SelectionEvent event) {
createLines();
}
});
shell.pack();
label.pack();
button.pack();
shell.open();
while (!shell.isDisposed())
if (!display.readAndDispatch())
display.sleep();
display.dispose();
label.dispose();
button.dispose();
出现的 SWT 窗口似乎不是 NX 窗口的父窗口,因此如果用户在 NX 窗口中单击,SWT 窗口就会消失在其后面。
我认为我需要做的是获取 NX 窗口的显示(或者可能是外壳?)并将其传递给我的外壳,但我似乎无法找到如何做到这一点。我一直在谷歌上搜索直到头疼,但是所有的“re-parenting”、“set shell”、“make modal”搜索都在谈论现有父 SWT Shell 中的子 Shell。如果这可能的话,有人有任何想法吗?