如何在Swing中将鼠标指针更改为手指指针?

24

在HTML中,当我们创建超链接并将光标指向它时,它会自动变成手指指针。

因此我想知道是否可以在Java Swings中实现相同的效果。假设我有一个标签,点击它会弹出一个新表单。但是,当用户将光标指向该标签时,我希望它变成手指指针,显示如果单击将弹出某些内容。这样我们可以区分该标签和表单上的普通标签。

但是如何做到这一点呢?

5个回答

69

您可以使用以下代码将JLabel的光标设置为Cursor.HAND_CURSOR

JLabel label = new JLabel("https://stackoverflow.com");
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

8
Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); - MadProgrammer
2
MadProgrammer的方法更好。它避免了不必要地创建Cursor对象,前提是它已经被创建过了。 - Timmos

2

进入按钮或标签的属性,向下滚动,您会找到一个光标列,您可以更改为手形或任何您想要的形状。


1

如上所述,您需要在JLabel上调用setCursor()方法,并将其设置为Cursor.Hand_CURSOR。此外,如果您希望使其看起来像HTML链接,还可以对文本进行下划线处理:)

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URI;
import javax.swing.JLabel;

/**
 *
 * @author ludovicianul
 */
public class URLLabel extends JLabel {

    private String url;

    public URLLabel() {
        this("","");
    }

    public URLLabel(String label, String url) {
        super(label);

        this.url = url;
        setForeground(Color.BLUE.darker());
        setCursor(
                new Cursor(Cursor.HAND_CURSOR));
        addMouseListener(
                new URLOpenAdapter());
    }

    public void setURL(String url) {
        this.url = url;
    }

    //this is used to underline the text
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.blue);

        Insets insets = getInsets();

        int left = insets.left;
        if (getIcon() != null) {
            left += getIcon().getIconWidth() + getIconTextGap();
        }

        g.drawLine(left, getHeight() - 1 - insets.bottom, (int) getPreferredSize().getWidth()
                - insets.right, getHeight() - 1 - insets.bottom);
    }

    private class URLOpenAdapter extends MouseAdapter {

        @Override
        public void mouseClicked(MouseEvent e) {
            if (Desktop.isDesktopSupported()) {
                try {
                    Desktop.getDesktop().browse(new URI(url));
                } catch (Throwable t) {
                    //
                }
            }
        }
    }
}

参考:


我认为只需要以下两行代码,就可以实现URL的感觉。JLabel mylabel=new JLabel("<html><u>点击这里</u></html>"); mylabel.setForeground(Color.BLUE.darker()); - Abhinav
@Abhinav 我并不反对。我只是喜欢以纯粹的形式编写代码 :P - David Kroukamp

0

ButtonName.SetCursor(new Cursor(12)); 这个肯定可以工作!


0

Hossein Mobasher的回答很好,我的回答很晚,但我想补充一下,你也可以像下面这样使用它。

JLabel label = new JLabel("http://stackoverflow.com");
label.setCursor(Cursor.HAND);

它也可以工作,我已经在Java 1.8中尝试过了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接