Uma forma de você fazer isso é instanciar a tela que inicia o sistema dentro da tela de login, exatamente no método actionPerformed o ActionListener. Algo assim:
new Sistema().setVisible(true);
Login.this.dispose();
Isso vai funcionar, o problema é que você vai deixar o seu código de login acoplado ao sua tela de sistema e você vai precisar alterar o código se um dia quiser usar essa tela de login em outro lugar. Se você não quiser que a tela de Login conheça a tela de sistema, você pode implementar um listener que avisa que ocorreu o login. Para isso você precisa:
- Criar uma interface que representa o seu listener (LoginListener, por exemplo)
- Criar uma classe responsável por chamar o Login e chamar o sistema quando o login for efetuado corretamente
- Adicionar o listener de login na classe acima
- Notificar os ouvintes que estiverem registrados quando ocorrer um login correto
- Através da classe que gerencia o login e o sistema(a classe do passo 2, que é um LoginListener), matar a tela de login e criar a tela do Sistema.
Segue um exemplo abaixo, que faz exatamente essa troca. Perceba que ele não faz validações de login, sempre considera que ao clicar no botão deve ser efetuada a troca entre a tela de login e a tela do sistema:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Login extends JFrame {
private Set<LoginListener> loginListeners;
private JButton button;
public Login() {
loginListeners = new HashSet<LoginListener>();
button = new JButton("Login");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Login.this.notifyListeners();
}
});
setSize(200,200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(button, BorderLayout.CENTER);
}
public void addLoginListener(LoginListener loginListener) {
loginListeners.add(loginListener);
}
private void notifyListeners() {
for(LoginListener loginListener : loginListeners) {
loginListener.usuarioLogado();
}
}
}
public interface LoginListener {
void usuarioLogado();
}
public class Main implements LoginListener {
public Main() {
login = new Login();
login.addLoginListener(this);
login.setVisible(true);
}
@Override
public void usuarioLogado() {
login.dispose();
new Sistema().setVisible(true);
}
private Login login;
public static void main(String[] args) {
new Main();
}
}[code]
import javax.swing.JFrame;
public class Sistema extends JFrame {
public Sistema() {
setSize(400,400);
setTitle("Meu sistema");
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}