Header da JTable imprime errado

5 respostas
xwillianss

Olá tenho as seguintes classes:

package org.wsi.modelo;

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

public class SimpleTableModel extends AbstractTableModel {

    private ArrayList linhas = null;
    private Object[] colunas = null;
    
    public SimpleTableModel(ArrayList dados, Object[] colunas) {
        setLinhas(dados);
        setColunas(colunas);
    }

    public int getRowCount() {
        return getLinhas().size();
    }

    public int getColumnCount() {
        return getColunas().length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        String[] linha = (String[]) getLinhas().get(rowIndex);
        return linha[columnIndex];
    }

    public ArrayList getLinhas() {
        return linhas;
    }

    public void setLinhas(ArrayList linhas) {
        this.linhas = linhas;
    }

    public Object[] getColunas() {
        return colunas;
    }

    public void setColunas(Object[] colunas) {
        this.colunas = colunas;
    }
}
package org.wsi.viewer;

import java.util.ArrayList;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import org.wsi.modelo.SimpleTableModel;

public class MyTableViewer {

    public void createJTable(JTable value) {
        ArrayList dados = new ArrayList();
        Object[] colunas = new Object[]{"Estado", "Cidade"};
        dados.add(new String[]{"SP", "São Paulo"});
        dados.add(new String[]{"BA", "Salvador"});
        dados.add(new String[]{"RJ", "Rio de Janeiro"});
        dados.add(new String[]{"BA", "Itabuna"});
        dados.add(new String[]{"BA", "Ilhéus"});
        SimpleTableModel modelo = new SimpleTableModel(dados, colunas);
        value.setModel(modelo);
        value.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }
}
package org.wsi.app;

import org.wsi.viewer.MyTableViewer;

public class MyFramePrincipal extends javax.swing.JFrame {
    public MyFramePrincipal() {
        initComponents();
        new MyTableViewer().createJTable(jtabCidade);
    }
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyFramePrincipal().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jtabCidade;
    // End of variables declaration
    
}

na hora que eu rodo o programa sai assim:

com os títulos da coluna com A e B

Por favor alguém poderia me ajudar a esclarecer isso?

5 Respostas

xwillianss

Por favor gente…

ViniGodoy

Sobrescreva também o método getColumnName. Dá uma olhada:
http://www.guj.com.br/posts/list/132698.java#714736

Provavelmente a implementação dele seria:

@Override public String getColumnName(int col) { return colunas[col]; }

Agora, confira o tópico acima para o jeito correto de se fazer um TableModel. O seu serve para estudo, mas não é uma boa idéia criar um model genérico dessa forma. Um model assim é o DefaultTableModel, e é uma péssima prática utiliza-lo. O ideal mesmo, é fazer um modelo que respeite e trabalhe com sua classe de negócio, sem a necessidade de casts ou cópias de dados.

xwillianss

ViniGodoy:
Sobrescreva também o método getColumnName. Dá uma olhada:
http://www.guj.com.br/posts/list/132698.java#714736

Provavelmente a implementação dele seria:

@Override public String getColumnName(int col) { return colunas[col]; }

Agora, confira o tópico acima para o jeito correto de se fazer um TableModel. O seu serve para estudo, mas não é uma boa idéia criar um model genérico dessa forma. Um model assim é o DefaultTableModel, e é uma péssima prática utiliza-lo. O ideal mesmo, é fazer um modelo que respeite e trabalhe com sua classe de negócio, sem a necessidade de casts ou cópias de dados.

E como faço para usar a implementação desse método?
O link acima atrapalha mais do que ajuda…

Alguém mais pode me ajudar? :roll:

ViniGodoy

Ok, mas colocar o getColumnName no seu próprio modelo não resolveu?

xwillianss

Pô cara resolveu sim… valeu, obrigado mesmo…
É que antes eu estava esquecendo de fazer o cast de Object para String no retorno do método…

Obrigado!

Abração.

Criado 21 de setembro de 2009
Ultima resposta 23 de set. de 2009
Respostas 5
Participantes 2