SWT 如何在Canvas上点击右键能显示出一个右键菜单 SWT 如何在Canvas上点击右键能显示出一个右键菜单?最近做一个SWT的小东西,自己用canvas画了一个组件,但是,想添加右键菜单却遇到了困难。在canvas上加不上右键菜单。有没有做过的教教小弟谢了先~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [Quote=引用 1 楼 liguang168 的回复:]把代码拿上来看看。 回复内容太短了![/Quote]我要是有代码就不上来求教了 不懂,按理说很简单的啊...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() {}} 兄弟你太强了你是怎么学SWT的阿?能教教小弟么指点一下,看什么书,或者上什么网站,或者你有bolg的话也行,谢了~~~ swt的话,用windowbuilder,太方便了。 你好。我现在想自己写一个SWT组件,右键事件那个看了你的代码解决了。但是问题又来了.写的这个组件需要画在composite中。在构造函数中就有定位的信息。我怎么在new该对象的时候就在composite上画好这个组件呢?画组件需要一个GC吧,canvas有一个addpaintlistener的方法,在这里可以有e.gc.draw*,但是我现在是想点击一个button,然后就画这个组件。这里button没有paintevent,我该怎么做才能做到new该对象的时候就能用paintevent来paint这个组件呢? 没找到最终的方法。改变实现方式。将所有的draw代码都在一个.java里实现了。这样在canvas的addpaintlistener里可以画出想要的结果。揭帖。 结了呀!我现在已经做的一个项目也是这样的,自己做一个组件,组件里有组件的坐标。加到Composite里一样有另外的坐标。还是不完全明白你的。但解决了就好。你用SWT做一个什么样的项目? 我是做毕设的。一个桌面搜索引擎。本来打算用lucene,后来干脆自己写了。做这个一路下来最大的收获就是学习还是要老老实实看书的,不会的再来问朋友们不然很不扎实 JAVA中怎么让窗口的标题栏不显示出来,或者让程序在后台运行,不让人看出来。 j2se高手请进 JDK去哪里找的API 求一个函数,将CLOB里面的内容写入到文本文件 放出自己所有积分跪求一个jar调用问题解决办法~! lucene-------luke 用firefox浏览一个网站的时候提示要安装JRE。jdk里面不是包含了JRE么? 在jbuilder 中我想把图标 加 在panel中怎么加啊 是不是把图标放在同一目录下啊 怎么操作啊 很菜的问题,我要学习java以便到广东工作,应该怎么快速搞定它。 关于JDBC的问题 关于一个基础的循环问题 使人不理解的一个问题
把代码拿上来看看。 回复内容太短了!
[/Quote]我要是有代码就不上来求教了
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() {}}
揭帖。
加到Composite里一样有另外的坐标。还是不完全明白你的。但解决了就好。
你用SWT做一个什么样的项目?