PDA

View Full Version : [JAVA] Contenuto JFrame


cifa
09-07-2011, 11:22
Salve a tutti,
Premetto subito che sono piuttosto nuovo alle GUI, quindi probabilmente sto per dire bestialità, scusatemi in partenza :)
Ho concluso una GUI che attualmente funziona in questo modo (schematizzo dato che il codice è molto lungo):

Un main crea un frame (chiamiamolo frame1), attraverso un buttonlistener setta il frame1 non visibile e invoca un altro metodo statico che crea un frame2 ex novo lo riempe a dovere ed ha buttonlistner assolutamente analoghi a frame1. Tutto ciò avviene a catena per oltre una decina di finestre almeno.

Il mio dubbio è che il creare così tanti Frame sia poco corretto, avevo dunque pensato di passare ai vari metodi come argomento il frame originario da riempire al posto dei vari frame che vengono creati ex-novo dai metodi, in questo modo eviterei di creare frame ogni volta, ma non riesco a farlo. L'unica cosa che mi era venuta in mente è creare per ogni metodo un pannello a cui aggiungere i componenti come facevo con i nuovi frame per poi settarlo come contentpane del frame passato come riferimento. Ma facendo così non è ugualmente dispendioso? Altra domandina è, io ho diversi bottoni "Indietro", grazie al modo usato fino ad adesso, mi bastava passare come riferimento ad ogni metodo il frame creato dal metodo precedente e lavorare di .setVisible, se dovessi invece cambiare il tutto per "ri-riempire" uno stesso frame dovrei più volte svuotarlo e ri-riempirlo, non sarebbe molto peggio ?


Vi ringrazio e mi scuso per la domanda magari sciocca.

PGI-Bis
09-07-2011, 16:11
prima la seconda: dal punto di vista dell'organizzazione il codice non cambia perchè quelli che prima erano frame diventerebbero pannelli. Passi il riferimento "globale" a questi così come lo passavi ai frame.

Circa l'uso dei frame in verità è una scelta di "filosofia", tra interfacce a desktop multipli (cioè più finestre) e quelle a desktop singolo. Quello che conta è l'usabilità. Ad esempio una MDI può essere grandiosa se hai due monitor e una ciofeca galattica se ne hai uno solo. Le SDI dipendono tanto dalla risoluzione dello schermo: se è bassa passi metà del tempo a trascinare barre di scorrimento.

Insomma, bisogna vedere.

cifa
09-07-2011, 16:50
prima la seconda: dal punto di vista dell'organizzazione il codice non cambia perchè quelli che prima erano frame diventerebbero pannelli. Passi il riferimento "globale" a questi così come lo passavi ai frame.

Circa l'uso dei frame in verità è una scelta di "filosofia", tra interfacce a desktop multipli (cioè più finestre) e quelle a desktop singolo. Quello che conta è l'usabilità. Ad esempio una MDI può essere grandiosa se hai due monitor e una ciofeca galattica se ne hai uno solo. Le SDI dipendono tanto dalla risoluzione dello schermo: se è bassa passi metà del tempo a trascinare barre di scorrimento.

Insomma, bisogna vedere.

Beh la mia GUI in realtà è dannatamente basica, quello che ho è un insieme di frame (quasi tutti della stessa dimensione) contenente solo textfield, bottoni e qualche combobox, non ho finestre che devono comparire insieme e sopra. A livello finito la sensazione che l'utilizzatore ha è quella di un unica finestra (di dimensioni piccolo, 600x300 dovrebbe essere) il quale contenuto cambia.
Ad esempio se l'utilizzatore seleziona un campo di una JList e preme OK, a lui compare nello stesso spazio utilizzato prima un insieme di TextField con campi da modificare, quello che accade a livello del mio codice è che il vecchio frame contenente JList ed altra roba viene settato non visibile, mentre viene chiamato un metodo che si occupa di creare una nuova finestra con i vari componenti e la setta visibile fino a contro-ordine.

Quindi però, se ho capito bene, a livello di efficienza non cambia nulla se dovessi ri-riempire lo stesso frame con diversi pannelli, giusto ?


Scusami è che oltre ad esser novizio con le GUI lo sono anche con la programmazione :)

PGI-Bis
09-07-2011, 20:31
a livello di efficienza ne guadagni (con un frame solo) perchè la realizzazione di un JFrame è un procedimento oneroso. Relativamente parlando: all'atto pratico l'utente non si accorge di alcuna maggiore rapidità del programma.

cifa
10-07-2011, 09:47
a livello di efficienza ne guadagni (con un frame solo) perchè la realizzazione di un JFrame è un procedimento oneroso. Relativamente parlando: all'atto pratico l'utente non si accorge di alcuna maggiore rapidità del programma.

Beh dato che è un progetto universitario ed il codice penso verrà ispezionato, penso che mi converrà sostituire ogni nuovo frame con un nuovo panel che verrà settato come contentPane del frame passato come riferimento, giusto ?
L'unica cosa che mi puzzava è che usando questo metodo, ad ogni pulsante indietro devo ricreare un panel da capo, ma se mi dici che creare un JFrame è oneroso, intraprenderò questa strada.

Ti ringrazio :)