java - 如何区分组件是否已被拖动或单击?

标签 java swing mouseevent

我有一个 JPanel,里面有许多 JButton 组件。有没有办法在按下按钮时获取面板鼠标事件?另一个观点:如何使按钮对面板鼠标事件透明?我特别需要捕获面板的 mousePressed() 事件。

编辑

上下文: 我通过 JScrollPane 拖动面板内容(实际上正在工作),为了实现这一点,我需要捕获按下鼠标的点,因此面板和按钮都有 MouseListenerMouseMotionListener 来捕获点并执行其他操作。

问题: 当我按下 -> 拖动 -> 释放鼠标按钮时,如果鼠标仍在按钮上,它将执行按钮执行的任何操作。所以我希望面板的鼠标监听器“独立”于按钮,以从按钮中删除鼠标监听器。

编辑2

我刚刚意识到阅读我自己的问题...将 MouseListener 删除到 JButton 没有什么区别。当按下按钮时,如果鼠标仍然悬停在按钮上,actionPerformed 无论如何都会被执行......我能做什么?

编辑3 根据解决方案编辑问题标题。

最佳答案

请记住,本例中的事件执行顺序是: mousePressed->mouseDragged->actionPerformed->mouseReleased ,我现在可以使用它,添加一个 boolean 值:

@Override
public void mousePressed(MouseEvent e) {
        origin = new Point(e.getPoint());
}
//each time the user stops dragging set dragged to false
@Override
public void mouseReleased(MouseEvent arg0) {
     dragged = false;
}

@Override
public void mouseDragged(MouseEvent e) {

        dragged=true;
        if(((Component) e.getSource()).getParent().equals(myPanel)
                || e.getSource().equals(myPanel)){
          if (origin != null) {
            JViewport viewPort = (JViewport) SwingUtilities.getAncestorOfClass(JViewport.class, myPanel);
            if (viewPort != null) {
                int deltaX = origin.x - e.getX();
                int deltaY = origin.y - e.getY();

                Rectangle view = viewPort.getViewRect();
                view.x += deltaX;
                view.y += deltaY;
                myPanel.scrollRectToVisible(view);
            }
        }
}
@Override
public void actionPerformed(ActionEvent e){

    //stuff do detect the button...
    //..in case there is more than one panel, if the component belong to myPanel and dragg is false 
    if(((Component) e.getSource()).getParent().equals(myPanel)&&  dragged==false ){
    //do stuff
    }
}

关于java - 如何区分组件是否已被拖动或单击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41207933/

相关文章:

java - 鼠标右键事件

javascript - 如何启用拖动控件来滚动和扩展选择

java - TCP 套接字上的 ObjectOutputStream

java - JOptionPane.showConfirmDialog 中的错误?

java - 在 Java 中绘制位图

javascript - 无法在 angularjs js 或 jQuery 中按下 alt 键和按下 alt 键

java - Jnlp 文件未在 Internet Explorer 浏览器中下载

java - 自动裁剪图像边界

java - 在 Main 方法中使用返回的数组

java - 是否可以将 MouseMotionListener 添加到 BufferedImage 中?