通过processEvent(AWTEvent e)替换handleEvent(事件e)

时间:2014-01-28 14:12:00

标签: java

在用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
}

谢谢,

1 个答案:

答案 0 :(得分:2)

而不是包含所有内容的单个Event类,新的(相对而言 - 自Java 1.1以来一直存在)AWTEvent方法是为了不同目的而拥有AWTEvent的不同子类。在您的情况下,它是您感兴趣的MouseEvent子类,因此您需要调用enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK)来启用相关事件的处理,然后覆盖processMouseEventprocessMouseMotionEvent做处理。

但处理事件的首选方法不是覆盖process*方法,而是注册单独的侦听器对象。在您的情况下,您将创建另一个类(可能是主要内部类中的内部类),它是MouseAdapter的子类,覆盖其中的相关事件挂钩方法,然后通过调用两个{注册适配器类的实例主要组件上有{1}}和addMouseListener

有关如何在AWT或Swing应用程序中实现事件处理的大量文档on the Oracle website(以及其他地方)。