Warum wird der MenuItem-Listener nicht auf einem Canvas ausgeführt? Bitte beachten Sie das Testprogramm unten. Sie würden erwarten, dass das "Got Here" auf die Konsole gedruckt wird.Java SWT: Warum wird der MenuItem-Listener nicht auf einem Canvas ausgeführt?
import java.util.ArrayList;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
public class MenuListenerTest {
//BufferedImage bitmapImage = null;
Image image = null;
Canvas canvas = null;
private void createContents(Shell shell) {
shell.setLayout(new FillLayout());
// Create a canvas to draw on
canvas = new Canvas(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.NO_REDRAW_RESIZE | SWT.DOUBLE_BUFFERED);
final Menu pixelContextMenu = new Menu(canvas);
canvas.setMenu(pixelContextMenu);
final MenuItem resetImageItem = new MenuItem(pixelContextMenu, SWT.NONE);
resetImageItem.setText("Reset Image");
resetImageItem.addListener(SWT.MenuDetect, new Listener() {
@Override
public void handleEvent(Event event) {
int x = event.x;
int y = event.y;
System.out.println("Got here");
}
});
}
public static void main(String[] args)
{
new MenuListenerTest().run();
}
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
createContents(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
/**
* Creates the main window's contents
*
* @param shell the main window
*/
}
wollen Sie das Ereignis ausgelöst, wenn das Menü sichtbar werden, oder wenn die 'MenuItem' gedrückt werden? –
@LorisSecuro Wenn das MenuItem gedrückt wird –