這無疑是一個微不足道的問題,但我似乎無法弄清楚我做錯了什麼。情況非常簡單:我有一個應用程序創建一個額外的對話窗口向用戶顯示一些內容。主應用程序有一個帶有鍵盤快捷鍵的菜單項的菜單欄。當我使用鍵盤快捷方式調用菜單項時,主程序創建新窗口,則當用戶關閉新窗口並再次顯示主應用程序時,菜單欄項目保持高亮顯示/「打開「看。複製我所看到的在Mac OS使用SWT 4.2的代碼是這樣的:Java SWT菜單欄項目在創建子框架後「卡住」
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();
}
}
複製的問題,運行上面的程序,從鍵盤調用命令-F,然後點擊「關閉」按鈕在創建的窗口中。它會關閉第二個窗口並返回到原始窗口。這裏是什麼樣子後,我做的一個例子:
的問題是「富」如何保持突出顯示。我希望它不會突出顯示。事實上,它確實而不是保持高亮,如果我拉下菜單並選擇菜單項,所以有一些具體的關於使用鍵盤快捷鍵,導致這一點,但我在我的智慧'結束試圖找出那可能是什麼。
有人可以告訴我我做錯了什麼嗎?
良好的偵探工作:-)。謝謝!我可以證實這個作品。 – mhucka 2013-04-05 21:44:25