这无疑是一个微不足道的问题,但我似乎无法弄清楚我做错了什么。情况很简单:我有一个应用程序,它创建了一个额外的对话框窗口来向用户显示一些东西。主应用程序有一个菜单栏,其中包含具有键盘快捷键的菜单项。当我使用键盘快捷键调用菜单项并且主程序创建新窗口时,当用户关闭新窗口并再次显示主应用程序时,菜单栏项保持突出显示/“打开”外观. 使用 SWT 4.2 复制我在 Mac OS 上看到的代码是这样的:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
public class tester
{
public static void createShell(Shell parent) {
final Shell newShell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE);
newShell.setSize(100,100);
newShell.setLayout(new FillLayout());
Button closeButton = new Button(newShell, SWT.NONE);
closeButton.setText("Close");
closeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
newShell.close();
}
});
newShell.open();
}
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setSize(200, 100);
Menu menuBar = new Menu(shell, SWT.BAR);
shell.setMenuBar(menuBar);
MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
item.setText("Foo");
Menu fooMenu = new Menu(item);
item.setMenu(fooMenu);
MenuItem barMenu = new MenuItem(fooMenu, SWT.NONE);
barMenu.setText("Menu item");
barMenu.setAccelerator(SWT.MOD1 + 'F');
barMenu.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
createShell(shell);
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
要重现该问题,请运行上述程序,从键盘调用 Command-F,然后单击创建的窗口中的“关闭”按钮。它将关闭第二个窗口并返回原始窗口。这是我这样做后的示例:
问题是“Foo”如何保持突出显示。我希望它不会保持突出显示。事实上,如果我拉下菜单并选择菜单项,它不会保持突出显示,所以使用键盘快捷键会导致这种情况有一些特定的东西,但我正在努力弄清楚那是什么可能。
有人可以告诉我我做错了什么吗?