java - 通过 MenuItem 触发方法

标签 java eclipse windowbuilder

我尝试通过单击 MenuItem 来调用方法,因此(基本上)会打开另一个窗口。

我的标准方法是使用这个:

        mntmAbout.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            About.main(null);
            }
        };

其中mntmAboutMenuItem。但是,这是不可能的,因为 Eclipse 警告我 addActionListener 不是 MenuItem 类型的已知方法。

整个类是通过在 WindowBuilder 中设计 UI 来构建的,所以我猜想此功能需要不同的方法,因为我正在处理 MenuItem 而不是 JMenuItem。 (或者我在这里错过了一些完全不同的东西)

该类的完整源代码:

package kingfisher;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.SWT;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import java.awt.event.*;


public class ControlPanel {

    protected Shell shell;

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String[] args) {
        try {
            ControlPanel window = new ControlPanel();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Open the window.
     */
    public void open() {
        Display display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    /**
     * Create contents of the window.
     */
    protected void createContents() {
        shell = new Shell();
        shell.setSize(450, 300);
        shell.setText("Control Panel");

        CLabel lblNewLabel = new CLabel(shell, SWT.NONE);
        lblNewLabel.setImage(SWTResourceManager.getImage(ControlPanel.class, "/kingfisher/rsz_1rsz_icon.png"));
        lblNewLabel.setBounds(97, 10, 256, 200);
        lblNewLabel.setText("");

        Label lblNewLabel_1 = new Label(shell, SWT.SHADOW_IN | SWT.CENTER);
        lblNewLabel_1.setBounds(194, 216, 61, 17);
        lblNewLabel_1.setText("Kingfisher");

        Menu menu = new Menu(shell, SWT.BAR);
        shell.setMenuBar(menu);

        MenuItem mntmControl = new MenuItem(menu, SWT.CASCADE);
        mntmControl.setText("Control");

        Menu menu_1 = new Menu(mntmControl);
        mntmControl.setMenu(menu_1);

        MenuItem mntmQuit = new MenuItem(menu_1, SWT.NONE);
        mntmQuit.setText("Quit");

        MenuItem mntmWindows = new MenuItem(menu, SWT.CASCADE);
        mntmWindows.setText("Windows");

        Menu menu_2 = new Menu(mntmWindows);
        mntmWindows.setMenu(menu_2);

        MenuItem mntmChat = new MenuItem(menu_2, SWT.NONE);
        mntmChat.setText("Chat");

        MenuItem mntmContacts = new MenuItem(menu_2, SWT.NONE);
        mntmContacts.setEnabled(false);
        mntmContacts.setText("Contacts");

        MenuItem mntmSettings = new MenuItem(menu_2, SWT.NONE);
        mntmSettings.setEnabled(false);
        mntmSettings.setText("Settings");

        MenuItem mntmHelp = new MenuItem(menu, SWT.CASCADE);
        mntmHelp.setText("Help");

        Menu menu_3 = new Menu(mntmHelp);
        mntmHelp.setMenu(menu_3);

        MenuItem mntmAbout = new MenuItem(menu_3, SWT.NONE);
        //HERE BE CODE
        mntmAbout.setText("About");

    }
}

最佳答案

对于 SWT,您使用 addSelectionListener

mntmAbout.addSelectionListener(new SelectionAdapter() {
  @Override
  public void widgetSelected(final SelectionEvent event)
  {
    // TODO Your code
  }
});

SWT 是一个与 Swing/AWT 完全不同的工具包,并且不使用任何 java.awt 代码。

关于java - 通过 MenuItem 触发方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39393262/

相关文章:

java - 将 JPanel 与 WindowBuilder 重叠用于 eclipse

java - 删除 .java 后,其 .class 文件似乎仍在某处,如何清理我的 eclipse 项目?

eclipse - 找不到CMake和Eclipse CDT : Launch failed.二进制

firefox - 将火狐降级到8

java - Cobertura 未显示继承类的覆盖范围

java - 对于大型项目,如何有效地将基于maven的项目导入到Eclipse中?

java - Eclipse 中的 windowbuilder,不确定如何显示窗口

java - 如何使用二维创建二维网格。大批?

java - 如何查找两个 LocalDateTime 之间插入的所有 MongoDB 文档

java - 执行大量插入