[Soci SLIP] Non riesco a fare una cosa con NETBEANS...

Lucio lucio a sulweb.org
Mar 11 Gen 2011 00:14:09 CET


Il lunedì 10 gennaio 2011 10:15:09 roby.gir a libero.it ha scritto:
> Ciao ragazzi, provo a rivolgermi alla lista per una piccola magagna con
> NETBEANS, spero che sia il luogo giusto per una domanda prettamente
> tecnico- informatica...

Dal punto di vista del topic la domanda è ok, in quanto netbeans è software 
libero e qui si parla di software libero. Dal punto di vista della tecnicità 
della domanda forse questa non è la lista giusta, perché gli iscritti a 
questa lista sono soprattutto utenti linux e raramente sviluppatori. Fra gli 
sviluppatori ad usare netbeans siamo forse in due...

Provo cmq a risponderti, spero che la mia risposta sia esauriente.

>
> In  sostanza, mi stò cimentando ad imparare i fondamenti di JAVA, ed in
> particolare di SWING, framework per la creazione di interfacce utente.
>

Swing è affascinante, ma un tantino difficile da padroneggiare. Si presta 
facilmente a commettere errori progettuali.

> Il problema è questo, ho creato un JInternalFrame di base, con una toolbar
> contenente una serie di pulsanti, da questa classe di base, voglio
> ereditare altre forms che verranno poi personalizzate, aggiungendo
> ulteriori controlli.

Non è detto che ogni software java con interfaccia grafica debba per forza 
seguire il pattern MVC, ma se non lo segui dovresti almeno scegliere un altro 
pattern e modellare su quello la tua gerarchia delle classi. Cerco di 
spiegarmi in parole semplici. Un JInternalFrame è un JInternalFrame. Il fatto 
che swing permetta di derivare classi da JInternalFrame non significa che sia 
automaticamente una buona cosa farlo. Le tue finestre grafiche sono 
probabilmente delle viste (view) su dei dati (model o document che dir si 
voglia). Come dicevo puoi scegliere tu se metterci o meno anche il controller 
di mezzo (pattern MVC) o se ricadere in un pattern document-view, ma, quale 
che sia la tua scelta, la tua view resta sempre e solo la tua view, che non 
deve derivare da JInternalFrame, ma al più contenere un JInternalFrame. La 
tua view deve occuparsi di come devono essere mostrati i dati (per esempio in 
che formato deve essere visualizzata una data). Il JInternalFrame ed i 
controlli in esso contenuti si occuperanno di come posizionare e disegnare a 
video quella data. Sono piani di astrazione diversi, il tuo compito come 
sviluppatore è tradurre da dato nel document a stringa intelleggibile e 
viceversa, oppure da azione su un pulsante ad esecuzione della funzione 
abbinata a quel pulsante. Il compito di Swing è tradurre da sequenza di 
caratteri ad insieme di pixel colorati e da click del mouse ad azione sul 
pulsante. Se mischi questi due livelli di astrazione (ovvero se derivi la tua 
view da una classe Swing tipo JInternalFrame) arrivi al massimo a fare il 
gioco del tris, poi il casino nel codice sarà talmente ingarbugliato da non 
riuscire ad espanderlo ulteriormente.

>
> Il problema è che non riesco a vedere la FORM ereditata in ambiente di
> sviluppo, non mi compare il comando per vedere la modalità di
> progettazione.

Questo perché la prassi comune nello sviluppo di applicazioni con interfaccia 
grafica è di creare form separate che saranno contenute in view separate. La 
gerarchia di derivazione la fai con le view, dove la classe view alla base 
può tranquillamente derivare da Object e basta. Ogni view derivata poi 
conterrà ed eventualmente controllerà una form specifica. Nessuno ti vieta di 
fare come vorresti tu, ma non essendo prassi comune (perché si sa già che 
sfocia in un casino terribile) netbeans non la supporta e non offre strumenti 
automatici per seguirla. Detto ciò sono consapevole che molti libri su java 
iniziano con il far derivare una nuova classe da qualche altra di Swing, in 
quanto dal punto di vista didattico questo metodo è più immediato e permette 
di mostrare alcuni concetti base. Nelle applicazioni vere però questa scelta 
è raramente vincente.

In altre parole, se hai 10 forms tutte uguali tranne che per un pulsante, ti 
trovi a ridisegnare 10 forms tutte uguali e poi aggiungere a tutte solo il 
pulsante specifico. In questo però netbeans ti aiuta perché puoi usare il 
refactoring per fare copia & incolla di un'intera form.

>
> Mentre se avvio il programma, mi appare correttamente a video la form
> ereditata....

Certo, perché il codice java generato alla fine funziona. Netbeans però non sa 
come fare a derivare le forms una dall'altra, in quanto per Netbeans quelle 
forms sono dei files XML che userà per generare il codice java, ma a livello 
XML non ha idea di come fare ad usare l'ereditarietà.

>
> Come fare?
>

Se posso darti un consiglio non richiesto, non usare proprio (ed evita 
tranquillamente di imparare) il form designer di Netbeans, a meno che tu non 
abbia in mente di fare solo applicazioni assolutamente banali e didattiche. 
Il problema è che genera codice per lo più incomprensibile e se un domani tu 
volessi migrare il tuo programma a qualcosa che non è Netbeans ti troveresti 
fra le mani codice che non hai scritto tu e la cui comprensione richiede 
fatica ed anche una certa dose di fortuna.

Io preferisco codificare a mano (scrivendo codice java) i layout delle form 
usando magari un layout manager che aiuti a farlo in modo relativamente 
semplice come il FormLayout disponibile nelle librerie jGoodies.






Maggiori informazioni sulla lista Soci