Non riesco a chiudere un JPanel

di il
3 risposte

Non riesco a chiudere un JPanel

Salve, sto creando un programma che simula una pseudo-pagina dove sono presenti varie offerte di lavoro e l'utente può accedere con un profilo e prenotare i vari colloqui. Sto creando i vari pannelli e ho riscontrato un problema.
Ho creato una JMenuBar dove ci sarà un filemenu chiamato utente che se effettuato l'accesso farà comparire la pagina profilo dell'utente e se invece non si è effettuato l'accesso comparirà la pagina di login per poi effettuarlo.
La pagina login ha un tasto accedi che quando viene schiacciato dovrebbe far scomparire la pagina login e far comparire la pagina profilo dell'utente in questo caso solo che non riesco e non capisco il motivo.
Ho usato un listener del tasto accedi nella classe del pannello login dove dico login.setVisible(false) ma mi da errore.

package ProvaProgramma;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.*;

import javax.swing.*;


public class Login {
	
	public void login(Container conte,JPanel login,JPanel utente) {
		
		login = new JPanel();
		conte.add(login);
		
		login.setBounds(500, 400, 300, 200);
		login.setBackground(Color.yellow);
		
		//Labels
		
		JLabel nome,password,titolo;
		titolo = new JLabel("Accedi con le tue credenziali");
		titolo.setBounds(120,50,200,50);
		login.add(titolo);
		
		nome = new JLabel("Username");
		nome.setBounds(50,130,100,50);
		login.add(nome);
		
		password = new JLabel("Password");
		password.setBounds(50,190,100,50);
		login.add(password);
		
		//Text field
		
		JTextField user,pass;
		
		user = new JTextField("Inserire password");
		user.setBounds(50, 170, 280, 30);
		login.add(user);
		
		pass = new JTextField("Inserire username");
		pass.setBounds(50, 230, 280, 30);
		login.add(pass);
		
		//Button
		
		JButton accedi = new JButton("Accedi");
		accedi.setBounds(140, 290, 100, 40);
		login.add(accedi);
		
		
		TrueFalse tf = new TrueFalse();
		
		accedi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) { 
				login.setVisible(false);
				utente.setVisible(true);
				System.out.println("Accesso effetuato: Username: "+user.getText()+", Password: "+pass.getText());
			}
		});
	
		login.setLayout(null);

	}	

}
questa è la classe login

3 Risposte

  • Re: Non riesco a chiudere un JPanel

    Lollox48 ha scritto:


    Ho usato un listener del tasto accedi nella classe del pannello login dove dico login.setVisible(false) ma mi da errore.
    	public void login(Container conte,JPanel login,JPanel utente) {
    		
    		login = new JPanel();
    		conte.add(login);
    
    Innanzitutto non è proprio tutto molto sensato. Al metodo login devi passare il JPanel di login ma poi subito dopo ne crei un altro e lo assegni al parametro login ... quindi quello passato alla invocazione ... boh. Non ha senso così.

    Comunque sì, ti dà errore perché nella anonymous inner class fai riferimento a login che però non è "final" (o effectively final da Java 8 ).

    E ad ogni modo, dal solo codice postato NON si può capire se quel Container usa o no un layout manager (che cambierebbe le cose). Andrebbe rifatto tutto un po' meglio come design generale.
  • Re: Non riesco a chiudere un JPanel

    Si capisco che senza l'intero programma sia molto complicato capire però sono tante righe di codice quindi non sapevo se mandarlo tutto.
    Sono agli inizi e non conosco bene tutte le funzionalità e meccaniche di java.
    Ma se metto final, login può essere modificato per esempio setVisible da true a false? Perchè so che se si usa final è come se diventasse una costante non lo so.
    Riguardo al container non so cosa sia un layout manager e penso che non l'ho usato.
  • Re: Non riesco a chiudere un JPanel

    Lollox48 ha scritto:


    Ma se metto final, login può essere modificato per esempio setVisible da true a false? Perchè so che se si usa final è come se diventasse una costante non lo so.
    Il final riguarda solo il valore nella variabile (il reference al JPanel), che non può più cambiare, cioè non puoi assegnare un altro JPanel alla variabile. Ma NON inficia assolutamente sullo "stato" di un oggetto, che puoi sempre cambiare se ci sono i metodi appositi (setXyz) o accessibilità diretta a campi non final.

    E' meglio comunque se cambi un po' il design generale del codice.
Devi accedere o registrarti per scrivere nel forum
3 risposte