|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
[JAVA] JTextArea con formattazione standard
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
__________________
My gaming placement |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
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).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
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).
__________________
My gaming placement |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Be', se funziona chissenefrega se è spartana. Ricorda solo di provare la soluzione che scegli anche con il copia e incolla.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Quote:
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
__________________
My gaming placement |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:18.




















