如何在swing应用程序中获取鼠标指针组件

how to get mouse pointer component in swing application

我的 swing 应用程序一个面板有 6 个按钮。当光标移到按钮上时,我想将默认光标更改为手形光标并且光标退出然后它想要更改默认光标。现在我正在使用下面的代码来做这件事。

private void btnRegisterReceiptMouseEntered(java.awt.event.MouseEvent evt) {                                                
    btnRegisterReceipt.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}                                               

private void btnRegisterReceiptMouseExited(java.awt.event.MouseEvent evt) {                                               
    btnRegisterReceipt.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}  

现在我想将此代码写入每个按钮。

但是我想写一个通用的方法来完成这个。我已经尝试使用 MouseListener 来做这件事,但我无法获取哪个是鼠标点组件。

我不知道这是否可能。如果可能的话,请任何人告诉我如何做这些事情。

private void changeCursor() {
    addMouseListener(new MouseAdapter() {

        @Override
        public void mouseEntered( MouseEvent e ) {
            /*if ( mouse Entered compornent is button ) {
                button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
            } else {
                button.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            }*/
        }

    });
}

编写一个通用的 MouseListener(作为匿名鼠标 class):

MouseListener ml = new MouseAdapter()
{
    @Override
    public void mouseEntered(MouseEvent e)
    {
        e.getComponent( setCursor(...) );
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        e.getComponent( setCursor(...) );
    }
};

然后您可以将 MouseListener 添加到您想要的任何组件:

btnRegisterReceipt.addMouseListener( ml );
anotherButton.addMouseListener( ml );

您也可以将其作为可重复使用的 class:

public MousePointerListener extends MouseAdapter
{
    @Override
    public void mouseEntered(MouseEvent e)
    {
        e.getComponent( setCursor(...) );
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        e.getComponent( setCursor(...) );
    }
}

然后你使用:

MouseListener ml = new MousePointerListener();
btnRegisterReceipt.addMouseListener( ml );
anotherButton.addMouseListener( ml );

这两个示例的关键点在于您可以从 MouseEvent 中获取事件源,这使您可以编写通用代码。你应该为所有的听众看看这种方法,而不是让你的 IDE 生成听众代码。