Remover JButton gerado por código[RESOLVIDO]

Então galera, eu criei um um código que ele vai gerar um Botão com o Nome digitado em um JtextField
gostaria de saber como posso está removendo alguns dos botões desejados, ja que é possivel criar acredito que a uma forma de deletar,

                int btnPorLinhaLanche = 800 / (200 + 5);
                int linhaAtualLanche = (++quantJbLanche) / btnPorLinhaLanche;
                int localAtualLanche = quantJbLanche % btnPorLinhaLanche;
                // Adicionando botão
                JButton newbtnlanche = new JButton(NomeLanche);

                //Largura e Altura do botão (Tamanho)
                newbtnlanche.setSize(140, 140);
                newbtnlanche.setLocation(10 + ((200 + 10) * localAtualLanche), 10 + ((40 + 140) * linhaAtualLanche));

                newbtnlanche.addActionListener(btnCLickLanche);
                Dimension dlanche = new Dimension(800, 10 + ((160 + 66) * linhaAtualLanche) - 55);
                jifpedidos.jdplanche.setPreferredSize(dlanche);

                jifpedidos.jdplanche.setSize(dlanche);
                jifpedidos.jdplanche.add(newbtnlanche);

Assim como o método add adiciona, utilize o remove para remover.

   jdplanche.remove(newbtnlanche);

eu ja havia tentado antes, mas a a variavel “newbtnlanche” não é reconhecida pelo método

Se vc quer excluir esse novo botão em um método diferente, newbtnlanche tem que ser uma variavel estática/global pra depois ser removida pelo jdplanche.remove(...);

Consegui cara, mas agr, como posso especificar o botão que eu quero remover? já que quando eu coloco

                     jdplanche.remove(newbtnlanche);

ele elimina o ultimo botão criado mas não elimina os antecessores.

Cara, depende de como vc ta fazendo o delete, de onde clica pra deletar, se o botão tem algum indice especifico e etc…

Mas basicamente vc pode fazer assim:

public void removerBotao(JButton button){
   jdplanche.remove(button);
}

aí pra chamar esse método vc faz assim:

removerBotao(nomeBotao);
//aí vc aplica como vai querer
//e consegue remover dinamicamente

Conseguir resolver essa questão, usando arrey, agora cada botão sera uma variavel , jaja coloco o codigo aqui

1 curtida

Como dito, eis o código comentado

public class jifcadlanche extends javax.swing.JInternalFrame {

//  Codigo do Botão lanche
int cod;
int X = 0;

// Contador para gerar numero codigo da variavel dos botoes 
int cont = 1;

// Ação dos botoes 
public static ActionListener btnCLickBebida = null;
public static ActionListener btnCLickLanche = null;
public static ActionListener btnCLickSobremesa = null;

//Array dos botões lanche
JButton newbtnlanche[] = new JButton[999999];

private static jifcadlanche jifcadLanche;

// Método que remove botão
public void removerBotao(JButton button) {
    jdplanche.remove(button);
}

// Instanciando o JinternalFrame de Cadastro de lanche 
public static jifcadlanche getInstancia() {

    if (jifcadLanche == null) {
        jifcadLanche = new jifcadlanche();
    }
    return jifcadLanche;

    }
  }

 // Ação do botão adicionar 
private void jbadicionarActionPerformed(java.awt.event.ActionEvent evt) {                                            

    // Recebendo valores Nome e valor do lanche
    String NomeLanche = jtnome.getText();
    String ValorLanche = jftvalor.getText();

    //Abas das categoria de lanches (Lanches, Bebidas, Sobremesa)
    int Categoria = jcbcategoria.getSelectedIndex();

    //Se nome lanche 
    if (NomeLanche.equals("")) {
    } else {
        if (ValorLanche.equals("")) {
        } else {

            // Codigo que será inserido na tabela de cadastro de lanche
            X = X + 1;// Contador que gera um "Código"
            String CodigoLanche = String.valueOf(X);// Convertendo um INTEIRO para STRINGS

            //Ação que ao clicar no botão especifico do lanche ira adicionar na Comanda   
            btnCLickLanche = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent evt1) {

                    DefaultTableModel vall = (DefaultTableModel) jtblanche.getModel();
                    vall.addRow(new String[]{CodigoLanche, NomeLanche, ValorLanche});
                }
            };

            //Listando na tabela
            DefaultTableModel val = (DefaultTableModel) jtbaddlanche.getModel();
            val.addRow(new String[]{CodigoLanche, NomeLanche, ValorLanche});

            //--------------------------------------\\
            //Categoria Lanches
            if (Categoria == 0) {

                // Adicionando botão
                newbtnlanche[cont] = new JButton(NomeLanche);
                //Largura e Altura do botão (Tamanho)
                newbtnlanche[cont].setPreferredSize(new Dimension(140, 140));
                //Fonte e tamanho do botão
                newbtnlanche[cont].setFont(new java.awt.Font("Arial", 0, 16)); // NOI18N

                // Gerenciador de Layout que organiza automaticamente aonde os botoes é inserido   
                jdplanche.setLayout(new FlowLayout(FlowLayout.LEADING, 50, 50));

                // Dando a aação ao botão
                newbtnlanche[cont].addActionListener(btnCLickLanche);

                // Adicionando o botão ao JDesktopPane = jdplanche
                jifpedidos.jdplanche.add(newbtnlanche[cont]);

                //contador que gera os numeros finais de cada variavel criada
                cont = cont + 1;

            }
   }

    // Ação do botão remover
   private void jbremoverActionPerformed(java.awt.event.ActionEvent evt) {                                          
    //Chamando método que remove botão, "newbtnlanche" variavel dos botoes mais "cod" que diz quais dos botoes do arrey sera apagado
    removerBotao(newbtnlanche[cod]);
    
    //Removendo da tabela a informação relacionado ao botão removido
    ((DefaultTableModel) jtbaddlanche.getModel()).removeRow(jtbaddlanche.getSelectedRow());
}   
 
 //ação do de quando mouse é clicado na tabela
private void jtbaddlancheMouseClicked(java.awt.event.MouseEvent evt) {                                          
    //Linha selecionada da tabela
    int row = jtbaddlanche.getSelectedRow();

    // Obtendo valor da coluna 0 (primeira coluna) da linha selecionada (Row), "getValueAt(row, 0);"
    Object o = jtbaddlanche.getValueAt(row, 0);
    cod = Integer.parseInt((String) o);
}

Só acho que vc poderia substituir esse vetor por uma lista:

List<JButton> botoesLanche = new ArrayList<>();

Assim, vc não precisa já alocar memória toda de uma vez para 999999 itens. A lista vai crescendo na medida que vc for adicionando itens nela.

1 curtida

Código postado está incompleto, estes dois métodos private não são chamados em lugar nenhum.
:man_shrugging:

é por que estou fazendo em JFrame e JInternal. ai coloquei os codigos que achei mais relevante

Eu ate tentei aqui, mas não conseguir converter em um arraylist