MinhaTabela - AbstractTableModel [Resolvido]

5 respostas
KaosBr

Bom dia,

Estou, criando uma classe para uso no meu sistema, estou com muitas dúvidas a repeito. Segue abaixo, o código:

package JTable;

import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Kaos
 */
public class MinhaTabela extends AbstractTableModel{
    private static final long serialVersionUID = 1L;
    private Object[][] linha;
    private Object[] coluna;

    public MinhaTabela(Object[] informeNomeDasColunas,
            Object[][] informeOsDadosDaColuna) {
        this.coluna = informeNomeDasColunas;
        this.linha = informeOsDadosDaColuna;
    }

    public int getRowCount() {
        //throw new UnsupportedOperationException("Not supported yet.");
        return this.linha.length;
    }

    public int getColumnCount() {
        //throw new UnsupportedOperationException("Not supported yet.");
        return this.coluna.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        //throw new UnsupportedOperationException("Not supported yet.");
        return this.linha[rowIndex][columnIndex];
    }

}

Dúvidas:

1- Nas linhas: 21, 26 e 31. Os códigos comentados, haviam sido, gerados pela IDE. A principio, pensei em apagar essas linhas, mas por não compreender, sua utilidade, deixei apenas comentadas.

A) Qual tipo de situação, que essas excessões, tratam?
B)No caso de não, remove-las, onde continuo a digitar o código dentro desses metodos?

2- Na linha 11, há uma matriz, como descubro quantos elementos, há em cada grupo desse arranjo? Nas linhas e colunas.

3- Na linha 10, o valor foi sugerido, pela IDE. Qual é sua função?

4- No lugar, desses vetores e matrizes, seria possivel eu trabalhar com coleções?

Obrigado.

[]s

5 Respostas

luxu

KaosBr:

1- Nas linhas: 21, 26 e 31. Os códigos comentados, haviam sido, gerados pela IDE. A principio, pensei em apagar essas linhas, mas por não compreender, sua utilidade, deixei apenas comentadas.

A) Qual tipo de situação, que essas excessões, tratam?
B)No caso de não, remove-las, onde continuo a digitar o código dentro desses metodos?

2- Na linha 11, há uma matriz, como descubro quantos elementos, há em cada grupo desse arranjo? Nas linhas e colunas.

3- Na linha 10, o valor foi sugerido, pela IDE. Qual é sua função?

4- No lugar, desses vetores e matrizes, seria possivel eu trabalhar com coleções?[]s

1 - a)
b)Sempre apaguei essas linhas e nunca deram problema algum…

2 - bom nunca vi matriz de object sempre dos métodos primitivos ou objetos, o acesso se dá digitando assim: String exemplo[] = new String(); vc acessa assim: exemplo.[ctrl+barra de espaço] te mostra todas as opções do vetor.

3 - Tb naum sei só aparece qdo se cria projetos para web, projetos desktop nunca vi criar.

4 - Com certeza, seria o q se chama avanço da linguagem…

Só.

ViniGodoy

KaosBr:
1- Nas linhas: 21, 26 e 31. Os códigos comentados, haviam sido, gerados pela IDE. A principio, pensei em apagar essas linhas, mas por não compreender, sua utilidade, deixei apenas comentadas.

A) Qual tipo de situação, que essas excessões, tratam?

Essas linhas simplesmente disparam uma exceção, que indica que aquele método não está implementado. Isso serve para você não esquecer de implementar esse método no futuro, e notificar algum desavisado caso ele chame esse método por acidente. Você não só pode, como deve, apaga-las quando fizer a implementação do método.

linha.length //Indica o número de linhas da matriz linha[0].length //Indica o número de colunas da linha 0.

Entretanto, essa não é maneira correta de se implementar um TableModel. Pq, a rigor, você está fazendo uma implementação similar a do DefaultTableModel. Isso é problemático, pois não só você vai herdar todas as deficiências do Default, como também estará duplicando um código que a Sun já fez, depurou e funciona corretamente.

O default ainda é mais flexível, pois utiliza estruturas de dados dinâmicas para os dados (Vectors de Vectors).

