Innanzitutto ti ringrazio per la risposta, cercherò di spiegarmi meglio su quello che avrei intenzione di fare.
andbin ha scritto:
TKingu ha scritto:
E quello che vorrei poi fare, nell'action listener dei pulsanti che metterò, è un qualcosa di questo tipo:
Dipendente_Fram.content = pannellox;
Aggiornare la variabile di istanza che tiene il pannello centrale "corrente", ovviamente va bene ed è ok. Ma NON è questo di per sé che fa cambiare il pannello nel layout. Serve altro.
E vedo che usi GridBagLayout che è più critico da modificare dopo che la finestra è visibile. Inoltre vedo che dici:
"Mi servono 3 righe, due piccole, una in basso ed una in alto ed una grande nel centro."
Questa è la descrizione .... del BorderLayout! Quindi direi che il GridBagLayout NON ti serve.
Uso il GridBagLayout solo perchè molto più comodo e versatile, ho provato con il Border, ma avevo dei problemi con le dimensioni..
Per il come cambia andrò a cercare su internet, per ora ho solo una beta dove il pannello viene tolto e ne viene inserito un altro, mal che vada farò in quel modo.
andbin ha scritto:
TKingu ha scritto:
In che classe dovrei creare i pannelli?
Se intendi dire "dove vanno istanziati", dipende. Dipende se sono pochi/tanti, se hanno una inizializzazione "pesante" oppure no e quanto/quando saranno usati.
Bisogna anche vedere COSA fa cambiare i pannelli, se è per via di eventi esterni ai pannelli o se ciascun pannello "sa" di dover mostrare certi altri pannelli.
Tutta questa architettura va pensata BENE.
Purtroppo essendo il mio primo corso di programmazione ad oggetti, non sono pratico ed esperto, per cui volevo chiedere delucidazioni prima di mettere mani al codice.
Quel che devo fare è una interfaccia per l'utente collegato che può essere di 3 diverse tipologie, con ovviamente dei metodi diversi e quindi delle viste diverse. Di base, però, quel che cambia nella vista è solo il pannello centrale, il content.
public class Dipendente_Fram extends JFrame{
// Creo i 3 pannelli divisori.
JPanel header = new JPanel(); // Pannello di intestazione, quello in alto
JPanel content = new JPanel(); // Pannello centrale, dove è contenuto il corpo della finestra
JPanel footer = new JPanel(); // Pannello a pie' pagina, dove si trovano le info dell'utente.
il problema però è che non so se al livello di architettura sia possibile, anche perché non saprei dove istanziarli.
I pannelli dovranno essere 3 per ogni tipologia, con una JTable ed un paio di pulsanti, ai quali verrà aggiunto un action listener che si occuperà di posizionare il corretto pannello al click dell'opportuno pulsante, dunque i pannelli dovranno switcharsi al click di pulsanti contenuti nei pannelli stessi.
Avevo intenzione di creare una classe per ogni tipologia ed inserire un costruttore che mi costruisca i pannelli, andando a lanciare un "new tipologiax" ( dove ipoteticamente tipologiax è la classe che mi istanzia i pannelli per il dipendente di tipologia x) nel metodo che mi differenzia il tipo di utente una volta loggato, ma non so se questo metodo di procedere sia corretto
andbin ha scritto:
TKingu ha scritto:
In una interfaccia creata ad hoc? In che package la devo mettere quell'eventuale classe?
I pannelli li devo dichiarare privati e poi usare un getter?
Domande un po' vaghe ...
Hai ragione, spero che ora sia stato sufficientemente preciso, ti ringrazio ancora per la risposta datami e spero che potrai darmi un paio di dritte.