[英]replace handleEvent(Event e) by processEvent(AWTEvent e)
在用processEvent
替换已弃用的函数handleEvent
时,我找不到转换代码的方法。 有人可以帮忙吗?
如何在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
}
谢谢,
新的(相对而言 - 自Java 1.1以来它一直存在)而不是包含所有内容的单个Event
类, AWTEvent
方法是为不同的目的使用不同的AWTEvent
子类。 在您的情况下,它是您感兴趣的MouseEvent
子类,因此您需要调用enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK)
以启用相关事件的处理,然后重写processMouseEvent
和processMouseMotionEvent
以进行处理。
但处理事件的首选方法不是覆盖process*
方法,而是注册单独的侦听器对象。 在您的情况下,您将创建另一个类(可能是主要内部类中的内部类),它是MouseAdapter
的子类,覆盖其中的相关事件挂钩方法,然后通过调用addMouseListener
和addMouseMotionListener
来注册适配器类的实例。主要成分。
有关如何在AWT或Swing应用程序中实现事件处理的Oracle网站 (以及其他地方)有大量文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.