Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [JAVA] Syntax Highlight

    Ciao a tutti, il mio problema è questo:
    Vorrei, dato un dizionario di parole, che queste, se inserite nell'apposito JTextPane, venissero colorate in modi diversi come fanno i programmi tipo NetBeans o notepad++, qualcuno sa darmi una mano? Grazie in anticipo, Ciao!
    L'ascensore può scendere su e giù...
    by Prof di Sistemi

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

    Re: [JAVA] Syntax Highlight

    Originariamente inviato da Harlandraka_94
    Vorrei, dato un dizionario di parole, che queste, se inserite nell'apposito JTextPane, venissero colorate in modi diversi come fanno i programmi tipo NetBeans o notepad++, qualcuno sa darmi una mano? Grazie in anticipo, Ciao!
    C'è un mio esempio qui, si chiama StyledWordsText.java
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille, come al solito sei sempre di grande aiuto! unico problema: il tuo codice lavora solo nel caso in cui il testo sia pre-settato, quello lo so fare, il mio problema era poter fare come fa per esempio netbeans, che mentre scrivi ti colora per esempio di blu le parole chiave, se scrivi "try", nel momento in cui scrivi la "y" finale ti colora "try" di blu perchè è una parola chiave, e appena cancelli una sola lettera di quella parola riporta il colore a nero perchè non è più una parola chiave... non so se rendo l'idea...
    L'ascensore può scendere su e giù...
    by Prof di Sistemi

  4. #4
    Come non detto, ho risolto, il problema adesso è che non mi prende il carattere invio, se clicco l'invio e scrivo mi ritorna in su di una riga D:
    L'ascensore può scendere su e giù...
    by Prof di Sistemi

  5. #5
    Credo che il problema sia nel settaggio del caretPosition, si era reso necessario perchè settando lo StyledDocument all'area di testo il cursore veniva posizionato all'inizio del textpane... ora io penso che il problema sia l'acquisizione del caret position, su un testo multilinea come funziona?
    L'ascensore può scendere su e giù...
    by Prof di Sistemi

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Harlandraka_94
    Grazie mille, come al solito sei sempre di grande aiuto! unico problema: il tuo codice lavora solo nel caso in cui il testo sia pre-settato
    Sì vero ... ma era appunto solo un esempio basilare e non avevo capito che ti serviva qualcosa "di più" di quello.

    Originariamente inviato da Harlandraka_94
    poter fare come fa per esempio netbeans, che mentre scrivi ti colora per esempio di blu le parole chiave, se scrivi "try", nel momento in cui scrivi la "y" finale ti colora "try" di blu perchè è una parola chiave, e appena cancelli una sola lettera di quella parola riporta il colore a nero perchè non è più una parola chiave...
    Ok, una evidenziazione più "dinamica".
    Non è sicuramente banale ma sono certo che si possa fare. Si dovrebbe registrare innanzitutto un DocumentListener sul document e il listener fornisce gli eventi relativi a qualunque modifica (e fornisce anche gli estremi per sapere dove è avvenuta la modifica tramite il DocumentEvent).
    Sapendo il range di offset interessati da una modifica si dovrebbe andare a ricontrollare le parole che intersecano questo range, comprese quelle appena adiacenti a questo range.

    Mi viene in mente un caso: nel document c'è scritto ad esempio

    public static void

    e io vado a cancellare SPAZIO static SPAZIO per intero (es. seleziono e poi CANC), resterebbe

    publicvoid

    Anche se la modifica non ha interessato gli offset in public e void (ma in mezzo), dovrei comunque ricontrollare dalla 'p' di public alla 'd' di void e ovviamente così non sarebbe una parola chiave di Java, quindi non si vorrebbe evidenziarla in qualche modo.

    Ma se metto il caret dopo la 'c' di public e premo SPAZIO, si ha una modifica di inserimento di 1 carattere. E dovrei ricontrollare le due parole che stanno appena intorno a questa modifica ovvero appunto public e void e stavolta sarebbero delle parole "chiave" di Java da evidenziare in modo speciale.

    Insomma, non ci sarebbe certo da ricontrollare l'intero documento ma solo la parte che è interessata dalle modifiche e le parole appena adiacenti.

    Lo so ... non è banale e si dovrebbe ragionare un pochino per rendere la cosa generica e non troppo fumosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Grazie mille per la risposta, ero riuscito a farlo ricontrollando tutto il testo, non è una bella soluzione ma per il momento funziona, poi tornerò a modificarlo, quello che non capisco ora è perchè fa casino col carrello, ogni volta che setta lo styled document al JTextPane porta il carrello in posizione zero, e mi ritrovo a scrivere le parole al contrario, esempio se scrivo
    try
    il risultato è
    yrt

    Sai da cosa può dipendere? ah, ho provato anche a memorizzarmi, al momento in cui viene generato l'evento KeyTyped la posizione del carrello con getCaretPosition, per poi settarla dopo l'assegnazione dello StyledDocument con setCaretPosition... il problema è che finchè si tratta di scrivere sulla prima riga non c'è nessun problema, nel momento in cui clicco sul tasto invio inizia a scrivere di nuovo al contrario...
    L'ascensore può scendere su e giù...
    by Prof di Sistemi

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Harlandraka_94
    ogni volta che setta lo styled document al JTextPane porta il carrello in posizione zero
    Cioè ogni volta invochi il setDocument(Document) sul textpane? Così no ... è chiaro che si "resetta".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    E come faccio a rimettere il carrello al suo posto?
    L'ascensore può scendere su e giù...
    by Prof di Sistemi

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Harlandraka_94
    E come faccio a rimettere il carrello al suo posto?
    Ma il caret in teoria non sarebbe nemmeno da toccare. Sono gli attributi associati agli offset dei caratteri nelle parole che sono da aggiornare di volta in volta (se poi rianalizzi tutto o invece lo fai in modo "furbo" come ho detto io ... è un'altra questione).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.