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

Java 如何在swing应用程序中获取鼠标指针组件,java,swing,listener,jbutton,Java,Swing,Listener,Jbutton,我的swing应用程序一个面板有6个按钮。当光标移动到按钮上时,我想将默认光标更改为手动光标,光标处于退出状态,然后它想更改默认光标。现在我用下面的代码来做这件事 private void btnRegisterReceiptMouseEntered(java.awt.event.MouseEvent evt) { btnRegisterReceipt.setCursor(Cursor.get

我的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作为annonymouse类编写:

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

    @Override
    public void mouseExited(MouseEvent e)
    {
        e.getComponent( setCursor(...) );
    }
};
然后,您可以将MouseStener添加到您想要使用的任何组件中:

btnRegisterReceipt.addMouseListener( ml );
anotherButton.addMouseListener( ml );
您还可以将其作为可重用类:

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生成侦听器代码。

将通用MouseListener作为annonymouse类编写:

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

    @Override
    public void mouseExited(MouseEvent e)
    {
        e.getComponent( setCursor(...) );
    }
};
然后,您可以将MouseStener添加到您想要使用的任何组件中:

btnRegisterReceipt.addMouseListener( ml );
anotherButton.addMouseListener( ml );
您还可以将其作为可重用类:

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生成侦听器代码。

+1-感谢您的帮助。这是工作。e、 getComponent.setCursorCursor.getPredefinedCursorCursor‌​.手持光标+谢谢你的帮助。这是工作。e、 getComponent.setCursorCursor.getPredefinedCursorCursor‌​.手持光标;