View Full Version : [JAVA] JTextArea con formattazione standard
franksisca
16-07-2009, 20:15
praticamente vorrei che una textarea permettesse l'inserimento di 25 caratteri per riga andando a capo automaticamente per massimo 6 righe.
è una cosa orribile ma mi serve.
per ora non vi dico come ho risolto (hihihhii) ma aspetto ANSIOSAMENTE vostri suggerimenti.
ho visto che potrei settare nel costruttore righe e colonne....ma non mi funziona O_O
righe e colonne nel costruttore sono solo un concetto visivo che influenza la dimensione preferita dell'area di testo (consentirà di visualizzare almeno tot righe e tot colonne).
Il limite che vuoi applicare è nel modello dell'area di testo, il suo Document. Astrattamente si tratta di catturare l'inserimento di testo nel metodo insertString del Document (o nell'omologo di un DocumentFilter applicato al Document) e verificare se il paragrafo corrente può accettare o no altro testo.
In caso affermativo inserisci, altrimenti devi riportare i caratteri in eccesso rispetto al punto di inserimento nel paragrafo successivo, andando a scombinare tutto.
Se ti trovi nel metodo insertString di un Document e offset è la posizione di inserimento del testo - che ottieni come parametro dell'invocazione insertString, allora arrivi al "paragrafo" in cui il testo è inserito con:
Element root = getDefaultRootElement();
int index = root.getElementIndex(offset);
Element paragraph = root.getElement(index);
La lunghezza del paragrafo è:
int len = paragraph.getEndOffset() - paragraph.getStartOffset();
Se str è il testo che il metodo insertString riceve come sequenza di caratteri da inserire allora è chiaro che str è inseribile se:
getLength() + str.length() < 25 * 6; //limite di 6 righe da 25 caratteri
e se:
ed è inseribile nel paragrafo corrente se:
len è str.length() < 25; //25 caratteri per paragrafo
Limitandoci a questo diremmo che se le due condizioni su citate si verificano allora il testo str è inserito con (siamo sempre in una sovrascrittura di insertString):
super.insertString(text, offset, att);
altrimenti bisogna vedere. Se è ecceduto il limite totale di caratteri (6 * 25) per una qualsiasi sottostringa di str allora non se ne fa nulla e non si invoca pertanto super.insertString. Se invece il limite è parzialmente ecceduto (magari sono disponibili 3 caratteri e str è lunga 10) puoi decidere di inserire 3 caratteri o rifiutare l'intera stringa.
Idem nel caso in cui si superi parzialmente il limite di caratteri per paragrafo.
Tieni conto che la digitazione è solo uno dei mezzi attraverso cui un componente di testo Swing può ricevere del testo. Gli altri precotti sono il drag and drop e il copia-incolla e questi possono causare l'inserimento di più caratteri per volta, tra i quali anche dei separatori di paragrafo (il \n).
franksisca
16-07-2009, 22:55
ok, chiaro come al solito.
ora vedo se vale la pena applicare il documen o se trovare una soluzione più spartana (dato che mi serve una cosa spartana).
Be', se funziona chissenefrega se è spartana. Ricorda solo di provare la soluzione che scegli anche con il copia e incolla.
franksisca
17-07-2009, 00:38
Be', se funziona chissenefrega se è spartana. Ricorda solo di provare la soluzione che scegli anche con il copia e incolla.
la mia idea era parsare la stringa.
niente di più niente di meno.
praticamente sto facendo la cartolina (ricorda la discussione sulla stampa...sempre li siamo) e volevo inserire un messaggio da stampare.
solo che per non sbattere troppo ho pensato "forzo a inserire massimo 6 righe da 25-30 caratteri e ciao." (non mi serve nulla di iper"abstract").
quindi mi era venuta l'idea di usare la textarea con righe e colonne.
poi tu mi hai chiarito il concetto...alla fine userò una textarea e parserò il testo con un classico stringtokenizer o con gli indici...devo vedere come riesco a creare meno casini :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.