gpt4 book ai didi

java - 如何等待一个shell从swt中的另一个shell关闭?

转载 作者:行者123 更新时间:2023-12-04 05:56:18 26 4
gpt4 key购买 nike

我正在 SWT 中创建一个程序。我有第一个 shell ,上面有“添加用户”按钮。
当您单击按钮时,会出现第二个 shell 。
在这种情况下,第一个 shell 仍然是可点击和可聚焦的。我无法理解如何避免在第二个 shell 关闭之前第一个 shell 是可聚焦的。

此行为是对话框的默认行为,但我希望 shell 具有相同的行为。你知道我怎样才能得到它吗?

我用来打开第二个 shell 的代码是这样的:

Display display = Menu.this.getDisplay();
AddEditUser shell = new AddEditUser(display);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}

谢谢

我遵循了您的建议,现在行为正常,但是现在第二个 shell 没有如图所示的顶部栏。
window without top bar

最佳答案

使用 SWT.SYSTEM_MODALSWT.APPLICATION_MODAL用于第二 shell 样式

enter image description here

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class ShellTest {

public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout());

Button b = new Button(shell, SWT.PUSH);
b.setText("Open Shell");
b.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
openNewShell(shell);
}
});
shell.setSize(250, 150);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

protected static void openNewShell(final Shell shell)
{
Shell child = new Shell(shell, SWT.TITLE|SWT.SYSTEM_MODAL| SWT.CLOSE | SWT.MAX);
child.setSize(100, 100);
child.setLayout(new GridLayout());
child.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

child.open();
}
}

关于java - 如何等待一个shell从swt中的另一个shell关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9483453/

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