В следующем примере выводится вывод поведения мыши («Введено», «Нажано», «Отпущено», «Щелкнуто», «Выход»).
Это также попытка использовать поведение мыши, которое, очевидно, сделано неправильно.
При щелчке мышью по кадру обрабатываются события мыши: нажатие, отпускание и нажатие.
Так как нажатие является первым обработанным событием мыши, на него был помещен вызов потребление (), ожидающий, что вызовы освобождаемой мыши и нажатые клавиши НЕ будут выполнены, но этого не произошло.
Даже при других вызовах мыши код проверяет, используется ли событие с помощью вызова isConsumed (), но это не влияет.
Каким образом неправильно осуществляется вызов потребление ()? Можно ли просто обработать вызов Mouse Pressed и ни одно из других событий Mouse?
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class MouseListenerExample extends JFrame implements MouseListener
{
Label l;
MouseListenerExample()
{
addMouseListener(this);
l=new Label();
l.setBounds(20,50,100,20);
add(l);
setSize(300,300);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void mouseClicked(MouseEvent e)
{
if (e.isConsumed())
return;
System.out.println("Mouse Clicked");
l.setText("Mouse Clicked");
}
public void mouseEntered(MouseEvent e)
{
System.out.println("Mouse Entered");
l.setText("Mouse Entered");
}
public void mouseExited(MouseEvent e)
{
System.out.println("Mouse Exited");
l.setText("Mouse Exited");
}
public void mousePressed(MouseEvent e)
{
System.out.println("Mouse Pressed");
e.consume();
System.out.println("Mouse Pressed - After consume()");
l.setText("Mouse Pressed");
}
public void mouseReleased(MouseEvent e)
{
if (e.isConsumed())
return;
System.out.println("Mouse Released");
l.setText("Mouse Released");
}
public static void main(String[] args) {
new MouseListenerExample();
}
}