|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2003
Città: Trecate - Novara - Piemonte - Italia
Messaggi: 406
|
[Java] Progettare un componente swing
Ma che bella questa sezione, l'ho notata solo ora
![]() Vi espongo subito il problema: sto sviluppando un applicativo Java, e mi servirebbe un componente grafico che permetta la visualizzazione di strutture ad albero nella forma classica, ovvero in questo modo ![]() Il problema sta nella scelta del metodo di risoluzione del problema. Premettendo che la mia conoscenza dell'ambiente grafico Java è praticamente nulla e ho iniziato a guardare qualcosa con questo programma, le soluzioni che, ad ora, ho trovato sono le seguenti
In realtà al momento le classi da me utilizzata per svolgere l'operazione di visualizzazione sono le seguenti http://sourceforge.net/projects/treedraw leggermente modificate per adattarsi al resto del progetto. Sintetizzando tale "package" definisce una classe estendendo JPanel, la quale sarà il componente grafico effettivamente visualizzato, disegnando quindi i nodi e i rami degli alberi in base alla grandezza dei diversi sottoalberi, calcolata tramite alcuni metodi ausiliari delle classi TreeNode e TreeEdge rappresentanti rispettivamente nodi e rami. Purtroppo la classe TreeNode non è un componente grafico in sè e per sè, seppur implementi un metodo paintNode() per il disegno del nodo rappresentato. Non mi è quindi possibile aggiungere dei listener che permettano la selezione di nodi particolari; tale selezione sarebbe invece possibile definendo la classe come estensione di una JLabel, ad esempio; cosa che peraltro fa già la classe JTree, anche se come detto prima la struttura di questa classe è piuttosto complessa e in definitiva sovradimensionata per quelle che sono le mie esigenze. E allora derivala, direte voi. L'avrei già fatto, se non fosse per il fatto che, per necessità, TreeNode deriva anche da DefaultMutableTreeNode, la classe di default per la rappresentazione di un nodo di Java, la quale però NON è un oggetto grafico. In definitiva, la mia idea sarebbe di
Riguardo al posizionamento un dubbio mi assilla: senza un container sottostante come potrebbe essere un JPanel, le coordinate per il disegno di nodi e rami a cosa si riferirebbero? Ed un eventuale background sarebbe disegnato automaticamente? Ed ancora sarebbe necessaria l'invocazione del costruttore super() della classe JComponent nel costruttore della classe derivata Tree? Ma soprattutto quanto 'azz ho scritto? ![]() Scusate la trafila ma sono in tesi, e un pò d'aiuto non fa mai male :ahsisi: Naturalmente non pretendo che mi facciate i compiti a casa, ma mi sarebbe d'enorme aiuto trovare qualcuno con cui discutere della cosa e capire se e come possa essere implementata, in attesa che il professore torni dalle vacanze ![]() Aggiungo per ulteriore chiarezza che: I punti 1,2 e 3 andrebbero eseguiti in sequenza Prima dovrei creare una classe Tree che erediti da JComponent, che sarebbe quindi l'albero vero e proprio, il quale sfrutterebbe al suo interno un oggetto di tipo DefaultTreeCellEditor per il disegno dei nodi. Quello che mi chiedo rispetto al posizionamento è: nel momento in cui inserissi nel JFrame dotato di un layout qualsiasi (ho preso un componente container a caso) più di un albero, il posizionamento relativo tra gli oggetti Tree sarebbe automaticamente gestito dal layout, giusto? L'unica mia preoccupazione all'interno del metodo paintComponent() della classe Tree sarebbe il posizionamento relativo dei nodi, insomma il disegno dell'albero in sè e per sè, right? Per quanto riguarda il background il mio dubbio nasce dal fatto che ereditando da JComponent non ho idea se questo disegni o meno un proprio background, mentre nella classe che ho trovato su sourceforge l'eredità da JPanel forniva una base da questo punto di vista. Grazie in anticipo a chiunque risponderà.
__________________
Ho trattato felicemente con: h1jack3r, danmar, Jimmy3Dita, Speedy L\'originale, Lucchericcio, Blind Guardian, riporto, -MC-, gokou |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2003
Città: Trecate - Novara - Piemonte - Italia
Messaggi: 406
|
Nobody?
__________________
Ho trattato felicemente con: h1jack3r, danmar, Jimmy3Dita, Speedy L\'originale, Lucchericcio, Blind Guardian, riporto, -MC-, gokou |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:04.