swt 工具栏中添加下拉式的按钮

package rcp;

import org.eclipse.swt.SWT;

 

public class ToolItemDropDownMenu {

 

  public static void main(String[] args) {

    Display display = new Display();

    Shell shell = new Shell(display);

    ToolBar toolBar = new ToolBar(shell, SWT.BORDER | SWT.VERTICAL);

 

    ToolItem item = new ToolItem(toolBar, SWT.DROP_DOWN);

    item.setText("One");

 

    DropdownSelectionListener listenerOne = new DropdownSelectionListener(item);

    listenerOne.add("Option One for One");

    listenerOne.add("Option Two for One");

    listenerOne.add("Option Three for One");

    item.addSelectionListener(listenerOne);

 

    toolBar.pack();

 

    shell.pack();

    shell.open();

    while (!shell.isDisposed()) {

      if (!display.readAndDispatch())

        display.sleep();

    }

    display.dispose();

  }

}

 

class DropdownSelectionListener extends SelectionAdapter {

  private ToolItem dropdown;

 

  private Menu menu;

 

  public DropdownSelectionListener(ToolItem dropdown) {

    this.dropdown = dropdown;

    menu = new Menu(dropdown.getParent().getShell());

  }

 

  public void add(String item) {

    MenuItem menuItem = new MenuItem(menu, SWT.NONE);

    menuItem.setText(item);

    menuItem.addSelectionListener(new SelectionAdapter() {

      public void widgetSelected(SelectionEvent event) {

        MenuItem selected = (MenuItem) event.widget;

        dropdown.setText(selected.getText());

      }

    });

  }

 

  public void widgetSelected(SelectionEvent event) {

    if (event.detail == SWT.ARROW) {

      ToolItem item = (ToolItem) event.widget;

      Rectangle rect = item.getBounds();

      Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));

      menu.setLocation(pt.x, pt.y + rect.height);

      menu.setVisible(true);

    } else {

      System.out.println(dropdown.getText() + " Pressed");

    }

  }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值