swt 的 菜单

来源:互联网 发布:网络安全技术论文 编辑:程序博客网 时间:2024/05/19 09:16

Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());

//1. Create a bar menu
Menu barMenu = new Menu(shell, SWT.BAR);
//2. Set the bar menu as the main menu for the shell by calling setMenuBar(menu).
shell.setBarMenu(barMenu);
//3. 为 menu 添加按钮项目 0$1 是第0级第0个按钮 SWT.CASCADE 可以增加自按钮
//   这里MenuItem 的构造函数中的 menu 决定 menuItem挂在哪一个菜单下
//   LiIk 是第i级第k个按钮,level/index
MenuItem itemL0I0 = new MenuItem(barMenu, SWT.CASCADE);
itemL0I0.setText("itemL0I0");
MenuItem itemL0I1 = new MenuItem(barMenu, SWT.DOWN);
itemL0I1.setText("itemL0I1");
//4. Create each dropdown menu by calling either new Menu(shell, SWT.DROP_DOWN) or new Menu(barMenu).
//   创建按钮项目的按钮菜单,当然可以写成 menuL0I0 = new Menu(shell, SWT.DROP_DOWN)、
//   menuL0I0 = new Menu(barMenu),和下面的 menuL0I0 = new Menu(itemL0I1);
//   这里的 shell、barMenu、itemL0I1 只是为了让swt级联dispose时能够dispose menuL0I0//   如果写成new Menu(shell, SWT.DROP_DOWN | SWT.NO_RADIO_GROUP),那么该menu中的radio就不再单选了Menu menuL0I0 = new Menu(itemL0I1); //
//5. Set each dropdown into the appropriate bar menu item by calling MenuItem.setMenu(dropdownMenu).
//   关联itemL0I0的菜单为menuL0I0,第 4 步并不是在进行关联
itemL0I0.setMenu(menuL0I0);

//6. 重复 3 - 5,创建 menuL0I0 的子菜单
MenuItem itemL0I0_L1I0 = new MenuItem(menuL0I0, SWT.DOWN);
itemL0I0_L1I0.setText("itemL0I0_L1I0");
MenuItem itemL0I0_L1I1 = new MenuItem(menuL0I0, SWT.CASCADE);
itemL0I0_L1I1.setText("itemL0I0_L1I1");

Menu menuL0I0_L1I1 = new Menu(itemL0I0_L1I1);

itemL0I0_L1I1.setMenu(menuL0I0_L1I1);
/* 又一次重复步骤3 */
MenuItem itemL0I0_L1I1_L2I0 = new MenuItem(menuL0I0_L1I1, SWT.DOWN);
itemL0I0_L1I1_L2I0.setText("itemL0I0_L1I1_L2I0");
MenuItem itemL0I0_L1I1_L2I1 = new MenuItem(menuL0I0_L1I1, SWT.DOWN);
itemL0I0_L1I1_L2I1.setText("itemL0I0_L1I1_L2I1");
MenuItem itemL0I0_L1I1_L2I2 = new MenuItem(menuL0I0_L1I1, SWT.DOWN);
itemL0I0_L1I1_L2I2.setText("itemL0I0_L1I1_L2I2"); 
new MenuItem(menuL0I0_L1I1, SWT.SEPARATOR); MenuItem itemL0I0_L1I1_L2I4 = new MenuItem(menuL0I0_L1I1, SWT.RADIO);
itemL0I0_L1I1_L2I4.setText("itemL0I0_L1I1_L2I4");
MenuItem itemL0I0_L1I1_L2I5 = new MenuItem(menuL0I0_L1I1, SWT.RADIO);
itemL0I0_L1I1_L2I5.setText("itemL0I0_L1I1_L2I5");
itemL0I0_L1I1_L2I5.setSelection(true);
new MenuItem(menuL0I0_L1I1, SWT.SEPARATOR);
 MenuItem itemL0I0_L1I1_L2I6 =  new MenuItem(menuL0I0_L1I1, SWT.RADIO);
itemL0I0_L1I1_L2I6.setText("itemL0I0_L1I1_L2I6");
// itemL0I0_L1I1_L2I5 和 itemL0I0_L1I1_L2I6 与
// itemL0I0_L1I1_L2I7 和 itemL0I0_L1I1_L2I8 不是一个group的,可以同时选择itemL0I0_L1I1_L2I6.setSelection(true);
MenuItem itemL0I0_L1I1_L2I7 = new MenuItem(menuL0I0_L1I1, SWT.RADIO);
itemL0I0_L1I1_L2I7.setText("itemL0I0_L1I1_L2I7");



shell.pack();
shell.open();

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

display.close();
 
 
这里显示的按钮栏,如果要改写为弹出菜单的话,只需要不设置为 SWT.BAR 即可,
把 1 修改为:
    Label label = new Label(shell, SWT.CENTER);
    label.setText("label");
    Menu barMenu = new Menu(label);
把2修改为:
    label.setMenu(barMenu);
 
这也在 label 上右键的时候就有弹出菜单了
 
 

原创粉丝点击