私は商用CAD/CAMシステム(NX、正式にはUnigraphics)を使用しています。これには、(Javaを使用して)開発できるAPIがあります。これにより、JARを作成し、通常のNXUI内から実行できます。次に、SWTを使用して、ユーザーが対話するためのダイアログを作成します。シェルを作成してデフォルトのディスプレイに渡すと、ウィンドウが完全にポップアップします。私がこれまでに持っているコードは次のとおりです。
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ウィンドウのディスプレイ(またはおそらくシェル?)を取得してそれをシェルに渡すことですが、それを行う方法がわからないようです。頭が痛くなるまでグーグルで検索しましたが、すべての「子育て」、「シェルの設定」、「モーダルの作成」検索はすべて、既存の親SWTShell内の子シェルについて話します。これが可能であるならば、誰かが何か考えを持っていますか?