Create data validation and page sequence

Posted on

Question :

I’m starting in Java and want to make a screen where the person signs the login and the password, the system stores the data and then in a new window is asked to enter the user and password, I did the part of validation and registration of the data on the same page, since I do not dominate the JFrames .

How do I separate things, for example create a page and then close it and open a new one? I do not know where I can close the code and open a new one, for example.

Follow the current code, I’m working with Eclipse.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Exemplo1 extends JFrame implements ActionListener{ 

JButton entrar; 
JTextField cxnome; 
JTextField cxsenha; 
JLabel rotulo; 

JTextField cxvarnome; //variavel de senha a ser inserida
JTextField cxvarsenha; //variavel de senha a ser inserida

public void actionPerformed(ActionEvent evento){ 
String nome, senha, suasenha, seunome; 
nome = cxnome.getText(); 
senha = cxsenha.getText(); 
seunome = cxvarnome.getText(); 
suasenha = cxvarsenha.getText(); 

//metodo da interface ActionListener 
//como o tipo String não é um tipo primitivo, e sim 
//um tipo referencial, sua comparação não pode ser == 
if (evento.getSource()== entrar && nome.equals(seunome)&& senha.equals(suasenha)){



public static void main(String[] args){ 
    //instanciando objeto 
    Exemplo1 janela = new Exemplo1(); 


public Exemplo1(){ 
//gride para os objetos 
getContentPane().setLayout(new GridLayout(4,1)); 

cxvarnome = new JTextField();//instanciando 
getContentPane().add(cxvarnome);//coloca... no grid 

cxvarsenha = new JTextField();//instanciando 
getContentPane().add(cxvarsenha);//coloca... no grid 

cxnome = new JTextField();//instanciando 
getContentPane().add(cxnome);//coloca... no grid 

cxsenha = new JTextField();//instanciando 
getContentPane().add(cxsenha);//coloc... no grid 

entrar = new JButton("OK");//instanciando 
getContentPane().add(entrar);//coloca... no grid 
entrar.addActionListener(this);//add evento ao clicar 

rotulo = new JLabel();//instanciando 
getContentPane().add(rotulo);//coloca... no grid 
rotulo.setOpaque(true);//tornando opaco 




Answer :

Use CardLayout that allows you to work with multiple JPanel in of Container . With this layout you can easily control the flow of the panels using methods to toggle them:

first(C)    // Alterna para o primeiro painel adicionado no container (C).
last(C)     // Alterna para o último painel inserido no container (C).
next(C)     // Muda para o painel seguinte em (C).
previous(C) // Muda para o painel anterior em (C).
show(C, N)  // Alterna para o painel com nome (N) dentro do container (C).

This would avoid creating an application with multiple JDialog and / or JFrame .


In your code you are inserting all components directly into JFrame . One improvement to make is to separate the two views (Registry and Login) you want into JPanel different.

// Painel de criação do usuário
JPanel registerView = new JPanel();

// Painel de login
JPanel loginView = new JPanel();

To avoid adding everything directly to JFrame , a “root” panel can be created where everything will happen inside it (and it will have CardLayout as layout).

 * É importante armazenar em uma variável para podermos controlar o fluxo
 * dentro do JPanel através dos métodos listados no início dessa resposta.
CardLayout card = new CardLayout();

// JPanel onde serão inseridos os JPanels
JPanel rootPanel = new JPanel();
rootPanel.setLayout(card); // definindo o layout 

Finally, just add the registration and login panels within rootPanel . Here, the way to add is slightly different from the simple jframe.add(jpanel) , in addition to the component we want to add, we also need to pass a unique name so we can identify it.

//Inserindo os painéis de Registro e Login,
rootPanel.add(registerView, "register");
rootPanel.add(loginView, "login");

// Painel que será exibido primeiro, "register"); // mostrará o painel com nome "register"

Test code


import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public final class Window extends JFrame {

    public Window(String title){

    // Inicializa os componentes
    public void init(){

        // Painel de criação do usuário
        JPanel registerView = new JPanel();

        // Botão que avançará para o próximo painel.
        JButton btnNext = new JButton("Me Registrei! Próximo Painel");
        btnNext.setBounds(50, 100, 200, 35);

        // Painel de login
        JPanel loginView = new JPanel();

        JLabel lblLoginPanel = new JLabel("Esse é o painel de login");
        lblLoginPanel.setBounds(70, 100, 150, 35);

        CardLayout card = new CardLayout();

        // JPanel onde serão inseridos os JPanels
        JPanel rootPanel = new JPanel();
        rootPanel.setLayout(card); // definindo o layout

        // Inserindo os painéis de Registro e Login,
        rootPanel.add(registerView, "register");
        rootPanel.add(loginView, "login");, "register"); // mostrará o painel de registro

        // Quando clicado...
        btnNext.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
      ; // mostra o próximo JPanel dentro do container

public class Main {
   public static void main(String[] args) throws IOException {
      new Window("StackOverflow").setVisible(true);


In your code, you can have the panel advanced when the user clicks, for example, a log completion button after filling in the required fields. The issue of validating the user is apparently already implemented in your code.


Leave a Reply

Your email address will not be published. Required fields are marked *