Newsgroup: it.comp.java
Titolo: Best Practice per il painting...

Salve a tutti.
Mi trovo di fronte al dover effettuare una scelta relativamente ad un
problema (sostanzialmente di Java2D) che esporrò qui di seguito e sul
quale confido nei vostri suggerimenti.
Devo in pratica implementare dei JPanel in cui saranno contenute
superfici chiuse, dalla forma più disparata a loro volta divise in
sezioni. Queste sezioni "interagiscono" con l'utente, nel senso che,
dao il focus ad una di queste sezioni, l'utente può digitare un (solo)
carattere della tastiera ed il carattere compare al centro della
sezione medesima. Tanto per fare un esempio, immaginiamo una corona
circolare divisa in 10 parti uguali.
Ora, le possibili implementazioni sono:
1) Creare un mio JTextField in cui faccio l'override di paintComponent
ed al quale posso quindi dare la forma (Shape) che desidero. Nel mio
JPanel "comporrò" la superficie unendo posizionalmente i vari
JTextField (che rappresentano le sezioni di cui sopra).
2) Faccio l'override di paintComponent direttamente nel JPanel.
Superfici e sezioni vengono tutte generate con i metodi di Graphics.
Devo poi intercettare il MouseListener per il focus ed il KeyListener
per il carattere (che poi verrà "dipinto" con drawString).
3) Come 2) ma, al centro di ogni sezione metto un JTextField ordinario.
Pregi e difetti:
1) Pregi:  ho a disposizione tutti i metodi di JTextField. Il difetto
è che (temo) in realtà la forma dei JTextField sia sempre
rettangolare (a dispetto da ciò che è opaco)
e quindi non posso costruire forme composte a mio piacimento. Inoltre,
non so quanto sia strategia possa funzionare al ridimensionamento della
finestra.
2) Pregi: non devo impazzire a disegnare ed è il medoto che mi dà la
maggior libertà riguardo alle superfici. Difetti: devo gestire
parecchi eventi e parecchi "Point" e non so quale sarà il rendering
del carattere digitato.
3) Sembra la soluzione migliore ma, per non presentare una cosa troppo
brutta temo che dovrò lavorare anche sul painting del texfields.
Esperienze in merito?
Grazie

 quale confido nei vostri suggerimenti.
Lascerei perdere i textfield, hanno funzionalita' secondo me inutili al tuo
caso (singolo carattere).
Io valuterei l'introduzione di JButton e override di paintComponent ed
altri metodi strategici (ad es. contains()). Per il contains e la paint
userai delle Shape ovviamente. 
I button magari li gestisci come se fossero dei ToggleButton, quando e' on
allora ascolti la tastiera. Oppure quando ha il focus (lo disegni tu come
preferisci).
Nella paintComponent del Button gestisci il disegno o meno del carattere
digitato.
Potresti addirittura usare JComponent o JAbstractButton volendo alleggerire
la cosa ma forse poi ti tocca implementare altre cose e non so se ne vale
la pena.
Ho fatto qualcosina di lontanamente simile (una mappa con elementi
cliccabili e selezionabili, gli elementi avevano label,  gestivo il
rollover e la selezione, l'actionPerformed e' in omaggio col JButton) e non
e' complicatissimo.
ciao

 ha scritto nel messaggio
news:ptubd96y8x0d.trbq1z02r65a$.dlg@40tude.net...

Non penso abbia senso usare i JButton: la parte di eventi ecc. che si
userebbe
sarebbe minima rispetto a tutto il resto del codice da scrivere: tanto vale
usare
oggetti proprietari e scriverci su banalmente con JAVA2D.

 ciao
Ciao e grazie per i suggerimenti

 terza.
il button fondamentalmente serve da appoggio. implementa un po' di robe che
possono essere utili o meno, ad esempio ha gia' il PropertyChangeSupport in
loco (ok non e' difficile da aggiungere a qualsiasi oggetto). Puoi usare un
qualsiasi oggetto in effetti. Anche un semplice JPanel con dentro oggetti
tuoi che si ridisegnano su richiesta del JPanel.
il textfield esteticamente mi da l'idea di integrarsi poco con quallo che
vuoi fare ma non e' escluso che alla fine sia la soluzione migliore.
Giocando coi Border puoi anche renderlo piu' amichevole col resto
dell'interfaccia a ben pensarci.