2012-07-27 19 views
16

In html quando creiamo un collegamento ipertestuale e lo puntiamo su di esso, esso cambia automaticamente in un puntatore del dito.Come cambiare il puntatore del mouse sul puntatore del dito in oscillazione?

Quindi mi chiedevo se possiamo ottenere lo stesso con java swing. Supponiamo di avere un'etichetta su cui fare clic su un nuovo modulo. Ma voglio che quando l'utente punta sull'etichetta, dovrebbe passare al puntatore del dito, mostrando che qualcosa si aprirà se viene cliccato. In questo modo possiamo differenziare quell'etichetta con le normali etichette sul modulo immagino :).

Ma come fare qualcosa del genere?

risposta

52

È possibile impostare il cursore di JLabel per Cursor.HAND_CURSOR usando sotto il codice:

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

+1 buona risposta Basta extened in miniera –

+8

Cursor.getPredefinedCursor (Cursor.HAND_CURSOR); – MadProgrammer

+2

L'approccio di MadProgrammer è il migliore. Evita la creazione non necessaria di un oggetto 'Cursore', a condizione che sia stato creato in precedenza. – Timmos

1

Come detto ci si vuole chiamare il metodo setCursor() sulla JLabel e impostarlo su Cursor.Hand_CURSOR per favorire questo si può anche sottolineare la il testo per renderlo un aspetto HTML collegamento allo stesso modo se si vuole :):

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

Riferimento:

+0

Ritengo che l'URL sia sufficiente solo per le due righe di codice seguenti. 'JLabel mylabel = new JLabel (" Fare clic qui "); mylabel.setForeground (Color.BLUE.darker()); ' – Abhinav

+0

@Abhinav E non sono d'accordo. Adoro scrivere codice nella sua forma pura: P –

Problemi correlati