JTable remover linhas com condição

6 respostas
L

bom não sei bem se estou postando no lugar certo, não sei muito bem em qual categoria encaixar minha pergunta pois creio que seja questão de lógica mas também estou lidando com um componente gráfico, no caso o JTable

meu código:

ResultSet resultado = consulta.executeQuery(“SELECT * FROM APARTAMENTO WHERE NUMERO=” + tfAp.getText());

if (resultado.next() && dtm.getRowCount()==0) {

dtm.addRow(new Object[]{resultado.getInt(“NUMERO”),

resultado.getString(“NOME_DONO”), resultado.getString(“TELEFONE_DONO”),

resultado.getString(“CELULAR_DONO”), resultado.getString(“NOME_INQUILINO”),

resultado.getString(“TELEFONE_INQUILINO”), resultado.getString(“CELULAR_INQUILINO”)});
}else if(evt.getKeyCode() != evt.VK_BACK_SPACE){
          dtm.setNumRows(0);
        }

Estou trazendo dados do banco, se não tiver nenhuma linha na JTable traz as informações de acordo com o numero digitado. Isso ta ok.

mas quero que quando a tecla backspace seja pressionada as linhas voltem pra 0 podendo assim voltar a condição inicial e fazer nova pesquisa.

está entrando no setNumRows(0) e apagando se pressionado o backspace, mas também entra ai com outra tecla pressionada por exemplo um enter.

meu código está num evento tipo KeyTyped…

Ajuda plis, obrigada

6 Respostas

S

Olá laysveloso

coloque o código utilizando as tags.

Dessa forma.

ResultSet resultado = consulta.executeQuery("SELECT * FROM APARTAMENTO WHERE NUMERO=" + tfAp.getText()); 

if (resultado.next() && dtm.getRowCount()==0) { 
     dtm.addRow(new Object[]{resultado.getInt("NUMERO"), 
     resultado.getString("NOME_DONO"), resultado.getString("TELEFONE_DONO"), 
     resultado.getString("CELULAR_DONO"), resultado.getString("NOME_INQUILINO"), 
     resultado.getString("TELEFONE_INQUILINO"), resultado.getString("CELULAR_INQUILINO")}); 
}else if(evt.getKeyCode() != evt.VK_BACK_SPACE){ 
     dtm.setNumRows(0); 
}

coloque o código completo para podermos analisá-lo melhor, pois creio que existam mais linhas acima.

Silvio Guedes

DeGuedes

Use tablemodel cara, facilita sua vida em 100%!
nela vc faz tudo, adiciona, exclui, altera, enfim pesquise sobre table model e verá como é fácil excluir! :smiley:

L

mas é tablemodel, tdm é uma instancia dela

e eu nao so cara euhsueha

brigada ^^

DeGuedes

opaaa, :oops: desculpa nem li seu nick… shaushauhsa

bahhh, mas isso ta mto confuso… hehehe
posta a sua classe table model pra podermos analisar…

:wink:

DeGuedes
Essa é minha classe table model, bem simples! :D
public class TMNotaFiscalSaida extends AbstractTableModel {

    private static final long serialVersionUID = 1L;
    private List<NFeXML> nfexml;

    public TMNotaFiscalSaida() {
        nfexml = new ArrayList<NFeXML>();
    }

    /**
     * Criamos um construtor de conveniência para já popular a lista.
     */
    public TMNotaFiscalSaida(List<NFeXML> lista) {
        this();
        nfexml.addAll(lista);
    }

    @Override
    public Class<?> getColumnClass(int coluna) {
        // todas as colunas representam uma String
        return String.class;
    }

    @Override
    public int getColumnCount() {
        // esse método deve retornar o número de colunas.
        //nesse caso 6 colunas
        return 6;
    }

    @Override
    public String getColumnName(int coluna) {
        // vamos retornar o nome de cada coluna
        switch (coluna) {
            case 0:
                return "Data"; 
            case 1:
                return "Nº NFe"; 
            case 2:
                return "Série";
            case 3:
                return "Nome do Cliente";
            case 4:
                return "Valor NFe";
            case 5:
                return "Status";
            default:
                return ""; // isso nunca deve ocorrer, pois temos s&#65533; 6 colunas
        }
    }

