出于某种原因,当我在 OS X 上运行我的简单 SWT 应用程序时,菜单根本不显示。这个问题不会发生在我编写的其他 SWT 应用程序中,我不确定我是什么做不同的事情。当我运行我的程序时,我在屏幕顶部看到的菜单属于 Eclipse,它恰好是我正在使用的 IDE。此外,虽然 Eclipse 菜单是可见的,但它不能以任何方式单击或响应。
这是菜单现在的样子(避免混淆我的意思):
以下是相关代码:
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.wb.swt.SWTResourceManager;
public class AnalyzerApp {
protected Shell shell;
Display display;
boolean thisIsAMac = SWT.getPlatform().equals("cocoa");
public static void main(String[] args) {
try {
AnalyzerApp window = new AnalyzerApp();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
public void open() {
Display.setAppName("Analyzer");
display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
protected void createContents() {
shell = new Shell();
shell.setSize(832, 526);
shell.setText("Analyzer");
shell.setLayout(new FormLayout());
// Menu
Menu menu = new Menu(shell, SWT.BAR);
shell.setMenuBar(menu);
if(thisIsAMac) menu = display.getMenuBar();
// ^ tried to fix with this, didn't change anything
MenuItem mntmFile = new MenuItem(menu, SWT.CASCADE);
mntmFile.setText("File");
Menu fileMenu = new Menu(mntmFile);
mntmFile.setMenu(fileMenu);
MenuItem mntmNew = new MenuItem(fileMenu, SWT.NONE);
mntmNew.setText("New");
MenuItem mntmOpen = new MenuItem(fileMenu, SWT.NONE);
mntmOpen.setText("Open");
MenuItem mntmSave = new MenuItem(fileMenu, SWT.NONE);
mntmSave.setText("Save");
MenuItem mntmSaveAs = new MenuItem(fileMenu, SWT.NONE);
mntmSaveAs.setText("Save As");
new MenuItem(fileMenu, SWT.SEPARATOR);
MenuItem mntmImport = new MenuItem(fileMenu, SWT.NONE);
mntmImport.setText("Import");
}
}