Como apagar arquivos do banco de dados e do combobox

4 respostas
uchiharussi

Ola, bom dia.

Alguem poderia me ajudar? Estou fazendo um software, e preciso realizar a busca em um banco de dados SQL. Faco essa busca e coloco os dados da tabela em um jcombobox, quando seleciono alguma opcao no meu combobox, adiciona-se a algums textfield, as outras variaveis da minha tablela.
Ex : no combo box tem as minhas empresas que cadastrei no banco de dados, fiz um metodo, para colocar em algums textfield o restante das informacoes, como por exemplo endereco, telefone, enfim, os outros dados cadastrados para essa empresa, e nessa mesma tela tenho uma opcao de apagar alguma empresa, um jbutton normal, que apaga essa empresa escolhida no combobox. Minha duvida eh como fazer para que quando eu apagar essa empresa, para que ela ja desapareca do combobox, ou se eu cadastrar uma nova empresa, para que ela ja apareca no meu combobox, no mesmo instante que eu clico em excluir, ou cadastrar.

Se alguem poder me ajudar, agradeco.

4 Respostas

Hellmanss

2 Opções:
-Popular novamente o comboBox
-Excluir/Adicionar a Empresa ao comboBox

kemperacc

Voce tem que fazer uma classe para maniplar os dados como esta:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.omegacodigos.ultra.modulos.email.swing;

import br.com.omegacodigos.ultra.modulos.email.EmailAnexo;
import br.com.omegacodigos.ultra.modulos.email.StaticAnexoLoader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.DefaultListModel;

/**
 *
 * @author kemper
 */
public class AnexoListModel extends DefaultListModel {

    ArrayList<EmailAnexo> anexos = new ArrayList<EmailAnexo>();

    public void addAnexo(EmailAnexo anexo) {
        this.anexos.add(anexo);
        fireIntervalAdded(anexo, anexos.size() - 1, anexos.size());
    }

    public void removeAnexo(EmailAnexo anexo) {
        this.anexos.remove(anexo);
        fireIntervalAdded(anexo, anexos.size() - 1, anexos.size());
    }

    @Override
    public int getSize() {
        if (anexos != null) {
            return anexos.size();
        } else {
            return 0;
        }
    }

    @Override
    public Object getElementAt(int index) {
        return anexos.get(index);
    }

    public ArrayList<EmailAnexo> getAnexos() {
        return anexos;
    }

    void loadFiles() throws FileNotFoundException, IOException {
        for (EmailAnexo emailAnexo : anexos) {

            File f = new File(emailAnexo.getOriginalFileName());

            emailAnexo.setDados(StaticAnexoLoader.load(f));


        }
    }
}

E para usar, voce usa assim:

JList minhaLista = new JList();
      AnexoListModel listModel = new AnexoListModel();
      minhaLista.setModel(listModel);

///voce adiciona e remove itens ao model, e nao no componente jlist
//isto ja fara atualizar os itens na tela...

      listModel.addAnexo(....)  ;

Este exemplo que eu dei foi com JList mas aplica-se também aos combos, o swing é baseado em MVC (model view controller), os dados ficam no “model” e o combobox, jlist, etc… é o VIEW.

[]s

Kemper

uchiharussi

No momento estou fazendo da seguinte forma:

tenho um metodo para encher o combobox com os dados do banco

public void montaLista(){
        List<controletecnico.classes.Empresa> listaempresa = controleempresa.findEmpresaEntities();
        montaListaEmpresa = (DefaultComboBoxModel) comboempresa.getModel();
         
        int t = 0;
        if (t == 0){
            montaListaEmpresa.addElement("");
            t++;
        }
        for (int i = 0; i<listaempresa.size(); i++){
            montaListaEmpresa.addElement(listaempresa.get(i).getNome());
        }


    }

Esse metodo enche a combobox com os dados do banco.
Depois tenho um botao com um actionPerformed para excluir algum desses dados, a parte de exclusao faz certo, e juntamente com esse buton tem um metodo comboempresa.removeAllItens(), logo apos ele executa o metodo montalista() novamente, mas nao da certo, da varios erros.

private void botaoexcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoexcluirActionPerformed
    int op = JOptionPane.showConfirmDialog(null, "Tem certeza que deseja apagar essa empresa do sistema?",
            "Confirmacao", JOptionPane.YES_NO_OPTION);
    List<controletecnico.classes.Empresa> listaempresa = controleempresa.findEmpresaEntities();
    if (op == 0){


        int index = comboempresa.getSelectedIndex();
    String itemescolhido = comboempresa.getItemAt(index).toString();

    if (index > 0){
        for (int i = 0; i<listaempresa.size(); i++){
            if (itemescolhido.equalsIgnoreCase(listaempresa.get(i).getNome())){
                int itemescolhido1 = listaempresa.get(i).getId();
                    try {
                        controleempresa.destroy(itemescolhido1);
                      comboempresa.removeAllItens();
                      
                                  
                    } catch (NonexistentEntityException ex) {
                        Logger.getLogger(FormularioCadastroEmpresa.class.getName()).log(Level.SEVERE, null, ex);
                    }
            }
        }
       this.montaLista();

    }
    }
    }
M

Fuja sempre dos Default*Model que o Java fornece. Geralmente eles são usado para exemplos (e somente para isso que servem).

Crie sua classe que estende AbstractListModel e forneça métodos para novos campos possam ser adicionados/removidos. Essa é uma tarefa do Model ao ser noficiado pelo Controller que a View requisitou essa atualização.

Swing segue o padrão MVC. Portanto é bom entendê-lo bem e separar as responsabilidades da sua aplicação. Isso deixa o código mais fácil de ler e manter e geralmente melhora o desempenho do programa.

Criado 24 de fevereiro de 2010
Ultima resposta 24 de fev. de 2010
Respostas 4
Participantes 4