    @Override
    public int getRowCount() {
        // retorna o número de linhas
        return nfexml.size();
    }

    @Override
    public Object getValueAt(int linha, int coluna) {
        NFeXML c = nfexml.get(linha);

       //aqui são mostrados os valores nas colunas
        switch (coluna) {
            case 0:
                return Funcoes.DataSQLtoStringddMMyy(c.getDemi());
            case 1:
                return c.getNnf();
            case 2:
                return c.getSerie();
            case 3:
                return c.getCliente();
            case 4:
                return c.getNfetotal();
            case 5:
                return c.getStatus();
            default:
                return null; // isso nunca deve ocorrer, pois temos só 6 colunas
        }
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    @Override
    public void setValueAt(Object valor, int linha, int coluna) {

        NFeXML c = nfexml.get(linha);
        // os valores serao editados
        //nao usado
        switch (coluna) {
            case 0:
                c.toString();
                break;
            case 1:
                c.toString();
                break;
            case 2:
                c.toString();
                break;
            case 3:
                c.toString();
                break;
            case 4:
                c.toString();
                break;


        }
        // É importante notificar os listeners a cada alteração
        fireTableDataChanged();
    }

   //retorna o objeto conforme a linha selecionada
    public NFeXML getNFe(int linha) {
        NFeXML c = nfexml.get(linha);
        return c;
    }

 
    public void adiciona(NFeXML c) {
        nfexml.add(c);
        // informamos os listeners que a linha (size - 1) foi adicionada
        //fireTableDataChanged();
        fireTableRowsInserted(nfexml.size() - 1, nfexml.size() - 1);
    }

    /**
     * Similar ao #adiciona(Cliente), porém para remover. Recebe o
     * índice do cliente a ser removido. Se não souber o índice, use o método
     * #getIndice(Cliente)} antes.
     */
    public void remove(int indice) {
        nfexml.remove(indice);
        fireTableRowsDeleted(indice, indice);
    }

    /**
     * Retorna o índice de determinada NFe.
     */
    public int getIndice(NFeXML c) {
        return nfexml.indexOf(c);
    }

    /**
     * Adiciona todos as NFes na lista
     */
    public void adicionaLista(List<NFeXML> lista) {
        int i = nfexml.size();

        nfexml.addAll(lista);
        fireTableRowsInserted(i, i + lista.size());
    }

    /**
     * Esvazia a lista.
     */
    public void limpaLista() {
        if (!nfexml.isEmpty()) {
            int i = nfexml.size();
            nfexml.clear();
            fireTableRowsDeleted(0, i - 1);
        }
    }

    public double somaVal() {
        return calcula;
    }

    public List<NFeXML> GetLista() {
        return nfexml;
    }
}
:D
ViniGodoy

Evite fazer pesquisas tecla-a-tecla. Elas geralmente são terrívelmente ineficientes e ocupam muitos recursos do BD.
E seu usuário pode muito bem usar um botãozinho de buscar (você até pode colocar o botão como padrão, para que ele possa teclar enter após digitar no campo de busca).

Outra coisa. Use o PreparedStatement, para evitar aquelas concatenações no seu SQL:

PreparedStatement stm = consulta.prepareStatement("SELECT * FROM APARTAMENTO WHERE NUMERO=?"); stm.setInt(1, Integer.parseInt(tfAp.getText())); ResultSet resultado = stm.executeQuery();

Isso vai ser muito importante quando você concatenar Strings, pois o preparedStatement não exige aspas simples, e automaticamente trata as digitadas pelo seu usuário. Ele também lida sozinho com formatos de datas.

Finalmente, se você mantiver sua consulta, seria bom usar a cláusula TOP para limitar o número máximo de linhas retornadas. Assim, seu sistema não trava ou fica lento se o usuário digitar algo muito comum no banco.

Ah sim, e quando o colega falou para você usar TableModel, ele não se referia ao DefaultTableModel. O DefaultTableModel é trabalhoso, dá muitas dores de cabeça e aumenta incrivelmente a dificuldade de se lidar com JTable. O ideal é você fazer um TableModel próprio, filho de AbstractTableModel, como explica os links na minha assinatura.

Criado 28 de outubro de 2010
Ultima resposta 29 de out. de 2010
Respostas 6
Participantes 4