У меня есть JPanel, для которого я создал MouseListener, и я вижу некоторое поведение, которое я не могу объяснить.
Обычно, когда я щелкаю мышью в JPanel, я вижу следующий огонь событий:
mousePressed
mouseReleased
mouseClicked
В некоторых случаях я не вижу огонь события, по которому щелкают мышью, я только вижу:
mousePressed
mouseReleased
Я не думаю, что делаю что-либо необычное, когда я нажимаю эти времена. Кто-либо мог объяснить, почему я не мог бы видеть событие, по которому щелкают мышью?
Я не уверен, релевантно ли это, но у меня действительно есть анимация, работающая в панели с помощью javax.swing. Таймер.
Любая справка ценится.
Править: добавление тестового кода, который копирует проблему. Я не уверен, но интересно, имеет ли моя мышь какое-либо отношение к нему. У меня есть одна из тех супер чувствительных играющих мышей (с моих старых дней COD4).
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args) {
final Test test = new Test();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
test.createAndShowGUI();
}
});
}
protected void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(1024, 768));
frame.setTitle("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
System.out.println(":MOUSE_RELEASED_EVENT:");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("----------------------------------\n:MOUSE_PRESSED_EVENT:");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println(":MOUSE_EXITED_EVENT:");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println(":MOUSE_ENTER_EVENT:");
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(":MOUSE_CLICK_EVENT:");
}
});
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
Думаю, я нашел здесь проблему. Я получал промежуточные события mouseDragged между mousePress и mouseRelease. mouseMoved, похоже, не вызывала проблемы, а mouseDragged - вызывала.
Сейчас я не уверен в правильном решении, но по крайней мере теперь я могу объяснить, что происходит.
Ура
- Билл