Bom dia pessoal, uma dúvida de iniciante, mas não consegui resolver.
Estou criando uma pequena janela em java pelo netbeans, que contém um JComboBox e um JPanel usando Cardlayout.
O que preciso fazer é simples: selecionar o item no combobox e aparecer o painel respectivo.
Cheguei a encontrar um exemplo na net, mas não consegui entender direito e adaptar a minha necessidade.
Vamos ao código:
package relatorios;
import java.awt.CardLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class Cardlayout extends javax.swing.JFrame implements ItemListener {
CardLayout card;
public Cardlayout() {
initComponents();
cbOpcoes.setEditable(false);
cbOpcoes.addItemListener(this);
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
cbOpcoes = new javax.swing.JComboBox();
pMain = new javax.swing.JPanel();
p1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
p2 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
p3 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
p4 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("CARDLAYOUT");
cbOpcoes.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Painel 1", "Painel 2", "Painel 3", "Painel 4" }));
pMain.setLayout(new java.awt.CardLayout());
jLabel1.setText("PAINEL 1");
javax.swing.GroupLayout p1Layout = new javax.swing.GroupLayout(p1);
p1.setLayout(p1Layout);
p1Layout.setHorizontalGroup(
p1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(326, Short.MAX_VALUE))
);
p1Layout.setVerticalGroup(
p1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(227, Short.MAX_VALUE))
);
pMain.add(p1, "card2");
jLabel2.setText("PAINEL 2");
javax.swing.GroupLayout p2Layout = new javax.swing.GroupLayout(p2);
p2.setLayout(p2Layout);
p2Layout.setHorizontalGroup(
p2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addContainerGap(326, Short.MAX_VALUE))
);
p2Layout.setVerticalGroup(
p2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addContainerGap(227, Short.MAX_VALUE))
);
pMain.add(p2, "card3");
jLabel3.setText("PAINEL 3");
javax.swing.GroupLayout p3Layout = new javax.swing.GroupLayout(p3);
p3.setLayout(p3Layout);
p3Layout.setHorizontalGroup(
p3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel3)
.addContainerGap(326, Short.MAX_VALUE))
);
p3Layout.setVerticalGroup(
p3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel3)
.addContainerGap(227, Short.MAX_VALUE))
);
pMain.add(p3, "card4");
jLabel4.setText("PAINEL 4");
javax.swing.GroupLayout p4Layout = new javax.swing.GroupLayout(p4);
p4.setLayout(p4Layout);
p4Layout.setHorizontalGroup(
p4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel4)
.addContainerGap(326, Short.MAX_VALUE))
);
p4Layout.setVerticalGroup(
p4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(p4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel4)
.addContainerGap(227, Short.MAX_VALUE))
);
pMain.add(p4, "card5");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(pMain, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addComponent(cbOpcoes, javax.swing.GroupLayout.Alignment.LEADING, 0, 380, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(cbOpcoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pMain, javax.swing.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
public static void main(String args[]) {
new Cardlayout().setVisible(true);
}
// Variables declaration - do not modify
private javax.swing.JComboBox cbOpcoes;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel p1;
private javax.swing.JPanel p2;
private javax.swing.JPanel p3;
private javax.swing.JPanel p4;
private javax.swing.JPanel pMain;
// End of variables declaration
public void itemStateChanged(ItemEvent evt) {
CardLayout cl = (CardLayout)(pMain.getLayout());
cl.show(pMain, (String)evt.getItem());
System.out.println("Selecionou o item "+evt.getItem());
}
}
Tentei modificar esse código, principalmente o método itemStateChanged, coloquei um System.out.println(""); para ver a saída, está com dois problemas:
- O System.out.println sempre mostra dois itens, ex: se eu clico na opção nº 2 ele mostra “Selecionou o 2 e o anterior”, se eu clico na opção nº 3 ele mostra “Selecionou o 3, Selecionou o 2”;
- O segundo problema é que não mostra os painéis.
Pensei em encher de ifs ai, mas ficaria mais vergonhoso do que já está.
Se alguém puder ajudar a entender o que está acontecendo - agradeço!