我使用图像上的过滤器创建图像
private void createContents(final Shell shell) {
shell.setLayout(new FillLayout());
// Create the canvas for drawing
canvas = new Canvas(shell,SWT.NO_BACKGROUND);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent event) {
Image image = new Image(shell.getDisplay(), canvas.getBounds());
Image image2 = new Image(shell.getDisplay(), canvas.getBounds());
//... I add some figure to the images
ImageData data = image.getImageData();
ImageData data2 = image2.getImageData();
for(int j=0;j<rect.width;j++){
for(int i=0;i<rect.height;i++){
if(data.getPixel(j, i)<1){
data.setPixel(j, i , data2.getPixel(j, i));
}
}
}
如何在图中添加一些可点击的对象?
答案 0 :(得分:2)
所以最好的方法是在画布上添加一个鼠标控件监听器吗?
// Create the canvas for drawing
canvas = new Canvas(shell,SWT.NO_BACKGROUND);
canvas.addMouseListener(new MouseListener(){
@Override
public void mouseDoubleClick(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDown(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("Click");
}
@Override
public void mouseUp(MouseEvent e) {
// TODO Auto-generated method stub
}
});
然后控制点击的位置,也许使用Rectangle.containt(int x,int y);
答案 1 :(得分:1)
如果要将对象直接绘制到画布上,即不将它们作为组件/小部件添加到画布,则需要确定自己单击的对象。这是因为画布对你画的内容一无所知。您可以将鼠标侦听器添加到接收单击事件的画布,然后确定是否有任何这些单击位于您绘制的对象的边界内。
您也可以使用可点击的对象类继承Control。然后,将mouseListener添加到自定义Control并将其添加到画布。