Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Aggiungere testo a una JLabel

    Salve,
    vorrei aggiungere del testo a una JLabel che supporti l'html.

    Ogni volta che si aggiunge una riga in fondo è necessario eliminare "a mano" i tag <html></html> che racchiudono tutto il testo, oppure c'è un modo più "elegante"?

    Inoltre se io volessi rendere cliccabile una parte del testo come posso fare?
    Inserendo il tag <a></a> mi viene visualizzato il collegamaento ipertestuale ma non posso cliccarci sopra. Posso mettere un actionlistener solo su un gruppo di parole?

    EDIT: ovviamente intendo inserire il testo mantenendo quello già presente, non sostituendolo.


    Grazie a chi mi risponderà!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    vorrei aggiungere del testo a una JLabel che supporti l'html.
    Swing offre il supporto "di serie" del HTML per tutti componenti che mostrano del testo (JLabel, JButton e altri). Basta che il testo inizi con "<html>" e Swing lo riconosce come inizio di markup HTML. Tra l'altro NON è nemmeno necessario che termini con </html> anche se male non gli fa, se c'è. Insomma, il parsing è blando per <html>
    Ovviamente è HTML molto ristretto, se ben ricordo al massimo HTML 3.2 (non ti aspettare HTML5 o altre meraviglie).

    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    Ogni volta che si aggiunge una riga in fondo è necessario eliminare "a mano" i tag <html></html> che racchiudono tutto il testo, oppure c'è un modo più "elegante"?
    Basterebbe non mettere </html> al fondo e poi appendere codice markup HTML (possibilmente) valido.

    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    Inoltre se io volessi rendere cliccabile una parte del testo come posso fare?
    Inserendo il tag <a></a> mi viene visualizzato il collegamaento ipertestuale ma non posso cliccarci sopra.
    Appunto, il tag <a> non funziona come "vero" link nei componenti come JLabel, JButton ecc... Swing NON è certo un browser, non saprebbe che farci o che aprire.

    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    Posso mettere un actionlistener solo su un gruppo di parole?
    JLabel non è fatto per gestire (normalmente/tipicamente) eventi ... è solo una etichetta. Si possono però gestire eventi a "basso" livello come quelli del mouse. Ma non sarebbe comunque una buona strada.

    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    EDIT: ovviamente intendo inserire il testo mantenendo quello già presente, non sostituendolo.
    Valuta JEditorPane allora, è simile a JTextArea ma ha anche il supporto per HTML e RTF. Con HTML in JEditorPane, i tag <a> li puoi gestire ma devi implementare un HyperlinkListener e farci tu "qualcosa" (idem come prima, NON è un browser, non saprebbe che farci o aprire).
    C'è un mio (vecchio) esempio EditorPaneHyperlinkClick.java qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ti ringrazio! Sei molto paziente con i principianti di Swing come me!
    Ne approfitto per chiederti un'altra cosa che magari è sciocca per una persona esperta.

    Allora l'applicazione fa questo:

    Mostra un campo di testo dove l'utente inserisce una stringa da cercare. Quando preme invio, una serie di classi fa una ricerca nei documenti pesenti. L'applicazione funziona bene da riga di comando e stampa i risultati in console con un semplice System.out.println.
    Ovviamente viene stampato un risultato appena un documento viene trovato (il tutto è in un ciclo).

    Vorrei che non appena venisse stampato in consolle, venisse anche aggiunto nella GUI Swing, quindi riga per riga. Usando la JLabel, invece, devo aspettare la fine della ricerca per visualizzare i risultati.
    Questo è un comportamento normale?
    La colpa è della JLabel (quindi risolvo cambiando elemento) oppure con le interfacce devo ragionare in modo diverso?
    Le due istruzioni sono consecutive quindi suppongo che non conti la posizione ma ci sia qualche altro problema.

    Ti sei mai trovato a gestire una cosa simile? E se no, come faresti?
    Grazie mille! Domani provo il tuo essempio
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    Usando la JLabel, invece, devo aspettare la fine della ricerca per visualizzare i risultati.
    Questo è un comportamento normale?
    Se tutta la ricerca è fatta nel contesto di un actionPerformed() (o qualunque altro metodo di un listener), sì, questa è purtroppo la conseguenza negativa, perché sei nel contesto del Event Dispatch Thread che è il solo thread che si occupa di gestire la interfaccia utente e dispacciare gli eventi.

    Se tieni tu "impegnato" il EDT con del tuo lavoro "lungo", il controllo non ritorna ovviamente in tempi brevi al framework Swing (il actionPerformed NON termina subito, infatti) e quindi la tua interfaccia diventa completamente congelata e non responsiva. Non è ovviamente un bel scenario.

    Si risolve creando e gestendo un thread a parte che lavora in background e lascia libero il EDT. Ma questo implica svariate altre conoscenze e attenzioni da porre.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Sì, la ricerca è fatta tutta nell'actionperformed.
    Ok speravo di risparmiarmi i thread ma sembra proprio che non possa farlo! Tuttavia devo in qualche modo capire come fare e mi ci voglio mettere.
    Avresti un esempio o un link da cui partire? So come si usano i thread quindi non sono proprio digiuno! Ho usato java per varie cose, sono alle prime armi solo per le interfacce
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  6. #6
    Se qualcuno dovesse ritrovarsi con il mio stesso problema a questo link c'è un ottima spiegazione su come risolverlo. Devo adattarlo al caso mio ma l'esempio è perfettamente calzante!

    http://www.javaadvent.com/2012/12/mu...ingworker.html
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.