代码之家  ›  专栏  ›  技术社区  ›  Abhinav

如何将鼠标指针更改为摆动中的手指指针?

  •  24
  • Abhinav  · 技术社区  · 13 年前

    在html中,当我们创建一个超链接并指向它时,它会自动变为手指指针。

    所以我想知道我们能否在java swing中实现同样的效果。 假设我在点击时有一个标签,一个新的表单会弹出。但我希望当用户指向标签时,它应该变为手指指针,显示如果点击就会弹出一些东西。这样,我们就可以将该标签与表单上的普通标签区分开来,我想:)。

    但是如何做这样的事情呢?

    5 回复  |  直到 13 年前
        1
  •  69
  •   Hossein Mobasher    4 年前

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

    JLabel label = new JLabel("https://stackoverflow.com");
    label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    
        2
  •  2
  •   chamy    4 年前

    转到按钮或标签的属性并向下滚动,您会发现一列光标,您可以将其更改为手动或任何您想要的

        3
  •  1
  •   David Kroukamp    13 年前

    如前所述,你想打电话给 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) {
                        //
                    }
                }
            }
        }
    }
    

    参考文献:

        4
  •  0
  •   Ahmad    6 年前

    侯赛因·莫巴舍 答案很好,我的答案很晚了,但我只想加起来,你也可以这样使用它。

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

    它也会起作用,我在Java 1.8中尝试过

        5
  •  0
  •   Ifargan Guddataa Itichaa    3 年前

    ButtonName.SetCursor(新光标(12)); 这个绝对有效!