gpt4 book ai didi

java - 捕获关于、首选项和退出菜单项

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:33 25 4
gpt4 key购买 nike

我正在使用当前版本的 SWT 构建我的应用程序,我想在 Mac OS X (Yosemite) 下运行它。
我现在的问题是,我无法捕获对自动添加到我的应用程序的“关于”、“首选项”和“退出”菜单项的点击。
我已经搜索了很多,发现以下类(class)对我很有帮助 http://www.transparentech.com/files/CocoaUIEnhancer.java .

这是我初始化它的代码:

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

public class Test {
private Display display;
private Shell shell;

public Test(Display display) {
this.display = display;
initUI();
}

public void open() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}

private void initUI() {
shell = new Shell(display);
shell.setSize(808, 599);
shell.setText("Test");

AboutHandler aboutHandler = new AboutHandler();
PreferencesHandler preferencesHandler = new PreferencesHandler();
QuitHandler quitHandler = new QuitHandler();

CocoaUIEnhancer uienhancer = new CocoaUIEnhancer("Test");
uienhancer.hookApplicationMenu(display, quitHandler, aboutHandler, preferencesHandler);
}

private class AboutHandler implements Listener {
public void handleEvent(Event e) {
}
}

private class PreferencesHandler implements Listener {
public void handleEvent(Event e) {
}
}

private class QuitHandler implements Listener {
public void handleEvent(Event e) {
}
}
}

我可以毫无错误地编译它,但是如果我启动程序,那么我将得到以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: actionProc
at org.eclipse.swt.internal.Callback.bind(Native Method)
at org.eclipse.swt.internal.Callback.<init>(Unknown Source)
at org.eclipse.swt.internal.Callback.<init>(Unknown Source)
at org.eclipse.swt.internal.Callback.<init>(Unknown Source)
at CocoaUIEnhancer.initialize(CocoaUIEnhancer.java:124)
at CocoaUIEnhancer.hookApplicationMenu(CocoaUIEnhancer.java:92)
at Test.initUI(Test.java:50)
at Test.<init>(Test.java:18)

这可能是 native 库中的错误,但我无法弄清楚!

最佳答案

我根本没有使用 CocoaUIEnhancer,因为它也引起了问题。

所以这就是我最终在我的应用程序中所做的事情:

/**
* Convenience method that takes care of special menu items (About, Preferences, Quit)
*
* @param name The name of the menu item
* @param parent The parent {@link Menu}
* @param listener The {@link Listener} to add to the item
* @param id The <code>SWT.ID_*</code> id
*/
private void addMenuItem(String name, Menu parent, Listener listener, int id)
{
if (OSUtils.isMac())
{
Menu systemMenu = Display.getDefault().getSystemMenu();

for (MenuItem systemItem : systemMenu.getItems())
{
if (systemItem.getID() == id)
{
systemItem.addListener(SWT.Selection, listener);
return;
}
}
}

/* We get here if we're not running on a Mac, or if we're running on a Mac, but the menu item with the given id hasn't been found */
MenuItem item = new MenuItem(parent, SWT.NONE);
item.setText(name);
item.addListener(SWT.Selection, listener);
}

只需分别用SWT.ID_PREFERENCESSWT.ID_ABOUTSWT.ID_QUIT 调用它。提交后备菜单项名称、后备 Menu 以及您要添加到菜单项的实际 Listener

例如:

addMenuItem("Quit", myMenu, new Listener()
{
@Override
public void handleEvent(Event event)
{
// Close database connection for example
}
}, SWT.ID_QUIT);

关于java - 捕获关于、首选项和退出菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409679/

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