Excluir coluna(Jtable)

18 respostas
D

ola galera, estou fazendo uma tabela e gostaria de excluir a linha que eu selecionar

como que eu posso fazer?
segue o codigo abaixo:

18 Respostas

erico_kl

afinal… vc quer excluir uma coluna ou uma linha??

D

é excluir a linha
=)
errei!

igor_jua
int row=jTable.getselectedRow();
DefaultTableModel dtm=(DefaultTableModel)jTable.getModel();

dtm.removeRow(row);

Apesar de que seria vc criar seu TableModel…mas pra uma solução mais rápida esse dai serve…
mas lembre-se sempre de implementar seu table model!
8)

erico_kl

eu sempre usei o DefaultTableModel… sempre atendeu minhas necessidades…

ViniGodoy

O problema do DefaultTableModel é que:

a) Ele é mais difícil de usar do que criar o seu próprio TableModel;

b) Ele mistura parte da lógica de negócio  na view;

c) Ele ocupa pelo menos o dobro de espaço em memória;

d) Ele exige mais processamento;

e) Ele exige casts inseguros;

f) Ele é sincronizado;

g) Ele é menos flexível.
lina

O problema do DefaultTableModel é que:

a) Ele é mais difícil de usar do que criar o seu próprio TableModel;

b) Ele mistura parte da lógica de negócio  na view;

c) Ele ocupa pelo menos o dobro de espaço em memória;

d) Ele exige mais processamento;

e) Ele exige casts inseguros;

f) Ele é sincronizado;

g) Ele é menos flexível.</blockquote>

Oi,

Perfeito como sempre =)

Em relação ao tópico, pra tudo na vida existem um add e um remove =P

Tchauzin!

erico_kl

O problema do DefaultTableModel é que:

a) Ele é mais difícil de usar do que criar o seu próprio TableModel;

b) Ele mistura parte da lógica de negócio  na view;

c) Ele ocupa pelo menos o dobro de espaço em memória;

d) Ele exige mais processamento;

e) Ele exige casts inseguros;

f) Ele é sincronizado;

g) Ele é menos flexível.</blockquote>

Não sabia destas desvantagens obrigado por informarpena que eu vi teu post sobre ObjectTableModel muito tarde seria muito custoso (em termos de tempo) pra mim readaptar todo o fonte pois praticamente todas minhas classes da camada view contém pelo menos uma JTableAproveitando eu consigo utilizar o ObjectTableModel sem alterar a camada lógica?
Marky.Vasconcelos

Voce vai ter que alterar sua lógica. Por que por exemplo onde voce tem algo assim:

String[] dadosPessoas = modelo.getRow(10);

Dai voce sabe que na coluna 0 do array é o nome no 1 a idade e etc.

Seria o seguinte

Pessoa pessoa = modelo.get(10);

Voce teria o objeto com seus getters e setters.

Muito melhor para se trabalhar.

D

tem essa linha abaixo:

como que eu posso fazer pra passar um objeto ja todo setado?
eu passei porem ele ficou soh na primeira coluna e apareceu isso Contato@3901c6

Marky.Vasconcelos

Mas voce ta usando o ObjectTableModel ou o Default?

Da uma olhada melhor no tutorial http://markytechs.wordpress.com/2009/05/29/objecttablemodel

D

segue o codigo para dar uma olhada!

erico_kl
Mark_Ameba:
Voce vai ter que alterar sua lógica. Por que por exemplo onde voce tem algo assim:
String[] dadosPessoas = modelo.getRow(10);
Dai voce sabe que na coluna 0 do array é o nome no 1 a idade e etc. Seria o seguinte
Pessoa pessoa = modelo.get(10);

Voce teria o objeto com seus getters e setters.

Muito melhor para se trabalhar.
legal.. eu já tinha visto o tutorial do ObjectTableModel.. mas eu vi muito tarde.. qual seria a melhor forma pra mim fazer sem ter mudanças fora da view e sem usar o DefaultTableModel já que este é tão ruim? segue um modelo de como faço atualmente.. este exemplo tem uma coluna que tem um checkBox (lembrando que o código é funcional mas como informado pelo ViniGodoy parece que não é uma boa prática)..
jt_permissoes.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "Funcionalidade", "Permitir"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Object.class, java.lang.Object.class, java.lang.Boolean.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
então na hora de recuperar dados (lembrando que nem sempre eu completo o objeto inteiro.. passo somente alguns atributos por questão de desempenho..)
DefaultTableModel model = (DefaultTableModel)jt_permissoes.getModel();
    	model.setNumRows(0);
    	
    	List funcs = new FuncionalidadeServiceImpl().get("");
    	for (Iterator iterator = funcs.iterator(); iterator.hasNext();) {
    		Funcionalidade func = (Funcionalidade) iterator.next();
			model.addRow(new Object[]{func.getCodigo(), func.getDescricao(),false});
    	}
obrigado a todos..
erico_kl

acho que vou tomar coragem (e tempo também…) e reajustar meus projetos com ObjectTableModel… tenho ao total 4 sistemas(diferentes) já implantados… será que vale a pena esta mudança agora?

Marky.Vasconcelos

Antes tarde do que mais tarde ainda.

Voce nao precisa necessariamente usar o ObjectTableModel que eu fiz. Seria legal voce entender a responsabilidade do Model e fazer um.
Mas se nao tiver com paciencia voce pode só usar mesmo sem problemas.

D

consegui fazer o metodo
agora o problema seria pra buscar e alterar as linhas
alguem me sugere algo?

erico_kl

mas achei muito interessante o ObjectTableModel… é que eu estava acostumado a usar o DefaultTableModel mas até então não sabia de todas essas desvantagens citadas… e se é pra melhorar a performance/rendimento das aplicações eu readapto os projetos…
Só fiquei meio em dúvida em ter que alterar a camada lógica… isso foge um pouco da minha ideia pois assim estarei vinculando a camada lógica com a view mas pelo que vi existe outra solução criando instâncias de FieldResolver diretamente nas classes visuais…
e outra… eu tenho como colocar uma coluna na JTable sem vincular a coluna à um atributo de uma classe em específico? pois precisarei colocar uma coluna de checkBox onde o usuário escolhe os clientes para os quais ele deseja mandar e-mails e estes booleans não estão na classe Cliente pois são meramente visuais…
existe alguma forma de fazer isso?

Marky.Vasconcelos

@diego_sepa
Para alterar as linhas é facil, altere o objeto da lista de objetos do modelo que a tabela se altera.
Para buscar dados tem o SelectTable que também tem um um post no meu blog falando sobre isso.
Voce precisa passar uma lista de objetos que voce quer que retorne um objeto e ouvir o evento.

@erico_kl
Se voce tiver usando o AnnotationResolver voce pode passar a String como parametro “blank” que cria uma coluna sem ter dados nenhum.
Se tiver usando diretamente FieldResolver voce precisa passar como parametro o BlankHandler do pacote mark.utils.el.handler.

erico_kl

ok… e para criar uma coluna de checkBox… consigo fazer com ObjectTableModel?
obrigado pela ajuda…

Criado 21 de novembro de 2009
Ultima resposta 25 de nov. de 2009
Respostas 18
Participantes 6