Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Astro A50 Gen 5 dopo 6 mesi: sono davvero le migliori? Si poteva fare di più
Astro A50 Gen 5 dopo 6 mesi: sono davvero le migliori? Si poteva fare di più
Sono ormai sei mesi circa che utilizzo le Astro A50 come headset quotidiano per contenuti multimediali, musica e gaming ed è arrivato il momento di tirare le somme su quello che è un headset top di gamma con caratteristiche effettivamente ai vertici della categoria, ma che in questo lasso di tempo si è macchiato (anche in senso letterale) di alcune scelte fatte da Logitech non proprio ottimali
AMD Advancing AI 2025: le nuove GPU per l'intelligenza artificiale
AMD Advancing AI 2025: le nuove GPU per l'intelligenza artificiale
La domanda di nuove soluzioni hardware per gestire le elaborazioni legate all'intelligenza artificiale sta diventando sempre più pressante: AMD annuncia nuove GPU della famiglia Instinct MI350, mostrando anche quelle che saranno le innovazioni previste nel 2026 per quanto riguarda GPU, CPU e networking nei datacenter. A collegare il tutto ROCm 7, anello di congiunzione tra le componenti hardware e il lavoro degli sviluppatori
Fujifilm X half: 'Ritorno al Futuro Analogico'
Fujifilm X half: 'Ritorno al Futuro Analogico'
Quest'anno Fujifilm ha messo sul piatto due delle fotocamere più discusse del 2025. Una l'abbiamo vista qualche tempo fa, è GFX100RF, ossia la medio formato compatta con ottica fissa. E l'altra è questa qui, è Fujifilm X Half che si pone all'altro estremo. È una fotocamera super compatta, sempre a ottica fissa, sempre con otturatore centrale, ma è in questo caso caratterizzata da un sensore verticale in formato da un pollice. La sua particolarità è la modalità 'pellicola' che non vi permette di vedere le foto scattate fino a che non avete sviluppato tutto il rullino virtuale. Ha senso questo Ritorno al Futuro Analogico?
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-09-2006, 12:29   #1
Mac666
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
  • Estendere la struttura preesistente JTree e sovrascrivere il metodo paintComponent()
  • Creare una nuova classe che estenda JComponent e scrivere tutto da 0
Sebbene la seconda opzione possa risultare piuttosto lunga e complicata sarebbe quella da me preferita, sia per motivo di apprendimento (nella vita non si sa mai), sia perchè l'estensione di un oggetto grafico e la ridefinizione del suo metodo di disegno mi pare qualcosa di ancora più complicato.

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
  1. Definire una classe Tree che derivi da JComponent, gestendo il disegno del componente da zero così come l'implementazione delle varie interfacce necessarie (TreeSelectionModel, Scrollable e via discorrendo), mantenendo ovviamente il tutto il più semplice e compatto possibile. Non ho nessuna intenzione di rubare ai dipendenti Sun il lavoro
  2. Definire una classe che derivi da DefaultTreeCellEditor, la classe che JTree utilizza per il disegno degli elementi dell'albero, che rappresenti i nodi dell'albero, o meglio che semplicemente si occupi della loro resa grafica.
    La classe Tree conterrebbe infatti un oggetto root di tipo DefaultMutableTreeNode rappresentante la radice dell'albero (con relativi figli e figli dei figli ecc.) e la classe in questione altro non farebbe che recuperare l'oggetto associato al nodo n-esimo e stampare il risultato del metodo toString() del medesimo (che poi è ciò che DefaultTreeCellEditor fa, da cui la mia decisione).
  3. Cancellare la classe di rendering dei rami, includendo questa parte direttamente nel disegno dell'intero albero.
Avrei quindi un componente (Tree), contenente un riferimento alla radice (e di conseguenza a tutto l'albero) che nel metodo paintComponent() si preoccuperebbe di demandare la visualizzazione della stringa associata al nodo alla classe TreeNode derivata da DefaultTreeCellEditor (ma forse a questo punto basterebbe un oggetto di tale tipo che svolga tale funzione senza dichiarare una classe apposita, dato che il valore del nodo non sarebbe materialmente contenuto in detta classe) e si preoccupi di gestire il collegamento e il posizionamento di tali nodi.

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
Mac666 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2006, 11:45   #2
Mac666
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
Mac666 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Astro A50 Gen 5 dopo 6 mesi: sono davvero le migliori? Si poteva fare di più Astro A50 Gen 5 dopo 6 mesi: sono davvero le mig...
AMD Advancing AI 2025: le nuove GPU per l'intelligenza artificiale AMD Advancing AI 2025: le nuove GPU per l'intell...
Fujifilm X half: 'Ritorno al Futuro Analogico' Fujifilm X half: 'Ritorno al Futuro Analogico'
Recensione Edge 60 Pro: la fascia medio-alta che ci piace Recensione Edge 60 Pro: la fascia medio-alta che...
L'innovazione in Europa è a un bivio. Ne parliamo con Plug and Play L'innovazione in Europa è a un bivio. Ne ...
OLED stampati ink-jet? Xiaomi potrebbe e...
C'è una power station da 2304Wh e...
Hisense: TV 4K da 55'' con Dolby Vision ...
Perché il vero multitasking su iP...
Pure Power 13 M, la nuova gamma di alime...
Super offerta su Amazon: LG OLED G4 da 5...
Oggi iPhone 16 Pro costa 999€ e iPhone 1...
Apple AirTag batte tutti: ritrovata, pri...
Il PC portatile tuttofare da acquistare ...
275 rack oggi, 1 solo domani: il piano d...
Basta ansia da poppata: arriva il sensor...
SSD PCIe 6.0 troppo costosi e inutili pe...
Guerra tecnologica: ecco perché T...
Il futuro della memoria HBM è gi&...
Incredibile: Luca De Meo lascia Renault,...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www1v