2012-07-27 16 views
16

En html cuando creamos un hipervínculo y lo señalamos, cambia automáticamente a un puntero de dedo.¿Cómo cambiar el puntero del mouse al puntero del dedo en el swing?

Así que me preguntaba si podemos lograr lo mismo en cambios de java. Supongamos que tengo una etiqueta al hacer clic en el cual aparece un nuevo formulario. Pero quiero que cuando el usuario apunte sobre la etiqueta, cambie al puntero del dedo, mostrando que algo emergerá si se hace clic. De esta forma podemos diferenciar esa etiqueta con etiquetas normales en el formulario supongo :).

¿Pero cómo hacer algo como esto?

Respuesta

52

Puede situar el cursor de JLabel a Cursor.HAND_CURSOR mediante el siguiente código:

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

+1 buena respuesta Solo extened en la mía –

+8

Cursor.getPredefinedCursor (Cursor.HAND_CURSOR); – MadProgrammer

+2

El enfoque de MadProgrammer es el mejor. Evita la creación innecesaria de un objeto 'Cursor', siempre que se haya creado antes. – Timmos

1

Como se ha dicho que querría llamar al método setCursor() en el JLabel y ponerlo a Cursor.Hand_CURSOR para avanzar en esta también se puede subrayar la texto para que sea un enlace HTML mirar por igual si usted quiere :):

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

Referencia:

+0

Siento que la sensación de URL es suficiente solo por las dos líneas de código siguientes. 'JLabel mylabel = new JLabel (" Haga clic aquí "); mylabel.setForeground (Color.BLUE.darker()); ' – Abhinav

+0

@Abhinav Y no estoy de acuerdo. Me encanta escribir código en su forma pura: P –

Cuestiones relacionadas