Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [Swing] JTextPane

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150

    [Swing] JTextPane

    Ciao a tutti.

    Ho il seguente problema: ho due textpane (1 e 2).
    Il textpane 1 e' settato su disable.
    Io voglio che cio' che digito nel textpane 2, venga copiato e incollato in textpane 1 (stile chat insomma).
    TextPane 2 deve essere resettato dopo questa operazione, ovvero rimanere vuoto.

    Per ora son arrivato solo fino a questo punto:

    Codice PHP:
    textPane.setCaretPosition(textPane.getDocument().getLength());
                     
    textPane.setText(textPaneUtente.getText()); 
    Pero' cosi facendo:

    -il textpane 2 non si resetat
    -textpane 1 ha esattamente lo stesso contenuto di textpane2, e io non voglio questo: il nuovo testo inviato deve aggiungersi a quelli precedentemente inviati (a capo e mantenendo lo stesso tile).

    Sapreste aiutarmi?

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

    Re: [Swing] JTextPane

    Originariamente inviato da Skaffa
    Sapreste aiutarmi?
    Innanzitutto bisogna vedere la questione degli attributi. Cioè se il textpane2 (la sorgente) ha del testo con diversi attributi e vuoi copiare anche quelli.
    Se non ti interessa copiare gli attributi ma solo il testo in sé ... beh, tieni presente che lo StyledDocument ha il metodo insertString(), quindi puoi inserire una stringa nel punto (valido come indice) che vuoi.
    E per resettarlo basta fare un setText("").
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    TextPane2 ha diversi attributi, tipo immagini, stili di testom font etc che andranno copiate nell'altro textPane

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Skaffa
    TextPane2 ha diversi attributi, tipo immagini, stili di testom font etc che andranno copiate nell'altro textPane
    Se è così, allora le cose si complicano un po' ... ma è comunque fattibile, entro certi limiti.

    Prova questo:
    codice:
    public static void appendStyledText(JTextPane srcTextPane, JTextPane dstTextPane) {
        StyledDocument srcDoc = srcTextPane.getStyledDocument();
        StyledDocument dstDoc = dstTextPane.getStyledDocument();
        Element root = srcDoc.getDefaultRootElement();
    
        appendElementToStyledDoc(root, dstDoc);
    }
    
    private static void appendElementToStyledDoc(Element srcElement, StyledDocument dstDoc) {
        if (!srcElement.isLeaf()) {
            int count = srcElement.getElementCount();
    
            int start = dstDoc.getLength();
    
            for (int i = 0; i < count; i++) {
                Element childElement = srcElement.getElement(i);
    
                appendElementToStyledDoc(childElement, dstDoc);
            }
    
            int end = dstDoc.getLength();
            dstDoc.setParagraphAttributes(start, end-start, srcElement.getAttributes(), false);
        } else {
            try {
                Document doc = srcElement.getDocument();
                String text = doc.getText(srcElement.getStartOffset(), srcElement.getEndOffset()-srcElement.getStartOffset());
                dstDoc.insertString(dstDoc.getLength(), text, srcElement.getAttributes());
            } catch (BadLocationException e) {
                // Non dovrebbe succedere.
            }
        }
    }
    L'ho scritto velocemente, non è perfetto e non pretendo che lo sia ...
    Non l'ho provato con tutti i possibili tipi di attributi e strutture del testo. Per certe cose sicuramente non funziona bene. Mi riferisco ad esempio a dei Component inseriti tra gli attributi.

    Comunque prova ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Funziona, ho solo aggiunto il seguente codice:

    Codice PHP:
    textPaneUtente.setText(""); 
    per resettare il textpane di origine dopo aver inviato il testo all'altro jtextpane.

    Grazie mille

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.