Java JButton默认光标

Java JButton默认光标,java,swing,jbutton,Java,Swing,Jbutton,有没有办法设置JButton组件的默认光标? 这是如何为一个按钮设置光标的方法: JButton btn = new JButton("Click me"); btn.setCursor(new Cursor(Cursor.HAND_CURSOR)); 据我所知,并没有像“Button.cursor”这样的属性 我想设置一次默认光标,这样当鼠标光标移动到应用程序中时,应用程序中的所有JButton都有相同的指针。您可以有一个扩展JButton的自定义按钮,并使用它。比如: MyCustomJB

有没有办法设置
JButton
组件的默认光标?

这是如何为一个按钮设置光标的方法:

JButton btn = new JButton("Click me");
btn.setCursor(new Cursor(Cursor.HAND_CURSOR));
据我所知,并没有像“Button.cursor”这样的属性


我想设置一次默认光标,这样当鼠标光标移动到应用程序中时,应用程序中的所有JButton都有相同的指针。

您可以有一个扩展
JButton
自定义按钮,并使用它。比如:

MyCustomJButton.java

import java.awt.Cursor;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JButton;

@SuppressWarnings("serial")
public class MyCustomJButton extends JButton implements MouseListener
{

    private Cursor defaultCursor;
    private Cursor handCursor;

    public MyCustomJButton()
    {
        super();

        init();
    }

    public MyCustomJButton(Action a)
    {
        super(a);

        init();
    }

    public MyCustomJButton(Icon icon)
    {
        super(icon);

        init();
    }

    public MyCustomJButton(String text, Icon icon)
    {
        super(text, icon);

        init();
    }

    public MyCustomJButton(String text)
    {
        super(text);

        init();
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {

    }

    @Override
    public void mousePressed(MouseEvent e)
    {

    }

    @Override
    public void mouseReleased(MouseEvent e)
    {

    }

    @Override
    public void mouseEntered(MouseEvent e)
    {
        this.setCursor(handCursor);
    }

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

    private void init()
    {
        defaultCursor = this.getCursor();
        handCursor = new Cursor(Cursor.HAND_CURSOR);

        addMouseListener(this);
    }

}
一旦实现了自己的自定义按钮,就可以像实例化
JButton
一样实例化它

MyCustomJButton myButton = new MyCustomJButton("My Button");

简而言之,答案是否定的。您“可以”尝试使用
AwtEventListener
监视所有
mouseMoved
entered
)事件,检查事件源以查看它是否为
JButton
,以及它的光标是否未设置为
HAND\u cursor
更新它。同样,你也可以制作自己的自定义按钮,并用它替换应用程序中的所有按钮……可能是一个源自nimbus one的自定义
ButtonUI
(假设你正在使用该按钮),然后在
UIDefaults
中设置该按钮。然后在
按钮ui
中为enter和leave事件附加一个鼠标侦听器。这样,它将用于所有不显式使用另一个UI委托的按钮。“当鼠标光标移动时,应用程序中的所有JButton都有相同的指针。”当用户通过按钮进行点击时,它们应该如何反应?光标来自本机操作系统中的设置,与Nimbus、Metal无关。。。任何LookAndFeel(一些自定义的L&Fa来修改它),覆盖ButtonModel中的事件(最简单的方法是添加ChangeListener),所有这些事件都在ButtonModel中实现,然后您就错过了键盘中的事件