0

我正在开发一个程序,该程序需要知道何时展开菜单以便更新其内容(它列出了当前可用的串行端口)。我正在使用 SWT 并为父菜单项 Arm 事件设置一个侦听器。

我创建了一个演示程序来展示我想要的。

package test.window;

import org.eclipse.swt.SWT;

public class Test {

protected Shell shell;

/**
 * Launch the application.
 * @param args
 */
public static void main(String[] args) {
    try {
        Test window = new Test();
        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("SWT Application");

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

    MenuItem mntmNewSubmenu = new MenuItem(menu, SWT.CASCADE);
    mntmNewSubmenu.setText("New SubMenu");

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

    MenuItem mntmItem = new MenuItem(menu_1, SWT.NONE);
    mntmItem.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Item 1 selected");
        }
    });
    mntmItem.setText("Item 1");

    MenuItem mntmPorts = new MenuItem(menu_1, SWT.CASCADE);
    mntmPorts.addArmListener(new ArmListener() {
        public void widgetArmed(ArmEvent arg0) {
            System.out.println("Ports armed");
        }
    });
    mntmPorts.setText("Ports");

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

    MenuItem mntmPort = new MenuItem(menu_2, SWT.NONE);
    mntmPort.addArmListener(new ArmListener() {
        public void widgetArmed(ArmEvent arg0) {
            System.out.println("Port 1 armed");
        }
    });
    mntmPort.setText("Port 1");
    mntmPort.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Port 1 selected");
        }
    });

    MenuItem mntmPort_1 = new MenuItem(menu_2, SWT.NONE);
    mntmPort_1.setText("Port 2");
    mntmPort_1.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Port 2 selected");
        }
    });

    MenuItem mntmItem_1 = new MenuItem(menu_1, SWT.NONE);
    mntmItem_1.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Item 2 selected");
        }
    });
    mntmItem_1.setText("Item 2");

}
}

我希望在显示菜单项“端口 1”和“端口 2”之前打印“端口武装”。这将使我的程序有机会改变“端口 1”和“端口 2”的实际含义。

对我来说,“端口武装”绝不是打印机(也不是“端口 1 武装”),但是当单击项目时会触发选择事件。

我正在 Ubuntu 13.04 上对此进行测试。

4

1 回答 1

0

虽然我从未触发 Arm 事件,但 Show 事件对我来说已经足够好了。

可以在此处找到 Show、Hide 和 Arm 侦听器的示例http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src /org/eclipse/swt/snippets/Snippet152.java

于 2013-08-20T17:00:07.650 回答