Java SWT Arm事件不工作
我正在开发一个程序,需要知道菜单何时展开,以便更新其内容(它列出了当前可用的串行端口)。我正在使用SWT并为Arm事件的父菜单项设置侦听器 我创建了一个演示程序来展示我想要的东西Java SWT Arm事件不工作,java,events,swt,listener,Java,Events,Swt,Listener,我正在开发一个程序,需要知道菜单何时展开,以便更新其内容(它列出了当前可用的串行端口)。我正在使用SWT并为Arm事件的父菜单项设置侦听器 我创建了一个演示程序来展示我想要的东西 package test.window; import org.eclipse.swt.SWT; public class Test { protected Shell shell; /** * Launch the application. * @param args */ public static
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");
}
}
我希望在显示菜单项“Port 1”和“Port 2”之前打印“Ports armed”。这将使我的程序有机会改变“端口1”和“端口2”实际上是什么
对我来说,“端口已启用”从来都不是打印机(也不是“端口1已启用”),但单击项目时会触发选择事件
我正在Ubuntu 13.04上测试这一点。虽然我从未启动过Arm事件,但对我来说,这场表演活动已经足够好了
在这里可以找到Show、Hide和Arm侦听器的示例。奇怪的是,我在Ubuntu 13.04上使用了
org.eclipse.swt.gtk.linux-3.3.0-v3346
。我从4.3开始,试了3.7和3.3罐,但都没有用。我从下载了SWT二进制文件,并在eclipse中将JAR添加到我的构建路径中。还有什么需要做的吗?不知道,可以使用4.3版本,也可能是Java版本吗?我使用的是1.7OpenJDK。我尝试了OpenJDK1.7,效果良好