Java MouseListener
У меня есть куча 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 говорит add @override anotation. что это значит?
ИЗМЕНИТЬ: ОК получил. исправлена и решена.
Ответы
Ответ 1
Используйте 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);
}
}
Ответ 2
Можно использовать класс MouseAdapter
, который реализует MouseListener
, поэтому не нужно реализовывать все методы.
Однако, переопределяя интересующие методы, можно получить желаемое поведение. Например, если один переопределяет метод mouseClicked
, тогда можно определить какое-либо поведение для события щелчка мыши.
Например (непроверенный код):
JLabel label = new JLabel("Hello");
label.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("Clicked!");
}
});
В приведенном выше коде JLabel
будет печатать "Clicked!
" на консоли при нажатии.
Ответ 3
Вместо этого вы можете расширить MouseAdapter и просто переопределить события, которые вас действительно интересуют.
Ответ 4
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);
}
}
Ответ 5
Вы можете наследовать от java.awt.event.MouseAdapter
и только переопределять методы для интересующих вас событий.
Ответ 6
какой-нибудь пример нажатия мыши,
таким же образом вы можете использовать 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);
}
}