下面的示例打印鼠标行为(进入、按下、释放、单击、退出)的输出。
这也是一种使用鼠标行为的尝试,这显然是不正确的。
当鼠标在框架上单击时,将处理鼠标事件:按下、释放和单击。
由于Pressed是正在处理的第一个鼠标事件,因此the ()调用被放置在那里,期望不执行鼠标释放和按下的调用,但这并没有发生。
即使在其他鼠标调用中,代码也会检查事件是否通过isConsumed()调用使用,但这没有任何影响。
consume()调用的实现有哪些不正确的地方?是否可以简单地处理按下鼠标的呼叫,而不处理任何其他鼠标事件?
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();
}
}发布于 2019-10-18 20:18:22
正如@Arnoud在评论中所说:这些MouseEvent都是不同的事件。如果你.consume()了一个,并不意味着下面的事件也会被消费。
是否可以简单地处理按下鼠标的呼叫,而不处理其他任何鼠标事件?
是的,当然;)
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();
}
}https://stackoverflow.com/questions/58450640
复制相似问题