Boa tarde, estou enroscado a algum tempo nessa parte:
Tenho primeiro um ActionPerformed no jbAdicionar que vai adicionando botão qnd o cliente querer.
No proximo tenho outro ActionPerformed no jbMenos que seria para deletar esses botoes criados, porem, se eu adiciono 3 botoes ele só “exclui” o primeiro. (na vdd coloquei um setVisible para testar). Queria saber como que faço para continuar “excluindo” se o cliente quiser.
int i = 21;
JButton jbMesa;
String jlComanda;
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbAdicionar){
jlComanda = new String ("COMANDA " + Integer.toString(i));
jbMesa = new JButton(jlComanda, iMesa) ;
jbMesa.setBorder(null);
jbMesa.setContentAreaFilled(false);
jbMesa.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
jbMesa.setOpaque(false);
jbMesa.setVerticalTextPosition(SwingConstants.BOTTOM);
jbMesa.setHorizontalTextPosition(SwingConstants.CENTER);
jpCentro.add(jbMesa);
jbMesa.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TelaComandaMesaNova mesanova = new TelaComandaMesaNova();
jdp.add(mesanova);
jdp.moveToFront(mesanova);
jdp.setSelectedFrame(mesanova);
}
});
i++;
}
if (e.getSource() == jbMenos){
jbMesa.setVisible(false);
}
Desde já agradeço!
Você está usando a referencia do ultimo botão criado:
if (e.getSource() == jbMenos){
jbMesa.setVisible(false);
}
Por isso que ele só some o primeiro (ou o ultimo), você deve controlar a ordem dos botões, assim toda vez que clicar no “Menos” ele vai removendo como se fosse uma pilha (ou fila dependendo como queira)
Obrigado Renan, sera que tenho q usar algum Array ou algo do gênero para fazer o controle?
Sim, você deve usar um array e controlar o indice, quando clica no “Menos” você decrementa o indice.
ainda nao estou coseguindo…
JButton[]botoes = new JButton[4]; //CRIEI UM VETOR
int i = 0;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbAdicionar){
botoes[i] = new JButton();
jpCentro.add(botoes[i]);
} if (e.getSource() == jbMenos){
for (i=0; i < botoes.length; i--){
botoes[i].setVisible(false);
JOptionPane.showMessageDialog(null, "removido");
}
}
}
Mesmo assim ele só paga um elemento, me desculpe estou tentando buscar soluções, porem, sou meio leigo ainda :s
Você deve decrementar e usar o indice, mas sem ser no for
(e.getSource() == jbMenos){
// for (i=0; i < botoes.length; i--){
botoes[i].setVisible(false);
JOptionPane.showMessageDialog(null, "removido");
i-=1; //isso que deve fazer, deve tratar se não é meenor que 0 também
// }
}
muito obrigado, consegui da seguinte forma:
identar texto pre-formatado em 4 espaços
int i = 21;
String jlComanda;
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbAdicionar){
jlComanda = new String ("COMANDA " + Integer.toString(i));
botoes[i] = new JButton(jlComanda);
addBotao(jpCentro, botoes[i]);
jbMenos.setEnabled(true);
JOptionPane.showMessageDialog(null, "ADD" + i);
i++;
}
if (e.getSource() == jbMenos){
i--;
botoes[i].setVisible(false);
JOptionPane.showMessageDialog(null, "REMOVE" + i);
if (i<=21){
jbMenos.setEnabled(false);
}
}