Precedente :: Successivo |
Autore |
Messaggio |
lucajeck Mortale devoto

Registrato: 17/10/07 15:21 Messaggi: 13
|
Inviato: 15 Apr 2008 20:25 Oggetto: * [JAVA] Contatore caratteri |
|
|
Ciao a tutti [ ]
sto implementando un editor di testo, vorrei che nella barra posta alla base dell'interfaccia comparisse il numero di caratteri stampabili presenti nell'area di testo.
Ho provato implementando i metodi
insertUpdate(DocumentEvent e)
removeUpdate(DocumentEvent e)
changedUpdate(DocumentEvent e)
ma mi conta tutti i caratteri, anche lo spazio, invio ecc..
ho anche provato con keyListener ma è peggio
si può fare un contatore di caratteri senza dover fare cose complicate tipo una selezione di quali caratteri includere nel contatore e quali no?
GRAZIE A TUTTI  |
|
Top |
|
 |
Typhoon90 Dio maturo


Registrato: 01/06/06 16:17 Messaggi: 1019 Residenza: Vivere per niente o morire per qualcosa. Scegli tu.
|
Inviato: 15 Apr 2008 20:29 Oggetto: |
|
|
non conosco java ma utilizzando python si potrebbe usare un ciclo for che prenda tutti i caratteri tranne lo spazio e l'invio.
La logica dovrebbe essere quella, ovviamente adattata alla sintassi java |
|
Top |
|
 |
lucajeck Mortale devoto

Registrato: 17/10/07 15:21 Messaggi: 13
|
Inviato: 15 Apr 2008 21:11 Oggetto: tanks |
|
|
si ci avevo pensato, ma forse in java esiste un metodo più semplice, vorrei scrivere un codice più elegante ed essenziale. Se nessuno mi risponderà magari cercherò di fare come dici tu.
grazie mille! |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 16 Apr 2008 09:14 Oggetto: |
|
|
Neppure io sviluppo con java ma potresti scrivere un thread che ogni tot secondi conti i caratteri magari con il famoso ciclo for.
In questo modo il codice è elegantre perchè di fatto demandi a qualcos'altro il compito di contare.
Così facendo non avrai però il conteggio esatto in ogni istante ma in caso di file molto lunghi non avrai troppo appesantimento nell'esecuzione del codice.
Senza il thread dovresti sbatterti ad intercettare ogni carattere e se viene premuto ad esempio backspace per cancellare una lettera devi decrementare il contatore dei caratteri.
Non so quale delle due strade sia la più semplice |
|
Top |
|
 |
lucajeck Mortale devoto

Registrato: 17/10/07 15:21 Messaggi: 13
|
Inviato: 16 Apr 2008 10:45 Oggetto: tanks |
|
|
si credo che possa essere una buona soluzione. grazie mille, ci preovo subito
 |
|
Top |
|
 |
crosati Comune mortale

Registrato: 04/11/08 09:26 Messaggi: 2
|
Inviato: 04 Nov 2008 09:57 Oggetto: Uso di thread per contare i caratteri |
|
|
Ciao,
l'uso di un thread per contare i caratteri è una buona idea ma si può renderla ottima utilizzando le code.
Mi spiego.
Intanto, la classa java.lang.Character ti offre tutta una serie di metodi per verificare se un carattere è una lettera, un numero, uno spazio, un "white char", e così via, e dovrebbe essere preferita all'implementazione diretta attraverso uno switch o un if sui caratteri stessi (soprattutto se viene utilizzata all'interno di un thread separato, dove le eventuali performance diventano meno critiche).
Poi, se utilizzi un Thread per il conteggio, è buona norma settargli una priorità bassa, almeno più bassa del thread degli eventi (quello che gestisce l'interfaccia autente). Se, come penso, l'inizializzazione avviene nello stesso thread degli eventi quello che puoi fare è
Codice: | thread.setPriority(Thread.currentThread.getPriority() - 1); |
Suggerirei, comunque, di non utilizzare un Thread direttamente, ma piuttosto di utilizzare un "executor" (vediti java.util.concurrent), creandolo usando:
Codice: | Executors.newSingleThreadScheduledExecutor(
new ThreadFactory {
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setPriority(Thread.currentThread().getPriority() - 1);
return t;
}
}
).scheduleWithFixedDelay(...); |
(scusa la compattezza, ma è solo per essere breve).
A questo punto c'è da chiedersi cosa deve fare il thread.
Io credo che anziché contare brutalmente ogni volta i caratteri present nel tuo documento, dovrebbe "aggiornare" un contatore ogni qualvolta un insieme di caratteri è stato aggiunto o rimosso. Questo lo potresti fare aggiungendo un DocumentListener al Document della tua area di testo che inserisca in una coda (ad esempio java.util.concurrent.ConcurrentLinkedQueue) la porzione di stringa aggiunta o rimossa all'editor. In questo modo devi solo contare la differenza per poi aggiungerla o rimuoverla dal computo totale.
Spero ti possa essere stato d'aiuto.
Claudio |
|
Top |
|
 |
crosati Comune mortale

Registrato: 04/11/08 09:26 Messaggi: 2
|
Inviato: 04 Nov 2008 10:02 Oggetto: Uso di thread per contare i caratteri |
|
|
Ciao,
anche se dopo 6 mesi (mi sono iscritto solo ora al forum), vorrei dare un piccolo contributo all'argomento.
L'uso di un thread per contare i caratteri è una buona idea ma si può renderla ottima utilizzando le code.
Mi spiego.
Intanto, la classa java.lang.Character ti offre tutta una serie di metodi per verificare se un carattere è una lettera, un numero, uno spazio, un "white char", e così via, e dovrebbe essere preferita all'implementazione diretta attraverso uno switch o un if sui caratteri stessi (soprattutto se viene utilizzata all'interno di un thread separato, dove le eventuali performance diventano meno critiche).
Poi, se si utilizza un Thread per il conteggio di caratteri generati nel thread degli eventi (quello che gestisce l'interfaccia utente), è buona norma settargli una priorità bassa, almeno più bassa del thread degli eventi stesso. Se l'inizializzazione avviene nello stesso thread degli eventi quello che si può fare è
Codice: | thread.setPriority(Thread.currentThread.getPriority() - 1); |
Suggerirei, comunque, di non utilizzare un Thread direttamente, ma piuttosto un "executor" (vedasi java.util.concurrent), creandolo usando:
Codice: | Executors.newSingleThreadScheduledExecutor(
new ThreadFactory {
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setPriority(Thread.currentThread().getPriority() - 1);
return t;
}
}
).scheduleWithFixedDelay(...); |
A questo punto c'è da chiedersi cosa deve fare il thread.
Anziché contare brutalmente ogni volta i caratteri presenti nel tuo documento, dovrebbe "aggiornare" un contatore ogni qualvolta un insieme di caratteri è stato aggiunto o rimosso. Questo lo si può fare aggiungendo un DocumentListener al Document dell'area di testo che inserisca in una coda (ad esempio java.util.concurrent.ConcurrentLinkedQueue) la porzione di stringa aggiunta o rimossa all'editor. In questo modo il thread di conteggio deve solo contare la differenza per poi aggiungerla o rimuoverla dal computo totale.
Claudio |
|
Top |
|
 |
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|