Ragazzi ho un problema con il login ed il logout.
In pratica quando avvio la mia applicazione richiede un login. Una volta verificate le credenziali di accesso si accede all'applicazione.
Ora ho un problema,una volta effettuato l'accesso con le credenziali esatta vorrei cambiare il JPannel del login con il mio JPannel principale.
Ho scritto un po' di codice,ma il JPannel del login non scompare ma si affianca nel mio JFrame all'altro JPanel.
Posto il codice per farvi capire meglio
JFrame
p
ublic class Vista extends javax.swing.JFrame {
private Logger logger = LoggerFactory.getLogger(this.getClass().getName());
private final Modello modello;
private final Applicazione applicazione;
private final Map<String,Object> mappaSottoViste = new HashMap<String,Object>();
public Vista(Applicazione applicazione,Modello modello) {
logger.info("\nCreo e Visualizzo La Vista\n"+"Classe:" +" " + this.getClass().getName()+"\n");
this.modello = modello;
this.applicazione = applicazione;
initComponents();
inizializza();
InizializzaSottoViste();
schermoLogin();
this.setDefaultCloseOperation(Vista.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int conferma = JOptionPane.showConfirmDialog(null,"Sicuro Di Voler Uscire Dal Programma ?","Esci", JOptionPane.YES_OPTION);
if (conferma == JOptionPane.YES_OPTION) {
logger.info("\nUscita dall'Applicazione Avvenuta con Successo\n"+""+this.getClass().getName()+"\n");
System.exit(0);
}
}
});
}
public Object getSottoViste(String nome) {
return this.mappaSottoViste.get(nome);
}
public void visualizzaFinestraWarning(String err) {
JOptionPane.showMessageDialog(this,err,"Attenzione", JOptionPane.WARNING_MESSAGE);
}
private void inizializza() {
this.mappaSottoViste.put(Costanti.PANNELLO_PRINCIPALE, new PannelloPrincipale(this));
this.mappaSottoViste.put(Costanti.PANNELLO_LOGIN, new PannelloLogin(this));
this.mappaSottoViste.put(Costanti.FINESTRA_AGGIUNGI_PRODOTTO, new FinestraAggiungiProdotto(this));
this.mappaSottoViste.put(Costanti.FINESTRA_RIFORNISCI, new FinestraRifornisci(this));
this.mappaSottoViste.put(Costanti.FINESTRA_SCONTRINO, new FinestraScontrino(this));
this.mappaSottoViste.put(Costanti.FINESTRA_VISUALIZZA_CONFRONTO_SCONTRINO, new FinestraVisualizzaConfrontoSContrino(this));
this.mappaSottoViste.put(Costanti.FINESTRA_VISUALIZZA_PRODOTTI, new FinestraVisualizzaProdotti(this));
}
private void InizializzaSottoViste() {
this.setTitle("Benvenuto in Catena Supermercato");
AzioneEsci ae = (AzioneEsci) this.getApplicazione().getAction(Costanti.AZIONE_ESCI);
this.itemEsci.setAction(ae);
AzioneLogout alo = (AzioneLogout) this.getApplicazione().getAction(Costanti.AZIONE_LOGOUT);
this.itemLogout.setAction(alo);
AzioneInformazioni ai= (AzioneInformazioni) this.getApplicazione().getAction(Costanti.AZIONE_INFORMAZIONI);
this.itemiInformazioni.setAction(ai);
AzioneVisualizzaFinestraScontrino avfs = (AzioneVisualizzaFinestraScontrino) this.getApplicazione().getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_SCONTRINO);
this.itemScontrino.setAction(avfs);
AzioneVisualizzaFinestraProdotto avfp = (AzioneVisualizzaFinestraProdotto) this.getApplicazione().getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_PRODOTTO);
this.itemProdotti.setAction(avfp);
}
public void schermoPrincipale() {
PannelloPrincipale pp = (PannelloPrincipale) this.getSottoViste(Costanti.PANNELLO_PRINCIPALE);
JScrollPane scroll = new JScrollPane(pp);
this.getContentPane().add(scroll);
pp.inizializzaPannelloSupermercato();
this.validate();
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public void schermoLogin() {
PannelloLogin pl = (PannelloLogin) this.getSottoViste(Costanti.PANNELLO_LOGIN);
JScrollPane scroll = new JScrollPane(pl);
this.getContentPane().add(scroll);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}
Questo è il codice del JPanel per il login
public final class PannelloLogin extends javax.swing.JPanel {
private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
private final Vista vista;
private Applicazione applicazione;
public PannelloLogin(Vista vista) {
logger.info("\nCreo e Visualizzo il Pannello Principale\n"+"Classe:"+" "+ this.getClass().getName()+"\n");
this.vista = vista;
initComponents();
inizializza();
}
public void inizializza() {
this.bottoneLogin.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_LOGIN));
this.textUser.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_LOGIN));
this.jPass.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_LOGIN));
}
public void ripulisciCampi() {
this.textUser.setText("");
this.jPass.setText("");
}
public String getUsername() {
return this.textUser.getText();
}
public String getPassword() {
return new String(this.jPass.getPassword());
}
public void finestraErrore(String titolo,String messaggio) {
JOptionPane.showMessageDialog(this,messaggio,titolo,JOptionPane.OK_OPTION);
}
}
Questo è il codice del JPannel principale
public class PannelloPrincipale extends javax.swing.JPanel {
private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
private Vista vista;
private Applicazione applicazione;
private Modello modello;
public PannelloPrincipale(Vista vista) {
logger.info("\nCreo e Visualizzo il Pannello Principale\n"+"Classe:"+" "+ this.getClass().getName()+"\n");
this.vista = vista;
this.applicazione = vista.getApplicazione();
this.modello = vista.getModello();
initComponents();
inizializza();
this.textNome.setEditable(false);
this.textVia.setEditable(false);
this.textCittà.setEditable(false);
this.textCap.setEditable(false);
this.textTelefono.setEditable(false);
}
public void inizializza() {
inizializzaBottoni();
}
private void inizializzaBottoni() {
this.bottoneScontrino.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_SCONTRINO));
this.bottoneProdotti.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_PRODOTTO));
this.bottoneLogout.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_LOGOUT));
}
public void inizializzaPannelloSupermercato() {
Modello modello = (Modello) this.applicazione.getModello();
Supermercato s = (Supermercato) modello.getBean(Costanti.SUPERMERCATO);
this.textNome.setText(s.getNome());
this.textVia.setText(s.getVia());
this.textCittà.setText(s.getCittà());
this.textCap.setText(s.getCap());
this.textTelefono.setText(s.getTelefono());
}
public void finestraErrore(String titolo,String messaggio) {
JOptionPane.showMessageDialog(this,messaggio,titolo,JOptionPane.OK_OPTION);
}
public int finestraConferma ( String messaggio ) {
return JOptionPane.showConfirmDialog(this, messaggio, " Conferma ", JOptionPane.INFORMATION_MESSAGE);
}
public void finestraInformazioni(String messaggio) {
JOptionPane.showConfirmDialog(this, messaggio, " Conferma ", JOptionPane.CLOSED_OPTION);
}
}
e questo è il codice della mia azione login
//
public class AzioneLogin extends AbstractAction{
private final Applicazione applicazione;
private final Logger logger = ( Logger ) LoggerFactory.getLogger(AzioneLogin.class);
public AzioneLogin(Applicazione applicazione) {
this.applicazione = applicazione;
this.putValue(NAME, "Login");
this.putValue(SHORT_DESCRIPTION, "Inserisci Credenziali");
this.putValue(MNEMONIC_KEY,KeyEvent.VK_L);
this.putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("alt l"));
}
public void actionPerformed(ActionEvent e) {
PannelloLogin pl = (PannelloLogin) this.applicazione.getVista().getSottoViste(Costanti.PANNELLO_LOGIN);
String username = pl.getUsername();
String password = pl.getPassword();
Modello modello = this.applicazione.getModello();
CatenaSupermercati catena = (CatenaSupermercati) this.applicazione.getModello().getBean(Costanti.CATENA_SUPERMERCATI);
String errori = convalidaDati(catena, username, password);
if (!errori.isEmpty()) {
pl.finestraErrore("ATTENZIONE", errori);
return;
}
Supermercato s = catena.getSupermercato(username);
modello.addBean(Costanti.SUPERMERCATO, s);
applicazione.abilitaAzione(Costanti.AZIONE_LOGOUT);
applicazione.abilitaAzione(Costanti.AZIONE_VISUALIZZA_FINESTRA_PRODOTTO);
applicazione.abilitaAzione(Costanti.AZIONE_VISUALIZZA_FINESTRA_SCONTRINO);
applicazione.getVista().schermoPrincipale();
}
private String convalidaDati(CatenaSupermercati catena, String user, String password) {
Supermercato s = catena.getSupermercato(user);
String errori = "";
if( user.equals("")) {
errori += " Il Campo User Non Può Essere Vuoto";
}else if (s == null) {
errori += "Utente inesistente";
} else if (!s.getPassword().equals(password)) {
errori += "Password scorretta";
}
return errori;
}
}
Ovviamente vorrei anche che quando effetto il logout l'applicazione mi riportasse al JPanel di login, questo in parte avviene ma non come vorrei io. Cioè dopo che il JPannel di login si affianca a quello principale quando effetto il logout non ritorno a JPanel di login ma scompare solo quello principale è la cosa è al quando brutta da vedere. Ed inoltre se provo a rieffettuare il login non succede nulla
posto il codice della mia azione logout
public class AzioneLogout extends AbstractAction{
private final Applicazione applicazione;
private final Logger logger = ( Logger ) LoggerFactory.getLogger(AzioneLogout.class);
public AzioneLogout(Applicazione applicazione) {
this.applicazione = applicazione;
this.putValue(NAME, "Logout");
this.putValue(SHORT_DESCRIPTION, "Disconnettiti");
this.putValue(MNEMONIC_KEY,KeyEvent.VK_O);
this.putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("alt o"));
}
public void actionPerformed(ActionEvent e) {
Modello modello = (Modello) this.applicazione.getVista().getModello();
modello.addBean(Costanti.SUPERMERCATO,null);
PannelloLogin pl = (PannelloLogin) this.applicazione.getVista().getSottoViste(Costanti.PANNELLO_LOGIN);
pl.ripulisciCampi();
applicazione.getVista().getSottoViste(Costanti.PANNELLO_LOGIN);
PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLO_PRINCIPALE);
FinestraVisualizzaProdotti fvp = (FinestraVisualizzaProdotti) this.applicazione.getVista().getSottoViste(Costanti.FINESTRA_VISUALIZZA_PRODOTTI);
FinestraScontrino fs = (FinestraScontrino) this.applicazione.getVista().getSottoViste(Costanti.FINESTRA_SCONTRINO);
pp.setVisible(false);
fvp.setVisible(false);
fs.setVisible(false);
applicazione.abilitazioniIniziali();
}
}
Sapete dirmi come faccio a risolvere?