[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