如何实现鼠标监听器

时间:2016-09-06 12:06:36

标签: java mouseevent actionlistener

有点像菜鸟问题,但话又说回来,我是个菜鸟。我正在尝试实现一种“通用”鼠标监听器。也就是说,当我单击屏幕上的任何对象时,它会运行特定数量的代码。我有下面的当前解决方案,但我想要运行的代码对于10个不同的对象是相同的,所以这变得相当繁琐。

        difference2 = new JLabel(new ImageIcon("transparent.png")); 
        difference2.setBounds(645,490,10,10); //left, top, width, height
        contentPane.add(difference2);
        difference2.setVisible(true);
        difference2.addMouseListener(new MouseAdapter()
            {
                public void mouseClicked(MouseEvent e) {
//code
}
            });

我知道我可以创建一个单独的方法,如下面的

public void mouseClicked(MouseEvent e) {
        JOptionPane.showMessageDialog(null,"this would be nice");
    }

但我无法弄清楚如何在每个对象上设置鼠标监听器。 JOptionPane目前什么也没做。

2 个答案:

答案 0 :(得分:2)

您可以创建一个扩展MouseAdapter的匿名类的实例,并将其分配给您可以重用的变量(在这种情况下为myMouseListener):

MouseListener myMouseListener = new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        JOptionPane.showMessageDialog(null,"this would be nice");
    }   
};

difference2.addMouseListener(myMouseListener);
aSecondObject.addMouseListener(myMouseListener);
aThirdObject.addMouseListener(myMouseListener);
...

答案 1 :(得分:2)

我可能误读了你的问题,但如果你想在各种对象上使用相同的mouselistener,你可以将监听器的实例存储在变量中一次,然后将其添加到你想要添加到的任何gui对象中。

MouseListener ml = new MouseListener() {
    @Override
    public void mouseReleased(MouseEvent e) {//code}

    @Override
    public void mousePressed(MouseEvent e) {//code}

    @Override
    public void mouseExited(MouseEvent e) {//code}

    @Override
    public void mouseEntered(MouseEvent e) {//code}

    @Override
    public void mouseClicked(MouseEvent e) {//code}
};

JLabel j1 = new JLabel("Label1");
j1.addMouseListener(ml);
JLabel j2 = new JLabel("Label2");
j2.addMouseListener(ml);