<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentários sobre: Death to DefaultTableModel! AbstractTableModel Rulez!</title>
	<atom:link href="http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez</link>
	<description>Porque Java não precisa ser difícil...</description>
	<lastBuildDate>Tue, 31 Jan 2012 17:45:18 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
	<item>
		<title>Por: Mateus</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-157</link>
		<dc:creator>Mateus</dc:creator>
		<pubDate>Sat, 19 Nov 2011 07:19:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-157</guid>
		<description>bom pessoal,depois de pesquisar muito, encontrei uma possível solução, só que eu não testei pois vi que seria meio complicado para mim, e além do mais, da maneira do que eu estou fazendo, não valeria a pena. de qualquer forma, se alguém sabe de uma forma mais simples de colocar um checkebox na tabela, ficaria muito grato.

bom aqui vai a solção que eu encontrei:

http://www.guj.com.br/java/88484-adicionar-linha-por-linha-em-jtable-com-checkbox-resolvido</description>
		<content:encoded><![CDATA[<p>bom pessoal,depois de pesquisar muito, encontrei uma possível solução, só que eu não testei pois vi que seria meio complicado para mim, e além do mais, da maneira do que eu estou fazendo, não valeria a pena. de qualquer forma, se alguém sabe de uma forma mais simples de colocar um checkebox na tabela, ficaria muito grato.</p>
<p>bom aqui vai a solção que eu encontrei:</p>
<p><a href="http://www.guj.com.br/java/88484-adicionar-linha-por-linha-em-jtable-com-checkbox-resolvido" rel="nofollow">http://www.guj.com.br/java/88484-adicionar-linha-por-linha-em-jtable-com-checkbox-resolvido</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Mateus</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-156</link>
		<dc:creator>Mateus</dc:creator>
		<pubDate>Fri, 18 Nov 2011 21:34:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-156</guid>
		<description>Como eu faço para coloca um ckeckbox hein? eu tava tentando colocar aqui, eu até consegui fazer que o checbox aparecesse, mas quando clico nele, nada acontece.</description>
		<content:encoded><![CDATA[<p>Como eu faço para coloca um ckeckbox hein? eu tava tentando colocar aqui, eu até consegui fazer que o checbox aparecesse, mas quando clico nele, nada acontece.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Floripa</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-155</link>
		<dc:creator>Floripa</dc:creator>
		<pubDate>Wed, 09 Nov 2011 16:04:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-155</guid>
		<description>Olá Saad , segui seu exemplo de criação da tableModel deu certo. blz.
Porem eu gostaria de saber para retornar a linha selecionada, depois de uma filtrada a tableModel inicial.
Eu criei um jTextField que filtra a TableModel, ela filtra normal porem quando eu fecho o jDialog, a linha que apresenta no jFramePrincipal é o índice da TableModel inicial sem filtrar. Como resolvo isso.?
Parabens pelo post.</description>
		<content:encoded><![CDATA[<p>Olá Saad , segui seu exemplo de criação da tableModel deu certo. blz.<br />
Porem eu gostaria de saber para retornar a linha selecionada, depois de uma filtrada a tableModel inicial.<br />
Eu criei um jTextField que filtra a TableModel, ela filtra normal porem quando eu fecho o jDialog, a linha que apresenta no jFramePrincipal é o índice da TableModel inicial sem filtrar. Como resolvo isso.?<br />
Parabens pelo post.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Maciel</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-154</link>
		<dc:creator>Maciel</dc:creator>
		<pubDate>Wed, 09 Nov 2011 11:41:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-154</guid>
		<description>Comecei a usar o tableModel sem ser o default, mas agora está sendo atualizado 544 vezes.
O que eu faço?</description>
		<content:encoded><![CDATA[<p>Comecei a usar o tableModel sem ser o default, mas agora está sendo atualizado 544 vezes.<br />
O que eu faço?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: André Luis</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-153</link>
		<dc:creator>André Luis</dc:creator>
		<pubDate>Sat, 29 Oct 2011 02:31:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-153</guid>
		<description>Fala Saab
Antes de tudo obrigado pelo post, esta ajudando muitos!
Tenho pesquisado porém, sem sucesso sobre como manipular um campo booleano (checkbox) dentro da classe AbstractTableModel se puder postar um pequeno exemplo!?

Grande abraço!</description>
		<content:encoded><![CDATA[<p>Fala Saab<br />
Antes de tudo obrigado pelo post, esta ajudando muitos!<br />
Tenho pesquisado porém, sem sucesso sobre como manipular um campo booleano (checkbox) dentro da classe AbstractTableModel se puder postar um pequeno exemplo!?</p>
<p>Grande abraço!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Saab</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-152</link>
		<dc:creator>Saab</dc:creator>
		<pubDate>Sat, 23 Jul 2011 01:11:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-152</guid>
		<description>Fala Marcelo,
Valeu por informar os erros cara, tudo falta de atenção minha, desculpa... Já arrumei tudo no post. =D
Segue uma explicação deles:

Sobre o primeiro problema, o método estava com o nome errado mesmo, deveria ser &lt;strong&gt;getProduto&lt;/strong&gt;.. Isso concerteza foi devido a um ctrl+c, ctrl+v.. hehehe
Agora sobre uma reclamação da IDE, provavelmente é porquê eu tinha esquecido de informar qual o tipo da lista.
Antes a declaração do atributo produtos estava assim: private List produtos;
Agora está assim: private List produtos;
Eu explícitamente falo que o tipo dos objetos dessa lista vai ser Produto. Quando o tipo não é informado o tipo padrão é Object.
Sacou o erro? Na declaração do método falamos que o retorno é um Produto porém como a lista não estava tipada (informando explicitamente o tipo Produto), era retornado o tipo Object.

Sobre as ordenações, acontece o mesmo erro... Faltou informar qual o tipo dos objetos que eu ia utilizar dentro da classe comparadora (Comparator).
O método estático sort() da classe Collections tem uma sobrescrita (override) que permite eu passar 2 parâmetros:
1 - A lista que eu quero ordenar
2 - A classe que vai ser utilizada para a ordenação de tal lista
A classe que vai ser utilizada deve ser uma implementação da interface Comparator, que define o método compare(), que é utilizado no algorítmo de ordenação.
Apenas para evitar a criação de uma nova classe (ProdutoOrdenadorQuantidade.java por exemplo) foi criada uma &quot;classe inline&quot;, ou seja, dentro do próprio método nós criamos uma nova classe que implementa a interface Comparator.
O problema é que caso não seja informado qual o tipo da classe que implementa essa interface (como estava antes: new Comparator() {...}) o padrão é Object, então o método compare() deveria receber dois Object: compare(Object o1, Object o2), o que estava gerando erro na IDE.
Depois que informamos o tipo da classe que implementa a interface (new Comparator() {...}) o método compare() passa a esperar dois objetos Produto: compare(Produto p1, Produto p2). =]

Brigadão por informar minhas faltas de atenção Marcelo.
Boa sorte ai nos estudos.
[]s,
Saab.</description>
		<content:encoded><![CDATA[<p>Fala Marcelo,<br />
Valeu por informar os erros cara, tudo falta de atenção minha, desculpa&#8230; Já arrumei tudo no post. =D<br />
Segue uma explicação deles:</p>
<p>Sobre o primeiro problema, o método estava com o nome errado mesmo, deveria ser <strong>getProduto</strong>.. Isso concerteza foi devido a um ctrl+c, ctrl+v.. hehehe<br />
Agora sobre uma reclamação da IDE, provavelmente é porquê eu tinha esquecido de informar qual o tipo da lista.<br />
Antes a declaração do atributo produtos estava assim: private List produtos;<br />
Agora está assim: private List produtos;<br />
Eu explícitamente falo que o tipo dos objetos dessa lista vai ser Produto. Quando o tipo não é informado o tipo padrão é Object.<br />
Sacou o erro? Na declaração do método falamos que o retorno é um Produto porém como a lista não estava tipada (informando explicitamente o tipo Produto), era retornado o tipo Object.</p>
<p>Sobre as ordenações, acontece o mesmo erro&#8230; Faltou informar qual o tipo dos objetos que eu ia utilizar dentro da classe comparadora (Comparator).<br />
O método estático sort() da classe Collections tem uma sobrescrita (override) que permite eu passar 2 parâmetros:<br />
1 &#8211; A lista que eu quero ordenar<br />
2 &#8211; A classe que vai ser utilizada para a ordenação de tal lista<br />
A classe que vai ser utilizada deve ser uma implementação da interface Comparator, que define o método compare(), que é utilizado no algorítmo de ordenação.<br />
Apenas para evitar a criação de uma nova classe (ProdutoOrdenadorQuantidade.java por exemplo) foi criada uma &#8220;classe inline&#8221;, ou seja, dentro do próprio método nós criamos uma nova classe que implementa a interface Comparator.<br />
O problema é que caso não seja informado qual o tipo da classe que implementa essa interface (como estava antes: new Comparator() {&#8230;}) o padrão é Object, então o método compare() deveria receber dois Object: compare(Object o1, Object o2), o que estava gerando erro na IDE.<br />
Depois que informamos o tipo da classe que implementa a interface (new Comparator() {&#8230;}) o método compare() passa a esperar dois objetos Produto: compare(Produto p1, Produto p2). =]</p>
<p>Brigadão por informar minhas faltas de atenção Marcelo.<br />
Boa sorte ai nos estudos.<br />
[]s,<br />
Saab.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Marcelo</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-151</link>
		<dc:creator>Marcelo</dc:creator>
		<pubDate>Fri, 22 Jul 2011 13:58:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-151</guid>
		<description>Olá, gostaria de lhe parabenizar pelo artigo e gostaria da sua ajuda para me ajudar a entender alguns probleminhas que tive ao usar o seu exemplo para aprender, a Default Table Model realmente não facilita a vida de nós programadores. Como sou iniciante, peço que tenha um pouco de paciência comigo, afinal, ninguém nasceu sabendo. Em alguns trechos do seu código o NetBeans acusou alguns erros que não me permitiram rodar a sua aplicação tais como:
...
    public Produto getCliente(int pos) {
        if (pos &gt;= produtos.size()) {
            return null;
        }

        return produtos.get(pos);
    }
...
 A variável &quot;produtos&quot; é do tipo List, como declarado no topo do código fonte, o método que eu suponho ser, &quot;getProduto&quot; e não &quot;getCliente&quot; deveria retornar um tipo &quot;Produto&quot;, o Netbeans não aceitou esse tipo de retorno.

...

public void ordenarPorNome() {
        //ordena pelo nome
        Collections.sort(produtos, new Comparator() {

            public int compare(Produto o1, Produto o2) {
                return o1.getNome().compareTo(o2.getNome());
            }
        });

        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }
...
 Nos métodos de ordenação a IDE informa algum problema que eu não consegui entender, portanto queria que você me esclarecesse essa parte do código por favor.
No mais, acho que caso você esclareça essas minhas dúvidas eu irei aprender a criar meu próprio model e fugir definitivamente do DTM.
desde já agradeço.</description>
		<content:encoded><![CDATA[<p>Olá, gostaria de lhe parabenizar pelo artigo e gostaria da sua ajuda para me ajudar a entender alguns probleminhas que tive ao usar o seu exemplo para aprender, a Default Table Model realmente não facilita a vida de nós programadores. Como sou iniciante, peço que tenha um pouco de paciência comigo, afinal, ninguém nasceu sabendo. Em alguns trechos do seu código o NetBeans acusou alguns erros que não me permitiram rodar a sua aplicação tais como:<br />
&#8230;<br />
    public Produto getCliente(int pos) {<br />
        if (pos &gt;= produtos.size()) {<br />
            return null;<br />
        }</p>
<p>        return produtos.get(pos);<br />
    }<br />
&#8230;<br />
 A variável &#8220;produtos&#8221; é do tipo List, como declarado no topo do código fonte, o método que eu suponho ser, &#8220;getProduto&#8221; e não &#8220;getCliente&#8221; deveria retornar um tipo &#8220;Produto&#8221;, o Netbeans não aceitou esse tipo de retorno.</p>
<p>&#8230;</p>
<p>public void ordenarPorNome() {<br />
        //ordena pelo nome<br />
        Collections.sort(produtos, new Comparator() {</p>
<p>            public int compare(Produto o1, Produto o2) {<br />
                return o1.getNome().compareTo(o2.getNome());<br />
            }<br />
        });</p>
<p>        //avisa que a tabela foi alterada<br />
        fireTableDataChanged();<br />
    }<br />
&#8230;<br />
 Nos métodos de ordenação a IDE informa algum problema que eu não consegui entender, portanto queria que você me esclarecesse essa parte do código por favor.<br />
No mais, acho que caso você esclareça essas minhas dúvidas eu irei aprender a criar meu próprio model e fugir definitivamente do DTM.<br />
desde já agradeço.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Saab</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-150</link>
		<dc:creator>Saab</dc:creator>
		<pubDate>Thu, 09 Jun 2011 22:27:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-150</guid>
		<description>Valeu Heberts!!

Muito obrigado pela contribuição e parabéns pelas pesquisas e pelo resultado, muito interessante teu código.

=D</description>
		<content:encoded><![CDATA[<p>Valeu Heberts!!</p>
<p>Muito obrigado pela contribuição e parabéns pelas pesquisas e pelo resultado, muito interessante teu código.</p>
<p>=D</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Herberts</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-149</link>
		<dc:creator>Herberts</dc:creator>
		<pubDate>Tue, 07 Jun 2011 16:56:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-149</guid>
		<description>Caros amigos, gostaria de acrescentar a este tutorial algo que me tirou um dia de trabalho por conta de algumas linhas de código que estão muito bem colocadas neste tutorial, mas que necessitavam de pequenos ajustes.

A classe como está, não atualiza a informação necessária para que os ouvintes que implementam TableModelListener saibam qual modificação foi feita na tabela, ou seja, se foi INSERT, UPDATE, DELETE. Por isso se tentarmos sobrescrever o método tableChanged() para saber qual modificação foi feita na tabela, ele só vai informar a modificação padrão (UPDATE). Para resolver isto deve-se reescrever as seguintes linhas:

public void inserir(Produto p) {
        produtos.add(p);

        //fireTableDataChanged(); altera para:
        fireTableRowsInserted(produtos.indexOf(p), produtos.indexOf(p));
 }
public void excluir(int pos) {
        produtos.remove(pos);

        //fireTableDataChanged(); altera para:
        fireTableRowsDeleted(pos, pos);
 }

 public void excluir(Produto p) {
        produtos.remove(p);

        //fireTableDataChanged(); altera para:
        fireTableRowsDeleted(produtos.indexOf(p), produtos.indexOf(p));
 }

Em fim, espero ter contribuído para o enriquecimento deste belo tutorial.</description>
		<content:encoded><![CDATA[<p>Caros amigos, gostaria de acrescentar a este tutorial algo que me tirou um dia de trabalho por conta de algumas linhas de código que estão muito bem colocadas neste tutorial, mas que necessitavam de pequenos ajustes.</p>
<p>A classe como está, não atualiza a informação necessária para que os ouvintes que implementam TableModelListener saibam qual modificação foi feita na tabela, ou seja, se foi INSERT, UPDATE, DELETE. Por isso se tentarmos sobrescrever o método tableChanged() para saber qual modificação foi feita na tabela, ele só vai informar a modificação padrão (UPDATE). Para resolver isto deve-se reescrever as seguintes linhas:</p>
<p>public void inserir(Produto p) {<br />
        produtos.add(p);</p>
<p>        //fireTableDataChanged(); altera para:<br />
        fireTableRowsInserted(produtos.indexOf(p), produtos.indexOf(p));<br />
 }<br />
public void excluir(int pos) {<br />
        produtos.remove(pos);</p>
<p>        //fireTableDataChanged(); altera para:<br />
        fireTableRowsDeleted(pos, pos);<br />
 }</p>
<p> public void excluir(Produto p) {<br />
        produtos.remove(p);</p>
<p>        //fireTableDataChanged(); altera para:<br />
        fireTableRowsDeleted(produtos.indexOf(p), produtos.indexOf(p));<br />
 }</p>
<p>Em fim, espero ter contribuído para o enriquecimento deste belo tutorial.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Vitor</title>
		<link>http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez#comment-148</link>
		<dc:creator>Vitor</dc:creator>
		<pubDate>Mon, 06 Jun 2011 05:41:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171#comment-148</guid>
		<description>Muito legal o tutorial, deu uma ajuda num projeto pra faculdade.</description>
		<content:encoded><![CDATA[<p>Muito legal o tutorial, deu uma ajuda num projeto pra faculdade.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

