在用handleEvent
替换已弃用的函数processEvent
时,我无法找到转换代码的方法。有人可以帮忙吗?
如何在processEvent上获取x,y和事件的id?
这是我的功能:
public boolean handleEvent(Event evt) {
if (evt.target == this) {
// move floatting text zone
if (dragingTextZone == true) {
this.posStr.x = evt.x;
this.posStr.y = evt.y;
repaint(this.posStr.x,
this.posStr.y,
1000,
(int) (_imageViewer.getCurrent_font().getSize() * _imageViewer.getScalefactor()));
if (evt.id == Event.MOUSE_DOWN) {
dragingTextZone = false;
addTextToPicture();
}
}
if (evt.id == Event.MOUSE_DRAG) {
if (dragitem.isDragging()) {
repaint(dragitem.getX(),
dragitem.getY(),
dragitem.getWidth(),
dragitem.getHeight());
dragitem.drag(evt.x, evt.y);
repaint(dragitem.getX(),
dragitem.getY(),
dragitem.getWidth(),
dragitem.getHeight());
}
}
else {
if (evt.id == Event.MOUSE_UP) {
// setting crop zone
if (dragingCropZone || dragingMask) {
endDrag(evt);
}
else if (dragingLine) {
addLineToPicture();
endDrag(evt);
}
}
if (evt.id == Event.MOUSE_DOWN) {
if (getEditMode() == EDTMODE_ALL) {
if (evt.modifiers == Event.CTRL_MASK) {
startDragHighLight(evt);
}
else if (evt.modifiers == Event.ALT_MASK) {
startDragLine(evt);
}
else {
if (clickedOnFocusedItem(evt)) {
startDragMask(evt);
}
}
}
}
}
}
return super.handleEvent(evt); // This passess the mouse click back up to Applet
}
谢谢,
答案 0 :(得分:2)
而不是包含所有内容的单个Event
类,新的(相对而言 - 自Java 1.1以来一直存在)AWTEvent
方法是为了不同目的而拥有AWTEvent
的不同子类。在您的情况下,它是您感兴趣的MouseEvent
子类,因此您需要调用enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK)
来启用相关事件的处理,然后覆盖processMouseEvent
和processMouseMotionEvent
做处理。
但处理事件的首选方法不是覆盖process*
方法,而是注册单独的侦听器对象。在您的情况下,您将创建另一个类(可能是主要内部类中的内部类),它是MouseAdapter
的子类,覆盖其中的相关事件挂钩方法,然后通过调用两个{注册适配器类的实例主要组件上有{1}}和addMouseListener
。
有关如何在AWT或Swing应用程序中实现事件处理的大量文档on the Oracle website(以及其他地方)。