java - 将 handleEvent(Event e) 替换为 processEvent(AWTEvent e)

标签 java

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 以来就已经存在)AWTEvent 方法不是包含所有内容的单个 Event 类,而是拥有 的不同子类>AWTEvent 用于不同目的。在您的情况下,它是您感兴趣的 MouseEvent 子类,因此您需要调用 enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK) 来启用相关事件的处理,然后重写 processMouseEventprocessMouseMotionEvent 来进行处理。

但是处理事件的首选方法不是重写process*方法,而是注册单独的监听器对象。在您的情况下,您将创建另一个类(可能是主类中的内部类),它是 MouseAdapter 的子类,重写其中的相关事件 Hook 方法,然后通过以下方式注册适配器类的实例在主组件上调用 addMouseListeneraddMouseMotionListener

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

关于java - 将 handleEvent(Event e) 替换为 processEvent(AWTEvent e),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407873/

相关文章:

java - Tomcat中两个war之间的互通

java - Swing - 下拉面板

java - 如何在 Eclipse (Mylyn/Team) 中访问 ChangeSets?

java - Joda DateTimeFormatter 知道上午还是下午

java - 如何命名 JAXB 类?

java - 如何使用 Falcon RESTful API 获取 URI

java - ObjectMapper 将日期更改为字符串

java - 如何实现自定义 ConstraintValidatorFactory 以便在自定义 validator 中使用 @Autowiring

java - 在Eclipse(STS)中设置两个maven git项目的master分支

java - 捕获服务器响应