Как использовать MouseEvent? - PullRequest
1 голос
/ 18 октября 2019

В следующем примере выводится вывод поведения мыши («Введено», «Нажано», «Отпущено», «Щелкнуто», «Выход»).

Это также попытка использовать поведение мыши, которое, очевидно, сделано неправильно.

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

Так как нажатие является первым обработанным событием мыши, на него был помещен вызов потребление (), ожидающий, что вызовы освобождаемой мыши и нажатые клавиши НЕ будут выполнены, но этого не произошло.

Даже при других вызовах мыши код проверяет, используется ли событие с помощью вызова 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();  
    }  
}

1 Ответ

2 голосов
/ 18 октября 2019

Как сказал @ Арно в комментариях: Все эти MouseEvent - это разные События. Если вы .consume() один, это не означает, что следующие события также потребляются.

Можно ли просто обработать вызов 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){}  
    public void mouseEntered(MouseEvent e){}  
    public void mouseExited(MouseEvent e){}  
    public void mouseReleased(MouseEvent e){}

    public void mousePressed(MouseEvent e) {  
        System.out.println("Mouse Pressed");
        l.setText("Mouse Pressed");  
    }  

    public static void main(String[] args) {  
        new MouseListenerExample();  
    }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...