gpt4 book ai didi

java - SWT - 继承父对话框外壳?

转载 作者:行者123 更新时间:2023-12-01 15:05:07 26 4
gpt4 key购买 nike

我真的需要了解父/子对话框的工作原理。

我的用户使用名为 Teamcenter 的 OTB 应用程序。我正在编写一个附加应用程序,该应用程序是从 Teamcenter 应用程序中的菜单选择调用的。

当他们单击菜单项时,会执行处理程序类并为我的应用程序创建基本对话框。

public class AplotDialogHandler extends AbstractHandler {
private static AplotBaseDialog dlg = null;

public AplotDialogHandler() {

}// end Constructor

//////////////////////////////////////////////////////////////////////////
// execute() //
//////////////////////////////////////////////////////////////////////////
@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
if (dlg == null) {
try {
AbstractAIFApplication app = AIFDesktop.getActiveDesktop().getCurrentApplication();
TCSession session = (TCSession) app.getSession();
TCUserService userService = session.getUserService();

AplotVersion.negotiateVersion(userService);
AplotQueryCapabilities.initialize(userService);

dlg = new AplotBaseDialog(null, session);
}
catch (Exception ex) {
MessageBox.post(HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell(), ex, true);
}
}

dlg.create();
dlg.getShell().setSize(700, 400);
dlg.open();

return null;
}// end execute()
}// end EdiDialogHandler()

问题 1. 我的应用程序似乎未与 Teamcenter 应用程序绑定(bind)。这意味着我可以关闭 Teamcenter,而我的应用程序保持打开状态。

问题 2. 我应该获取工作区 shell 并将其传递到基本对话框中吗?但即使我的应用程序打开,用户仍然需要能够使用 Teamcenter 应用程序来选择要发送到我的应用程序的数据

问题 3. 当从基本对话框打开对话框时,我是否应该始终将基本对话框 shell 传递给这些对话框?

问题 4. 当用户完成操作时,是否有标准方法可以关闭对话框?

最佳答案

您需要将父 Shell 传递给对话框,以便当您关闭父 Shell 时,子 Shell 也会被关闭。

您应该将对话框设置为 MODELESS(使用 SWT.MODELSS 作为样式。注意:这是提示),这样它就不会阻塞您的父 shell。

这里是示例代码:

 public static void main(String[] args) {

Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
shell.setSize(200, 200);
Button b = new Button(shell, SWT.NONE);
b.setText("Click");
b.addSelectionListener(new SelectionListener() {

@Override
public void widgetSelected(SelectionEvent e) {


CDialog dialog = new CDialog(shell);

dialog.open();
}

@Override
public void widgetDefaultSelected(SelectionEvent e) {

// TODO Auto-generated method stub

}
});

shell.open();



while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}


private static class CDialog extends Dialog
{

/**
* @param parentShell
*/
protected CDialog(Shell parentShell) {

super(parentShell);
}

/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {

Composite comp = (Composite) super.createDialogArea(parent);

Label lbl = new Label(comp, SWT.NONE);
lbl.setText("Test modeless dialog");

return comp;
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#getShellStyle()
*/
@Override
protected int getShellStyle() {
return SWT.DIALOG_TRIM|SWT.MODELESS;
}

}

关于java - SWT - 继承父对话框外壳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com