【问题标题】:How to change the mouse pointer to finger pointer in swing?如何在挥杆中将鼠标指针更改为手指指针?
【发布时间】:2012-07-27 11:33:47
【问题描述】:

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

所以我想知道我们能否在 java swings 中实现同样的效果。 假设我有一个标签点击它会弹出一个新表单。但是我希望当用户指向标签时它应该变成手指指针,表明如果点击它会弹出一些东西。这样我们可以区分我猜表格上带有普通标签的那个标签:)。

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

【问题讨论】:

    标签: java swing mouseover jlabel


    【解决方案1】:

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

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

    【讨论】:

    • Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
    • MadProgrammer 的方法更好。它可以避免不必要地创建 Cursor 对象,前提是它之前已创建。
    【解决方案2】:

    如前所述,您希望在 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>Click here</u></html>"); mylabel.setForeground(Color.BLUE.darker());
    • @Abhinav 我不反对。我只是喜欢以纯粹的形式编写代码:P
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      我已经在 J​​ava 1.8 中尝试过它也可以工作

      【讨论】:

        【解决方案5】:

        ButtonName.SetCursor(new Cursor(12)); 这个绝对有效!

        【讨论】:

          猜你喜欢
          • 2012-02-07
          • 2017-04-11
          • 2010-12-23
          • 2013-09-24
          • 2016-06-15
          • 1970-01-01
          • 2011-06-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多