Java:从MouseListener类访问applet字段

时间:2014-03-30 17:55:46

标签: java swing japplet mouse-listeners

这是非常非常愚蠢的问题。我应该在单独的类中实现鼠标处理,因为我是一个完整的菜鸟,所以我有正确的方法这样做。

这是我的主applet类:

public class MmmuhApplet extends JApplet {
    int x, y;

    // stuff (...)
}

附加课程:

public class MouseProcessing implements MouseListener, MouseMotionListener{

    @Override
    public void mouseClicked(MouseEvent arg0) {
        // I want to pass arg0.getX() to variable x. How?
    }

    // other methods (...)
}

我想到的唯一想法是在MouseProcessing类中存储对MmmuhApplet实例的引用,并通过所述引用从那里访问x / y。这是个好主意吗?

2 个答案:

答案 0 :(得分:2)

  

"我想到的唯一想法是在MouseProcessing类中存储对MmmuhApplet实例的引用,并通过所述引用从那里访问x / y。这是个好主意吗?"

你有正确的想法。你可以做的是通过构造函数注入(或通过引用传递)将applet传递给监听器。然后为你需要的任何领域设置setter。像

这样的东西
public class MmmuhApplet extends JApplet {
    int x, y;

    public void inti() {
        addMouseListener(new MouseProcessing(MmmuhApplet.this));
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }
}

public class MouseProcessing implements MouseListener {
    private MmmuhApplet mmmuh;

    public MouseProcessing(MmmuhApplet mmmuh) {
        this.mmmuh = mmmuh;
    }

    public void mousePressed(MouseEvent e) {
        Point p = e.getPoint();
        mmmuh.setX(p.x);
        mmmuh.setY(p.y);
    }
}

答案 1 :(得分:1)

您可以使用以下方法向MouseListener添加JApplet

public void addMouseListener(MouseListener l)

JAppletComponent继承此方法,如here所述。

我的建议是将MouseProcessing课程作为内部课程安排到MmmuhApplet,如下:

public class MmmuhApplet extends JApplet {
    int x, y;

    public MmmuhApplet(){
         addMouseListener(new MouseProcessing());
    }
    // stuff (...)

    private class MouseProcessing implements MouseListener, MouseMotionListener{

        @Override
        public void mouseClicked(MouseEvent arg0) {
            // I want to pass arg0.getX() to variable x. How?
        }

        // other methods (...)
    }
}