2012-07-26 17 views
5

Este es el código que tengo en un archivo llamado Test2.java en un paquete llamado test2 en un proyecto llamado Test2;Hipervínculos en JLabels

package test2; 

import javax.swing.JFrame; 

public class Test2 { 
    public static void main(String[] args) { 
    JFrame mainWindow = new HtmlWindow("<html>" 
      + "<a href=\"http://stackoverflow.com\">" 
      + "blah</a></html>"); 
     mainWindow.setVisible(true); 
    } 
} 

En el mismo paquete tengo este código en un archivo llamado HtmlWindow.java;

package test2; 

import java.awt.BorderLayout; 
import java.awt.Container; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


class HtmlWindow extends JFrame { 
    public HtmlWindow(String refreshGrid) { 
     super("blah"); 
     setSize(300, 100); 
     Container content = getContentPane(); 
     String labelText = refreshGrid; 
     JLabel coloredLabel = new JLabel (labelText, JLabel.CENTER); 
     content.add(coloredLabel, BorderLayout.NORTH); 

    } 

} 

Cuando ejecuto el proyecto, me sale una ventana con la palabra "bla" en la ubicación esperada, azul y subrayado, pero el cursor no cambia cuando se ciernen sobre la palabra, ni tampoco sucede nada cuando Hago clic en él

Mis preguntas son las siguientes;

  • ¿Es posible poner hipervínculos en jLabels?
  • Si es así, ¿estoy haciendo algo mal o el programa no funciona correctamente?
  • Si no, ¿cuál es una buena alternativa? La razón por la que no estoy usando JButtons, es que eventualmente quiero crear una cuadrícula de un número arbitrario de hipervínculos, y quiero que los hipervínculos sean imágenes, y aunque JButtons puede tener imágenes en ellos, no quiero los hipervínculos a parecer "botones". ¿Supongo que podría usar un JEditorPane no editable?

Respuesta

4

Swing no es un navegador completamente funcional. Admite HTML simple incluyendo enlaces pero no cambia el estilo del cursor automáticamente. Por lo que sé, tienes que hacerlo programáticamente, es decir, agregar oyente de ratón a tu etiqueta y cambiar el estilo del cursor cuando el mouse está sobre la etiqueta. Obviamente, puede escribir su propia clase LinkLabel que implemente esta lógica y luego usarla cada vez que lo necesite.

+0

¡Gracias por su pronta respuesta! Creo que usar un oyente de ratón es la solución preferible, ya que a la larga no estoy particularmente interesado en abrir un navegador sino en provocar otra respuesta. –

3

Parece que con solo hacer un hipervínculo obtendrás el comportamiento habitual de tu navegador web. De acuerdo con ejemplos en línea, lo que generalmente se hace es implementar un ActionListener en el JLabel y llamar al Desktop.getDesktop().browse(new URI("..."));.

El problema con esta llamada es que no parece funcionar con todos los sistemas operativos. Lo que podría hacer sería ver si puede abrir el enlace en un navegador desde la línea de comandos; si puede hacerlo, debería poder hacer lo que necesita utilizando el método exec de la clase Process. Sin embargo, esto dependerá de la plataforma.

Habiendo dicho esto, es de mi opinión que las etiquetas deben usarse para representar el texto (aunque creo que al ver un enlace, el usuario sabe qué pasará, así que creo que en este caso, puede llamarlo como una excepción). Si desea tener un componente que desencadena y acción, puede usar un JButton en su lugar.

Cuestiones relacionadas