繁体   English   中英

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

[英]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)以启用相关事件的处理,然后重写processMouseEventprocessMouseMotionEvent以进行处理。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM