Java语句使鼠标单击成为Jpanel中MouseListener的mouseRelease

Java语句使鼠标单击成为Jpanel中MouseListener的mouseRelease,java,swing,mouselistener,Java,Swing,Mouselistener,我已经通过以下方式向我的JPanel添加了一个鼠标侦听器。输出到JPanel的是从一组图像绘制到屏幕上的图像 public class NewFrame extend JFrame { public New JFrame() { statusBar = new JLabel("Mouse Outdide Panel"); //displays events for mouse add(statusBar,BorderLayout.SOUTH); //ad

我已经通过以下方式向我的JPanel添加了一个鼠标侦听器。输出到JPanel的是从一组图像绘制到屏幕上的图像

public class NewFrame extend JFrame {
    public New JFrame() {

        statusBar = new JLabel("Mouse Outdide Panel"); //displays events for mouse
        add(statusBar,BorderLayout.SOUTH); //add to JFrame
        MouseHandler handler = new MouseHandler(); 
        JPanelMap.addMouseListener(handler); //add both mouse listeners to JPanel
        JPanelMap.addMouseMotionListener(handler);
}
private class MouseHandler implements MouseListener,
        MouseMotionListener
    {
        public void mouseClicked(MouseEvent event) {

            statusBar.setText( String.format( "Clicked at [%d, %d]",
                event.getX() , event.getY() ) );
            int x = event.getX();
            int y = event.getY();

            mapObject.updateDockOrShip(x, y,text); //updates selected icon on screen
        }

        public void mousePressed(MouseEvent event) {
        }

        public void mouseReleased(MouseEvent event) {
            statusBar.setText( String.format( "Released at [%d, %d]",
                event.getX() , event.getY() ) );
            int x = event.getX();
            int y = event.getY();

            /*this is the troubleMaker, if i delete this line all "clicks"
              work everywhere on my JPanel. but if i leave it in, 
              clicks work in some areas of JPanel, and other legitimate clicks
              are recognized as mouseReleased in different area of JPanel
            */

            mapbject.checkDocks(x,y,tempint); //TROUBLE

        }
        public void mouseEntered( MouseEvent event )
        {
        } 

        public void mouseExited( MouseEvent event )
        {
        } 
        public void mouseDragged( MouseEvent event )
        {

        } 
        public void mouseMoved( MouseEvent event )
        { 
        } 

    }
}

我强调了代码中令人不安的语句。一旦我实现了这一行,地图的某些部分就可以单击,而其他部分则不可以单击,即使我仍然进行相同的单击。我会认为鼠标点击就是鼠标点击,不管你点击鼠标听者在哪里,或者我假设错了或者遗漏了什么。当该语句被实现为MouseRelease操作时,鼠标单击的行为似乎会改变,但我不明白为什么。

我不确定这是否是您的问题的根源,因为我不确定您的所有代码都做了什么,但它看起来像是一个潜在的问题:

您可能应该使用mousePressed方法重写,而不是mouseClicked,尤其是当它与绑定到MouseRelease的活动配对时。mouseClicked方法意味着鼠标在同一点上被按下和释放,如果你在点击和释放之间移动鼠标,即使是轻微的移动,也不会被调用。另一只手上按住的鼠标会立即对按住的鼠标做出反应,这听起来像是你想要的

所以也许:

private class MouseHandler extends MouseAdapter {
    @Override
    public void mousePressed(MouseEvent event) {

        statusBar.setText( String.format( "Pressed at [%d, %d]",
            event.getX() , event.getY() ) );
        int x = event.getX();
        int y = event.getY();

        mapObject.updateDockOrShip(x, y,text); //updates selected icon on screen
    }

    @Override
    public void mouseReleased(MouseEvent event) {
        statusBar.setText( String.format( "Released at [%d, %d]",
            event.getX() , event.getY() ) );
        int x = event.getX();
        int y = event.getY();

        /*this is the troubleMaker, if i delete this line all "clicks"
          work everywhere on my JPanel. but if i leave it in, 
          clicks work in some areas of JPanel, and other legitimate clicks
          are recognized as mouseReleased in different area of JPanel
        */

        mapbject.checkDocks(x,y,tempint); //TROUBLE

    }

    // since this extends MouseAdapter, all the other methods are not needed
}

您可能应该使用鼠标按下,而不是鼠标点击。MapObject.checkDocks的作用是什么?因此,为了注册点击,鼠标必须在同一地点注册新闻发布?@ZachSantiago:是的。当你尝试我上面的代码时会发生什么?@ZachSantiago:我喜欢这种情况。快速提问,如果我想按下某个项目并将其拖到某个位置,当调用mouseDragged时,我如何获得原始按下按钮的来源?@ZachSantiago:你的意思是?