2012-07-27 18 views
16

W html podczas tworzenia hiperłącza i wskazywania go, to automatycznie zmienia się w wskaźnik palca.Jak zmienić wskaźnik myszy na wskaźnik palca w ruchu?

Więc zastanawiałem się, czy możemy osiągnąć to samo w huśtawkach Java. Załóżmy, że mam etykietę po kliknięciu, która nowa postać pojawia się w okienku. Ale chcę, aby kiedy użytkownik wskazywał etykietę, powinna zmienić się na wskaźnik palca, pokazując, że coś się pojawi, jeśli kliknie. W ten sposób możemy rozróżnij tę etykietę z normalnymi etykietami w formularzu chyba :).

Ale jak zrobić coś takiego?

Odpowiedz

52

Można ustawić kursor na JLabel do Cursor.HAND_CURSOR za pomocą poniższego kodu:

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

+1 dobra odpowiedź Wystarczy extened go w kopalni –

+8

Cursor.getPredefinedCursor (Cursor.HAND_CURSOR); – MadProgrammer

+2

Podejście MadProgrammera jest lepsze. Pozwala uniknąć niepotrzebnego tworzenia obiektu 'Cursor', o ile został wcześniej utworzony. – Timmos

1

Jak powiedział, chcesz wywołać metodę setCursor() na JLabel i ustawić ją na Cursor.Hand_CURSOR do dalszego ten można również podkreślić, co tekst, aby HTML wyglądają podobnie link, jeśli chcesz :):

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

referencyjny:

+0

Uważam, że adres URL jest wystarczający tylko pod poniższą linią kodu. 'JLabel mylabel = new JLabel (" Kliknij tutaj "); mylabel.setForeground (Color.BLUE.darker()); ' – Abhinav

+0

@Abhinav I nie zgadzam się. Uwielbiam pisać kod w czystej postaci: P –

Powiązane problemy