2012-07-26 6 views
5

Questo è il codice che ho in un file chiamato Test2.java in un pacchetto chiamato test2 in un progetto chiamato Test2;Collegamenti ipertestuali in JLabel

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); 
    } 
} 

Nello stesso pacchetto ho questo codice in un file chiamato 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); 

    } 

} 

Quando eseguo il progetto, ho una finestra con la parola "blah" nella posizione prevista, blu e sottolineato, ma il cursore non cambia quando mi passa il mouse sopra la parola, né accada nulla quando Lo clicco.

Le mie domande sono le seguenti;

  • È possibile inserire collegamenti ipertestuali in jLabels?
  • In tal caso, sto facendo qualcosa di sbagliato o il programma non funziona correttamente?
  • In caso negativo, qual è una buona alternativa? La ragione per cui non sto usando JButtons, è che alla fine voglio creare una griglia di un numero arbitrario di collegamenti ipertestuali, e voglio che i collegamenti ipertestuali siano immagini, e mentre i JButton possono avere immagini su di essi, non voglio che i collegamenti ipertestuali sembrano "bottoni". Suppongo che potrei usare un JEditorPane non modificabile?

risposta

4

L'oscillazione non è un browser pienamente funzionante. Supporta semplici HTML inclusi i collegamenti ma non cambia automaticamente lo stile del cursore. Per quanto ne so, devi farlo a livello di codice, ad esempio aggiungi l'elenco dei mouse all'etichetta e modifica lo stile del cursore quando il mouse si trova sull'etichetta. Ovviamente puoi scrivere la tua classe LinkLabel che implementa questa logica e quindi usarla ogni volta che ti serve.

+0

Grazie per la rapida risposta! Penso che usare un ascoltatore del mouse sia la soluzione preferibile, visto che a lungo andare non sono particolarmente interessato ad aprire un browser ma a scatenare qualche altra risposta. –

3

Non sembra che solo eseguendo un collegamento ipertestuale si ottenga il solito comportamento del browser Web. Secondo gli esempi in linea, ciò che viene solitamente fatto è implementare uno ActionListener su JLabel e chiamare Desktop.getDesktop().browse(new URI("..."));.

Il problema con questa chiamata è che non sembra funzionare con tutti i sistemi operativi. Quello che potresti fare sarebbe vedere se puoi aprire il link in un browser dalla riga di comando, se puoi farlo, dovresti essere in grado di fare ciò che ti serve usando il metodo Process dalla classe exec. Tuttavia, molto probabilmente dipenderà dalla piattaforma.

Detto questo, è del parere che le etichette debbano essere utilizzate per rappresentare il testo (anche se penso che vedendo un link, l'utente sa di cosa accadrà, quindi penso che in questo caso, può chiamarlo come un'eccezione). Se si desidera avere un componente che attiva e azione, è possibile utilizzare invece JButton.