【问题标题】:Respond to individual mouse events before global ones在全局事件之前响应单个鼠标事件
【发布时间】:2016-09-11 10:15:19
【问题描述】:

我正在使用一个 JLabels 数组,其中多个对象是可点击的(为简单起见,下面仅显示一个)。当每一个被点击时,它应该运行一小段代码来改变基于点击哪个对象的开关。之后,它应该运行为每个 JLabel 运行的通用代码,但根据开关的不同执行略有不同。

问题在于下面的示例先运行“//run this code second”位,然后运行“//run this code first”位。有没有办法扭转这种行为?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ListenToMice extends JFrame implements MouseListener 
{
    private JLabel[] difference = new JLabel[11];
    public ListenToMice( ) 
    {
        difference[1].addMouseListener(new MouseAdapter()
            {
                public void mouseClicked(MouseEvent e) {
                    //run this code first
                }

            });
    }

    public void mouseClicked(MouseEvent e) {
        //run this code second
    }
    public void mouseEntered(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }

    public void mousePressed(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {

    }
}

【问题讨论】:

  • 你有一个额外的大括号},我不确定这段代码是不是你用来编译和测试行为的,我只是把它粘贴在difference[1].addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { //run this code first } });下面删除了
  • @KeshShan 对此感到抱歉。我现在修好了。它仍然缺少 gui 组件,但如果添加了 gui,则会显示所描述的行为
  • 哦,没关系,我刚刚解决了我自己的问题。立即发布答案

标签: java mouseevent mouselistener


【解决方案1】:

解决方案是将您想要的事件首先设置为“mousePressed”,第二个设置为“mouseReleased”。这样,第一个事件在用户按下时调用,第二个事件在用户释放按钮时调用。不确定这是否适用于需要计算机处理一段时间的较长代码,但对于这个短代码,它可以正常工作。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ListenToMice extends JFrame implements MouseListener 
{
    private JLabel[] difference = new JLabel[11];
    public ListenToMice( ) 
    {
        difference[1].addMouseListener(new MouseAdapter()
            {
                public void mousePressed(MouseEvent e) {
                    //this code will now run first (see how it is "mousePressed" above this text
                }

            });
    }

    public void mouseClicked(MouseEvent e) {

    }
    public void mouseEntered(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }

    public void mousePressed(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {
//put code you want second here
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多