Botão voltar, avançar (CardLayout)

Estou fazendo uma tela em swing passo a passo. Com botões voltar e avançar.

Ex: …

	private Panel1 panel1;
	private Panel2 panel2;
   ...
   ...
   private Panel6 panel6;
	private PanelBnt panelBnt;
		
	private CardLayout layout;
	private JPanel panel;

   ....
   ....
   ....
		layout = new CardLayout();
		panel = new JPanel( layout );
		
		panel1 = new PanelPiscina1(main);
		panel.add( panel1, "1" );
		
		panel2 = new PanelPiscina2();
		panel.add( panel2, "2" );
      ...
      ...
		
		getContentPane().add( panel, BorderLayout.CENTER );
   ...
   ...
   ...

public void actionPerformed(ActionEvent e) {
		if( e.getSource() == panelBnt.bntAvancar ){
			layout.next( panel );
		}
		else if( e.getSource() == panelBnt.bntVoltar )
		    layout.previous( panel );
		    
	}

:arrow: O problema é o seguinte, como fico sabendo qual panel é o atual que está sendo visualizado? Não achei um metado parecido.
Preciso disso porque minha tela de avançar e voltar é bem parecido como essas de instalação de programas, não posso passar da primeira pra ultima, por isso preciso desabilitar o botão voltar qd estiver no “panel1” por exemplo.

Já pensei numa solução para isso aumentando um atributo na minha classe por exemplo:

private int panelAtual = 1;
...
...

public void actionPerformed(ActionEvent e) {
		if( e.getSource() == panelBnt.bntAvancar ){
			layout.next( panel );
   panelAtual++;
   if( panelAtual == 6 ){
      panelBnt.bntAvancar.setEnabled(false);
   }

		}
		else if( e.getSource() == panelBnt.bntVoltar )
		    layout.previous( panel );
   panelAtual--;
   ...
   ...
		    
	}

eu tenho que ir por esse lado mesmo?

eu tava dando uma olhadinha no CardLayout aki e também não achei nada que diga em qual card está… :cry:

Eh… parece que nao tem nada mesmo. Mas pelo que tava vendo, vc sabe se o panel esta sendo mostrado… Ja tentou pegar o panel e dar um isVisible ou isShowing nele pra ver se pode ser por ai ? Dai tu pode fazer um looping nos componentes e retornar o que ta sendo mostrado. :smiley:

flw!

[quote=“brlima”]Ja tentou pegar o panel e dar um isVisible ou isShowing nele pra ver se pode ser por ai ? Dai tu pode fazer um looping nos componentes e retornar o que ta sendo mostrado. :smiley:
flw![/quote]

Até que o isVisible funcionou. Mas não adiantou muito não.
Mas vlws assim msm…
o que eu queria era uma coisa do tipo:

public void actionPerformed(ActionEvent e) {
   if( e.getSource() == panelBnt.bntAvancar ){
      panelAtual = cardLayout.getVisible();
      if( panelAtual.checkDados()  && paneAtual.getPosicao() != ULTIMO )
         cardLayout.previous(...);
   }
}

pelo jeito meu codigo vai ficar assim:

if( panel1.isVisible() )
{
     panel1.checkDados();
     cardLayout.previous(...);
else if( ... ) { ... }
else if( ... ) { ... } ...
...

mais o importante é funcionar :wink:

pode tb fazer um looping nos componentes do Panel, vendo qual ta visible.
Algo do tipo

// ano testado
for( int comp=0; comp < panel.getComponents().size(); comp ){
   if( panel.getComponent(comp).isVisible() ) 
      return panel.getComponent(comp);
}

:smiley:

[quote=“brlima”]pode tb fazer um looping nos componentes do Panel, vendo qual ta visible.
Algo do tipo
:D[/quote]

Acho q isso daria certo msm… mas no meu caso precisaria de um cast e implementar uma interface. Acho melhor digitar mais um poquinho(ifs e elses) e ter uma performance talvez um pouco melhor, acredito eu :roll:
Vlws pela ajuda brlima :wink:

Olá pessoal, estou com um problema. No meu programa de cadastro estou querendo navegar entre os registros de uma tabela utilizando botões, porém estou com muita dificuldade. Com o JOptionPane ele move os registros, porém se eu tirar ele, o cursor pára no primeiro registro e não é isso que eu queria. Eu queria avançar os registros conforme eu clicar no botão “proximo”. Vou postar o meu código aqui e aguardo a opinião de vocês. Muito obrigado desde já.


   1. public class BtnProxActionListener implements ActionListener {  
   2.           public void actionPerformed(ActionEvent e) {  
   3.               String url = "jdbc:mysql://127.0.0.1/javabd2";  
   4.               String usuario = "root";  
   5.               String senha = null;  
   6.               Connection conx;  
   7.   
   8. try {  
   9.     conx = DriverManager.getConnection(url, usuario, senha);  
  10.      stt = conx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,  
  11.                            ResultSet.CONCUR_UPDATABLE);  
  12.                    ResultSet nx = stt.executeQuery("SELECT * FROM cliente");   
  13.                while(nx != null){  
  14.                       JOptionPane.showMessageDialog(null, "próximo registro");  
  15.                           nx.next();  
  16.                         txtNmCl.setText(nx.getString("cl_nome"));  
  17.                         txtRgCl.setText(nx.getString("cl_rg"));  
  18.                         txtCpfCl.setText(nx.getString("cl_cpf"));  
  19.                         txtTelCl.setText(nx.getString("cl_tel"));  
  20.                         txtEndCl.setText(nx.getString("cl_end"));  
  21.                
  22.                        
  23.                }  
  24.                stt.close();  
  25.                  
  26.               }catch(SQLException e1){  
  27.                 e1.printStackTrace();  
  28.        }  
  29.             
  30.       }  
  31. }