Esse campo serve como identificador da classe, caso ela seja serializada. Ele é necessário em todas as classes que estendem Serializable. Entretanto, em muitas aplicações, a serialização não é usada. Nesse caso, é melhor desligar o warning da IDE e não inserir o serialVersionUID.

Use somente se você pretende usar essa classe em conjunto com um ObjectInputStream ou um ObjectOutputStream, ou com algum framework que exija objetos serializados (como o Prevayler, por exemplo).

Na verdade, não só é possível, como também é preferível. E, não coleções de Object, mas sim, coleções da classe específica que você quer exibir no seu JTable. Siga os links da minha assinatura, pois há exemplos de implementações de models por lá. Procure entender que o model é a classe que a tabela usa para perguntar que dados irão ser exibidos por ela.

nathanpsouza

luxu:
KaosBr:

1- Nas linhas: 21, 26 e 31. Os códigos comentados, haviam sido, gerados pela IDE. A principio, pensei em apagar essas linhas, mas por não compreender, sua utilidade, deixei apenas comentadas.

A) Qual tipo de situação, que essas excessões, tratam?
B)No caso de não, remove-las, onde continuo a digitar o código dentro desses metodos?

2- Na linha 11, há uma matriz, como descubro quantos elementos, há em cada grupo desse arranjo? Nas linhas e colunas.

3- Na linha 10, o valor foi sugerido, pela IDE. Qual é sua função?

4- No lugar, desses vetores e matrizes, seria possivel eu trabalhar com coleções?[]s

1 - a)
b)Sempre apaguei essas linhas e nunca deram problema algum…

2 - bom nunca vi matriz de object sempre dos métodos primitivos ou objetos, o acesso se dá digitando assim: String exemplo[] = new String(); vc acessa assim: exemplo.[ctrl+barra de espaço] te mostra todas as opções do vetor.

3 - Tb naum sei só aparece qdo se cria projetos para web, projetos desktop nunca vi criar.

4 - Com certeza, seria o q se chama avanço da linguagem…

Só.

1 A - a ide gerou o esqueleto da classe para você, e essas linhas lançam exceções dizendo que os métodos ainda não foram implementados, você deve apaga-las após implementar os métodos.

2 - O uso de matrizes de objetos permitem que você insira qualquer tipo de dados na matriz, como um inteiro, uma string, um double…, claro, para utilizar esses elementos você terá que fazer cast deles. Os métodos getRowCount e getColumnCount() da sua própria classe retornam os tamanhos da cada matriz.

3 - é uma forma de controlar seus objetos quando serializados, veja mais em http://www.javapractices.com/topic/TopicAction.do?Id=45

4 - como você está estendendo a classe abstrata, provavelmente ela foi desenhada para trabalhar com matrizes e não coleções, logo creio que alterar a forma atual causará alguns problemas de incompatibilidade, visto que, classes abstratas e interfaces foram feitas para manterem um “contrato” com quem os implementam.

ViniGodoy

Se você olhar a interface que ele implementa, verá que ela não tem nada a ver com matrizes. O uso de coleções é desejável, pois o tableModel prevê que a tabela possa receber mais linhas durante seu ciclo de vida (o que é normal, caso você queira inserir um elemento na tabela, por exemplo).

KaosBr

Boa tarde,

Vou fazer as alterações e ler o artigo sobre serialização. É bom saber, que a ideia inicial, de usar coleções, é não só adequado, dentro dos paradigmas de desenvolvimento, quanto recomendado “na pratica”.

Vou reler o topico, http://www.guj.com.br/posts/list/100793.java , pois a primeira vez que li, tava com dois pés atraz de criar herdando o AbstractTableModel :roll: Isso deve ter tirado, grande parte da atenção, necessária para tirar melhor proveito do tópico, mas lembro que o resultado foi muito estimulante. :slight_smile: Pois, a tabela exposta, no tópico ficou muito sofisticada :smiley:

Obrigado, pela colaborção, de todos.

[[]]s

Criado 16 de outubro de 2010
Ultima resposta 16 de out. de 2010
Respostas 5
Participantes 4