我正在开发一个程序,该程序需要知道何时展开菜单以便更新其内容(它列出了当前可用的串行端口)。我正在使用 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 上对此进行测试。