SWT 如何在Canvas上点击右键能显示出一个右键菜单?最近做一个SWT的小东西,自己用canvas画了一个组件,但是,想添加右键菜单却遇到了困难。在canvas上加不上右键菜单。
有没有做过的教教小弟谢了先~

解决方案 »

  1.   

    [Quote=引用 1 楼 liguang168 的回复:]
    把代码拿上来看看。  回复内容太短了!
    [/Quote]我要是有代码就不上来求教了
      

  2.   

    不懂,按理说很简单的啊...import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.PaintEvent;
    import org.eclipse.swt.events.PaintListener;
    import org.eclipse.swt.widgets.Canvas;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Menu;
    import org.eclipse.swt.widgets.MenuItem;
    import org.eclipse.swt.widgets.Shell;public class RP extends Shell { public static void main(String args[]) {
    try {
    Display display = Display.getDefault();
    RP shell = new RP(display, SWT.SHELL_TRIM);
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public RP(Display display, int style) {
    super(display, style);
    createContents();
    } protected void createContents() {
    setSize(565, 440); final Composite composite = new Composite(this, SWT.NONE);
    composite.setBounds(65, 70, 365, 245); final Canvas canvas = new Canvas(composite, SWT.BORDER);
    canvas.setBounds(70, 45, 200, 100);

    canvas.addPaintListener(new PaintListener(){
    public void paintControl(PaintEvent e) {
    e.gc.drawLine(10, 10, 100, 100);
    }

    }); final Menu menu = new Menu(canvas);
    canvas.setMenu(menu); final MenuItem menuItem = new MenuItem(menu, SWT.NONE);
    menuItem.setText("Menu item"); } protected void checkSubclass() {}}
      

  3.   

    兄弟你太强了你是怎么学SWT的阿?能教教小弟么指点一下,看什么书,或者上什么网站,或者你有bolg的话也行,谢了~~~
      

  4.   

    swt的话,用windowbuilder,太方便了。
      

  5.   

    你好。我现在想自己写一个SWT组件,右键事件那个看了你的代码解决了。但是问题又来了.写的这个组件需要画在composite中。在构造函数中就有定位的信息。我怎么在new该对象的时候就在composite上画好这个组件呢?画组件需要一个GC吧,canvas有一个addpaintlistener的方法,在这里可以有e.gc.draw*,但是我现在是想点击一个button,然后就画这个组件。这里button没有paintevent,我该怎么做才能做到new该对象的时候就能用paintevent来paint这个组件呢?
      

  6.   

    没找到最终的方法。改变实现方式。将所有的draw代码都在一个.java里实现了。这样在canvas的addpaintlistener里可以画出想要的结果。
    揭帖。
      

  7.   

    结了呀!我现在已经做的一个项目也是这样的,自己做一个组件,组件里有组件的坐标。
    加到Composite里一样有另外的坐标。还是不完全明白你的。但解决了就好。
    你用SWT做一个什么样的项目?
      

  8.   

    我是做毕设的。一个桌面搜索引擎。本来打算用lucene,后来干脆自己写了。做这个一路下来最大的收获就是学习还是要老老实实看书的,不会的再来问朋友们不然很不扎实