Java MouseListener - PullRequest
       33

Java MouseListener

13 голосов
/ 19 апреля 2010

У меня есть куча JLabels, и я хотел бы отлавливать события щелчка мышью. на данный момент мне нужно использовать:

public void mouseClicked(MouseEvent arg0) {

}

public void mouseExited(MouseEvent arg0) {

}

public void mouseEntered(MouseEvent arg0) {

}

public void mousePressed(MouseEvent arg0) {

}

public void mouseReleased(MouseEvent arg0) {

    System.out.println("Welcome to Java Programming!"); 
}

Мне было интересно, есть ли более аккуратный способ сделать это вместо того, чтобы иметь кучу событий, которые я не хочу ловушкой?

EDIT:

    class MyAdapter extends MouseAdapter {
    public void mouseClicked(MouseEvent event) {

        System.out.println(event.getComponent());
    }
}

вышесказанное работает, но netBeans говорит добавить аннотацию @override. что это значит?

РЕДАКТИРОВАТЬ: хорошо понял. исправлено и решено.

Ответы [ 6 ]

23 голосов
/ 19 апреля 2010

Использование MouseAdapter()

Абстрактный класс адаптера для получения событий мыши. Методы в этом классе пусты. Этот класс существует как удобство для создания объектов слушателя. Поэтому вам нужно реализовать только тот метод, который вам нравится, например, следующий пример:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainClass extends JPanel {

  public MainClass() {

      addMouseListener(new MouseAdapter() { 
          public void mousePressed(MouseEvent me) { 
            System.out.println(me); 
          } 
        }); 

  }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new MainClass());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(200, 200);
    frame.setVisible(true);
  }
}
7 голосов
/ 19 апреля 2010

Можно использовать класс MouseAdapter, который реализует интерфейс MouseListener, поэтому не нужно реализовывать все методы.

Однако, переопределив методы, представляющие интерес, можно получить желаемое поведение. Например, если переопределить метод mouseClicked, можно определить поведение для события щелчка мыши.

Например (непроверенный код):

JLabel label = new JLabel("Hello");

label.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        System.out.println("Clicked!");
    }
});

В приведенном выше коде JLabel напечатает «Clicked!» на консоли после нажатия.

5 голосов
/ 19 апреля 2010

Вместо этого вы можете расширить MouseAdapter и просто переопределить события, которые вас действительно интересуют.

2 голосов
/ 15 сентября 2015
public class MouseEventDemo ... implements MouseListener {
        //where initialization occurs:
        //Register for mouse events on blankArea and the panel.
        blankArea.addMouseListener(this);
        addMouseListener(this);
    ...

    public void mousePressed(MouseEvent e) {
       saySomething("Mouse pressed; # of clicks: "
                    + e.getClickCount(), e);
    }

    public void mouseReleased(MouseEvent e) {
       saySomething("Mouse released; # of clicks: "
                    + e.getClickCount(), e);
    }

    public void mouseEntered(MouseEvent e) {
       saySomething("Mouse entered", e);
    }

    public void mouseExited(MouseEvent e) {
       saySomething("Mouse exited", e);
    }

    public void mouseClicked(MouseEvent e) {
       saySomething("Mouse clicked (# of clicks: "
                    + e.getClickCount() + ")", e);
    }

    void saySomething(String eventDescription, MouseEvent e) {
        textArea.append(eventDescription + " detected on "
                        + e.getComponent().getClass().getName()
                        + "." + newline);
    }
}
1 голос
/ 28 июля 2014

какой-то пример щелчка мышью,

таким же образом вы можете использовать mousePressed или другие события мыши

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Work1 extends JFrame{

    private JPanel panelNew;

    public Work1(){
        super("Work 1");


        // create Panel
        panelNew = new JPanel();
        panelNew.setLayout(null);
        panelNew.setBackground(Color.cyan );
        add(panelNew);

        // create Button
        JButton btn = new JButton("click me");
        // position and size of a button
        btn.setBounds(100, 50, 150, 30);

        panelNew.add(btn);


        // add event to button
        btn.addMouseListener(new MouseAdapter() { 
                public void mouseClicked(MouseEvent me) { 

                     // change text of button after click

                     if (btn.getText() == "abraCadabra"){
                          btn.setText("click me again") ;
                     }
                     else  btn.setText("abraCadabra");
                } 
         });        
    }




    public static void main(String[] args){
        Work1 go1 = new Work1();
        go1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        go1.setSize(320,200);
        go1.setVisible(true);   
    }




}
1 голос
/ 19 апреля 2010

Вы можете наследовать от java.awt.event.MouseAdapter и переопределять только методы для интересующего вас события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...