Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    [Java] Selezionare il testo con un tratteggio..

    Ciao a tutti,

    Chiedo venia per il titolo, ma in così poche parole non sapevo che scrivere.

    Il problema è questo:
    Voglio fare in modo che l'utente cliccando su del testo* possa impostare vari attributi, i seguenti verranno poi in automatico scritti sottoforma di codice HTML (se viene selezionata una certa parola o frase, e a questa viene applicato del grassetto, verrà così generato la parola tra i tag ).

    * il testo, viene scritto in un JTextPane (che si trova in una classe che estende JFrame).

    La mia intenzione non è fare una semplice selezione del testo, ma "contrassegnare" quella parola, fare in modo venga circondata da un "rettangolino"..
    ..un esempio, può essere la modalità di disegno su NetBeans, dove cliccando su un componente nel frame, questo viene selezionato e successivamente modificato in base alla scelta dell'utente (programmatore in questo caso).

    Spero di essermi spiegato.. se qualcosa non è chiaro, cercherò di essere più esaustivo.

    Grazie a tutti!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    ..Nessuno sa aiutarmi?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Selezionare il testo con un tratteggio..

    Originariamente inviato da Patrick Jane
    La mia intenzione non è fare una semplice selezione del testo, ma "contrassegnare" quella parola, fare in modo venga circondata da un "rettangolino"..
    Se viene usato uno StyledDocument per il JTextPane credo proprio che non si possa fare. Non mi pare di vedere in StyleConstants la possibilità di impostare un attributo che descrive un "bordo" per un insieme di caratteri. Non c'è nemmeno un "bordo per un paragrafo", che sarebbe il caso più semplice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il JTextPane dell'html si presenta così

    codice:
      VisualHTML() {
        campo = new JTextPane();
        campo.setContentType("text/html");
        campo.setEditable(false);
        campo.addHyperlinkListener(this);
        addWindowListener(new WindowsAdapter(this));
         JScrollPane barra = new JScrollPane(campo);
        add(barra,BorderLayout.CENTER);
      }
    ..al momento ovviamente devo ancora aggiungere tutto quanto detto nel post precedente..
    Pensi si possa fare in qualche modo? e soprattutto, se si, che soluzione ti viene in mente?

    Grazie!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    codice:
      VisualHTML() {
        campo = new JTextPane();
        campo.setContentType("text/html");
        campo.setEditable(false);
        campo.addHyperlinkListener(this);
        addWindowListener(new WindowsAdapter(this));
         JScrollPane barra = new JScrollPane(campo);
        add(barra,BorderLayout.CENTER);
      }
    Uhm ... tu lo stai usando con contenuto HTML (quindi HTMLDocument che è una implementazione specifica di StyledDocument).
    Ma anche in questo caso credo proprio non si possa fare.

    Prendiamo questo documento:

    codice:
    <html><body>blabla <span style='border:1px solid black;color:red'>Bordato?</span> blabla</body></html>
    Se tu lo prendi, lo metti dentro un file .html e lo apri da un qualunque moderno browser (IE, Firefox ecc...) vedi che la scritta Bordato? è realmente bordata e in rosso. Cioè la proprietà border in CSS viene applicata e rispettata.

    Ora prova a metterlo nel JTextPane:

    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        public TestFrame() {
            super("Test Frame");
    
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(500, 400);
    
            JTextPane textPane = new JTextPane();
            textPane.setContentType("text/html");
            textPane.setText("<html><body>blabla <span style='border:1px solid black;color:red'>Bordato?</span> blabla</body></html>");
    
            getContentPane().add(new JScrollPane(textPane));
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    TestFrame f = new TestFrame();
                    f.setVisible(true);
                }
            });
        }
    }
    E vedrai che non si vede il bordo (il testo è però rosso). Il motivo è che il rendering di HTML in Swing è parecchio limitato per quanto riguarda il supporto a CSS.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Già.. hai proprio ragione.
    Avevo visto funzionassero i CSS, ma non avevo mai provato con un attributo "border" ad esempio..questo mi complica tutto! (dato che l'intenzione era appunto fare in modo di offrire un anteprima del codice scritto.. ci sono per caso altre soluzioni? Ho visto la classe parser..tuttavia non penso faccia al caso mio).

    Altra domanda..in NetBeans (cito lui perchè ho visto proprio ieri la modalità disegno), come fanno quindi a "circondare" con quel tratteggio (in modalità disegno) l'elemento selezionato?

    Grazie!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    Avevo visto funzionassero i CSS, ma non avevo mai provato con un attributo "border" ad esempio..questo mi complica tutto! (dato che l'intenzione era appunto fare in modo di offrire un anteprima del codice scritto.. ci sono per caso altre soluzioni?
    Con JTextPane/HTMLDocument credo (al 99,9%) di no. Se usassi qualunque altra cosa tipo embedding di un motore di un browser "reale" o una libreria per il rendering di HTML/CSS allora probabilmente sì se supporta bene CSS.

    Originariamente inviato da Patrick Jane
    Ho visto la classe parser..tuttavia non penso faccia al caso mio).
    Non è un problema di "parsing" del codice HTML dallo stream (o stringa che sia). Ma proprio un limite nel rendering, negli attributi utilizzabili nel "modello" che è il document, implementazione di StyledDocument.

    Originariamente inviato da Patrick Jane
    Altra domanda..in NetBeans (cito lui perchè ho visto proprio ieri la modalità disegno), come fanno quindi a "circondare" con quel tratteggio (in modalità disegno) l'elemento selezionato?
    Intendi nell'editor "visuale" di una interfaccia grafica dentro un IDE (NetBeans, Eclipse o altro che sia)?? Ma cosa centra?? Quello è per la fase di sviluppo. Non è un qualcosa che puoi usare a runtime nella applicazione. Insomma ... è un tool dell'IDE per disegnare una interfaccia e tipicamente generare il codice relativo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da andbin
    Intendi nell'editor "visuale" di una interfaccia grafica dentro un IDE (NetBeans, Eclipse o altro che sia)?? Ma cosa centra?? Quello è per la fase di sviluppo. Non è un qualcosa che puoi usare a runtime nella applicazione. Insomma ... è un tool dell'IDE per disegnare una interfaccia e tipicamente generare il codice relativo.
    L'idea (dato che per ora non si tratta di altro), è permettere all'utente di scrivere in quel JTextPane e far in modo che l'utente stesso cliccando su una parola o frase la selezioni* e successivamente la modifichi nel modo desiderato (cioè, colore, stile o carattere..)..una volta scelto, viene generato automaticamente l'html (ed il css).

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    L'idea (dato che per ora non si tratta di altro), è permettere all'utente di scrivere in quel JTextPane e far in modo che l'utente stesso cliccando su una parola o frase la selezioni* e successivamente la modifichi nel modo desiderato (cioè, colore, stile o carattere..)..una volta scelto, viene generato automaticamente l'html (ed il css).
    A parte la questione del "bordato" per una porzione di testo, che come si è visto non è supportato, per cose più basilari come font (tipo/dimension), colore testo, colore sfondo e poco altro non ci dovrebbero essere problemi.

    Se prendi l'esempio che ti avevo ampiamente fatto e descritto qui e gli fai 2 modifichette:
    1) setti il content type "text/html"
    2) Fai in modo che es. con un pulsante vada ad usare il HTMLEditorKit installato (grazie al setContentType appropriato) per scrivere su un file con il suo write(OutputStream out, Document doc, int pos, int len)

    Scoprirai che funziona benissimo. Ovvero ti genera una pagina HTML con i tag giusti per rappresentare i colori (nel mio esempio cambiavo solo il foreground con 3 pulsanti).
    Però te lo dico subito: non usa i CSS!! Usa un banale <font color="....">
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ok, va bene, grazie!!

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.