web-gelistirme-sc.com

Fare imlecini salıncaktaki parmak imlecine nasıl değiştirebilirim?

Html'de bir köprü oluşturup üzerine gelince otomatik olarak bir parmak göstericisine dönüşür.

Bu yüzden Java salıncaklarında aynı şeyi başarabileceğimizi merak ediyordum. Diyelim ki hangi yeni formun açılacağını tıklayan bir etiketim var. Ancak kullanıcı etiketin üzerine geldiğinde, parmak işaretçi olarak değişmesi gerektiğini, tıklandığında bir şeyin açılacağını göstermek istiyorum. Bu şekilde farklılaşabiliriz. formdaki normal etiketlerle bu etiketi sanırım :).

Ama böyle bir şey nasıl yapılır?

17
Abhinav

JLabel imlecini Cursor.HAND_CURSOR olarak aşağıdaki kodu kullanarak ayarlayabilirsiniz:

JLabel label = new JLabel("http://stackoverflow.com");
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
54
Hossein Mobasher

JLabel'deki setCursor() yöntemini çağırmak ve bunu Cursor.Hand_CURSOR olarak ayarlamak isteyeceğinizi söylediğiniz gibi, ayrıca isterseniz HTML'nin bir link gibi görünmesini sağlamak için metnin altını da çizebilirsiniz :):

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) {
                    //
                }
            }
        }
    }
}

Referans:

1
David Kroukamp

Hossein Mobasher Cevabı iyi ve benim cevabı çok geç ama sadece şunu eklemek istiyorum, aşağıdaki gibi de kullanabilirsiniz. 

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

Ayrıca Java 1.8 de denedim çalışacak 

0
Ahmad