Boa tarde galera.
Eu pretendo colocar uma label de “Bom dia, usuário” na página principal do programa logo após o login, sendo que nome viria do field referente ao login.
O problema é que não consigo fazer funcionar… Todas as formas que tentei a variável vai para a ViewHome como null… Como posso consertar?
Como estou iniciando no Java (e na programação em si), tenho apanhado bastante
VIEWLOGIN
public class ViewLogin extends javax.swing.JFrame {
public String login;
public ViewLogin() {
initComponents();
setIcon();
colorOverlay.setBackground(new Color(51, 51, 51, 155));
}
private void btnLoginMousePressed(java.awt.event.MouseEvent evt) {
UserDAO dao = new UserDAO();
if(dao.checkLogin(usrField.getText(), passField.getText())){
new ViewHome().setVisible(true);
login = usrField.getText();
this.dispose();
}else{
new ViewLoginError().setVisible(true);
}
}
VIEWHOME
public class ViewHome extends javax.swing.JFrame {
ViewLogin user = new ViewLogin();//Tentativa desesperada de DEBUG
public ViewHome() {
initComponents();
setIcon();
time();
System.out.println(user.login); //Tentativa desesperada de DEBUG
colorOverlay.setBackground(new Color(51, 51, 51, 155));
}
private void time(){
//LocalTime now = LocalTime.parse("18:00:00"); //debug
LocalTime now = LocalTime.now(Clock.systemDefaultZone());
int hora = now.getHour();
if(hora < 12){
lblTime.setText("Bom dia, " + user.login);
} else if (hora < 18) {
lblTime.setText("Boa tarde, " + user.login);
} else{
lblTime.setText("Boa noite, " + user.login);
}
}
Peço desculpas pela pergunta provavelmente estupida, mas não vi outra alternativa…
Agradeço desde já!
Bom amigo vamos lá, primeiramente este: [quote=“Wilian_Silva, post:1, topic:350574”]
ViewLogin user = new ViewLogin();
[/quote]
Este user, é outro Objeto, ele não se refere a tela de login aberta, por este motivo a variável dele, é null, ou seja, neste caso ai vc está instanciando outro objeto, ex:
João e Paulo são da Classe Pessoa
João está com chave da casa para vc abrir
mas vc ta pedindo para o Paulo a chave, sendo que a Chave está com João.
O que vc pode fazer:
Já que quem chama da Tela ViewHome é a Classe ViewLogin, vc pode passar pelo construtor o nome do usuário. Exemplo:
Na Classe ViewHome vc faria:
public class ViewHome extends javax.swing.JFrame {
//recebemos o nome do usuario pelo construtor
public ViewHome(String nomeDoUser) {
initComponents();
setIcon();
time();
//veja q recebemos o nome do usuario pelo parametro
System.out.println(nomeDoUser); //Tentativa desesperada de DEBUG
colorOverlay.setBackground(new Color(51, 51, 51, 155));
}
private void time() {
//LocalTime now = LocalTime.parse("18:00:00"); //debug
LocalTime now = LocalTime.now(Clock.systemDefaultZone());
int hora = now.getHour();
if (hora < 12) {
lblTime.setText("Bom dia, " + user.login);
} else if (hora < 18) {
lblTime.setText("Boa tarde, " + user.login);
} else {
lblTime.setText("Boa noite, " + user.login);
}
}
}
e lá no ViewLogin quando vc for chamar a tela vc passaria por parâmetro no construtor:
if(dao.checkLogin(usrField.getText(), passField.getText())){
//veja que passamos no construtor agora.
new ViewHome(usrField.getText()).setVisible(true);
this.dispose();
}else{
new ViewLoginError().setVisible(true);
}
1 curtida
@Jeanderson_Silva, muitíssimo obrigado pela resposta e pela solução. Tenha um ótimo dia e mais uma vez, obrigado!
1 curtida
Obrigado, desejo o mesmo para vc, e bons estudos
1 curtida
Me surgiu outra dúvida (provavelmente idiota)… mas como posso chamar o “nomeDoUser” no lugar do “user.login” no time()?
Bom no caso vc tem q salvar este dado na sua classe ViewHome, poderia ser assim:
public class ViewHome extends javax.swing.JFrame {
//variavel q vai receber o valor que é passado no construtor
String nomeDoUser;
//recebemos o nome do usuario pelo construtor
public ViewHome(String nomeDoUser) {
initComponents();
setIcon();
time();
//veja q recebemos o nome do usuario pelo parametro
System.out.println(nomeDoUser);
//aqui passamos para a váriavel nomeDoUser o dados que é passado por parâmetro
this.nomeDoUser = nomeDoUser; //obs o this, significa que estou me referindo a variavel que está nesta classe.
colorOverlay.setBackground(new Color(51, 51, 51, 155));
}
ai no time é só usar a variavel que está com o dado salvo:
private void time() {
//LocalTime now = LocalTime.parse("18:00:00"); //debug
LocalTime now = LocalTime.now(Clock.systemDefaultZone());
int hora = now.getHour();
if (hora < 12) {
lblTime.setText("Bom dia, " + this.nomeDoUser);
} else if (hora < 18) {
lblTime.setText("Boa tarde, " + this.nomeDoUser);
} else {
lblTime.setText("Boa noite, " + this.nomeDoUser);
}
}
1 curtida
Aprendi MUITO contigo. Obrigado
1 curtida