editor di testo

2 views
Skip to first unread message

giuliano

unread,
Aug 23, 2007, 11:06:20 AM8/23/07
to jugToscana
Salve a tutti
per un progetto d'esame all'universita vorrei fare un piccolo editor
di testo.
Ho già realizzato l'interfaccia grafica fatta da menu, toolbar,
JtabbedPane con all'interno un textarea.
Siccome vorrei inserire anche la gestione dei font e del copia incolla
sostituirò alla textarea un JEditorPane.
Ora il mio problema è che è d'obbligo l'inserimento dell'ereditarietà.
Però non è possibile inserire

class prova extends JPanel

giusto per fare un esempio...ma deve essere una cosa tipo

class prova extends prova1

ma non so come realizzarla....x cui si accettano proposte.

grazie a tutti

Alessandro Fruchi

unread,
Aug 23, 2007, 12:01:21 PM8/23/07
to jugto...@googlegroups.com


Ciao!
Allora... come hai gia' detto anche tu, in questo caso l'implementazione dell'ereditarieta' va fatta su classi create da te e non da quelle gia' esistenti.
Questo e' anche abbastanza normale per l'interfaccia grafica di un progetto "didattico" ed effettivamente anche io troverei due obiezioni ad una tale implementazione e cerchero' di spiegarti quali sono:

1) Perche' estendere un JPanel (a cui dovrai aggiungere gli elementi per l'editing del testo) e successivamente aggiungerlo al contentPane del JFrame principale?
Per il principio del "keep it simple" ("facciamo le cose facili!") puoi direttamente aggiungere il pannello al frame principale e su di esso fare add() degli elementi che vanno al suo interno, il tutto direttamente all'interno della classe che si occupa della gestione della GUI.
Il risultato per l'utente e' esattamente lo stesso, ma tu scrivi codice migliore.

2) La cosa piu' importante!!! Ok, estendendo un JPanel tutto funzionerebbe ugualmente, ma il principio su cui si basa l'ereditarieta' dove va a finire?
E' questo il motivo principale per cui ti hanno giustamente detto che non va bene se estendi un JPanel...
O meglio, nel tuo caso sarebbe tecnicamente fattibile ma concettualmente scorretto.

E veniamo quindi alla tua domanda: per implementare l'ereditarieta' all'interno della tua applicazione devi guardare lo schema delle classi che sicuramente ti sarai fatto prima di inizare a scrivere il codice e a questo punto individuare degli oggetti che abbiano alcune (ma non tutte!) proprieta' in comune e riunirle in una superclasse che le contenga.

I due (o piu') oggetti che prima condividevano parte delle stesse proprieta' o funzionalita' a questo punto saranno due oggetti che estendono la superclasse e che specificano al loro interno solo le proprieta' o le funzionalita' a loro peculiari.

Se guardando lo schema delle classi non trovi niente che possa essere generalizzato, il mio consiglio e' quello di inserire una funzionalita' aggiuntiva "mirata" a poter creare una situazione favorevole alla generalizzazione di due o piu' classi.

Per farti l'esempio classico che faccio sempre a lezione, prendi ad esempio una lavatrice e un televisore.
In comune hanno il fatto che sono due elettrodomestici che possono essere accesi, spenti e che necessitano di una alimentazione a 220V, quindi una buona superclasse sarebbe una chiamata Elettrodomestico, che contenga la variabile intera "tensione" e due metodi chiamati "accendi()" e "spegni()".

Le due sottoclassi sono Lavatrice e Televisore (che estendono Elettrodomestico) e che al loro interno contengono soltanto quelle variabili o metodi proprie della loro astrazione: ad esempio Lavatrice potrebbe avere i metodi "centrifuga()", "lavaDelicati()" e cosi' via, mentre Televisore potrebbe avere una variabile intera chiamata "numeroCanali" per i canali memorizzabili e un metodo "cambiaCanale()" che ti permette di passare da un canale memorizzato all'altro.

Tutto questo, basta tradurlo nei termini della tua applicazione e otterrai una implementazione di ereditarieta' corretta anche concettualmente.

Se dovessi essere stato poco chiaro o se hai bisogno di ulteriori chiarimenti, non esitare a scrivere!

Alessandro

--
Alessandro Fruchi

G@W - http://www.guruatwork.com
JugToscana - http://www.jugtoscana.org
Reply all
Reply to author
Forward
0 new messages