JTable não mostrando DADOS :: URGENTE ::

Olá pessoal. criei um TabelModelPadrao

[code]public class TableModelPadrao extends AbstractTableModel{

private ArrayList linhas = null;
private String [] colunas = null;
public String[] getColunas() {return colunas;}
public ArrayList getLinhas() {return linhas;}
public void setColunas(String[] strings) {colunas = strings;}
public void setLinhas(ArrayList list) {linhas = list;}

    /**
 * Retorna o numero de colunas no modelo
 * @see javax.swing.table.TableModel#getColumnCount()
 */
public int getColumnCount() {return getColunas().length;}

/**
 * Retorna o numero de linhas existentes no modelo
 * @see javax.swing.table.TableModel#getRowCount()
 */
public int getRowCount() {return getLinhas().size();}

/**
 * Obtem o valor na linha e coluna
 * @see javax.swing.table.TableModel#getValueAt(int, int)
 */
public Object getValueAt(int rowIndex, int columnIndex) {
    // Obtem a linha, que é uma String []
    String [] linha = (String [])getLinhas().get(rowIndex);
    // Retorna o objeto que esta na coluna
    return linha[columnIndex];
}

public TableModelPadrao(ArrayList dados, String[] colunas){
    setLinhas(dados);
    setColunas(colunas);
}

}[/code]

agora como faço pra mostrar a JTable de um JForm?

tentei assim mas nao deu certo:

[code] public JTable createJTable() {
obj_conexao.executeSQL("SELECT od.id_od,od.dados,od.sel "
+“FROM OBS_DADOS od "
+“LEFT JOIN OBSERVACOES o ON od.id_obs = o.id_obs "
+“WHERE o.id_conta = “+LabelIdConta.getText()+” and od.id_obs = o.id_obs and '”+datOBS+”’ BETWEEN o.DATAI AND o.DATAF”);

    ArrayList dados = new ArrayList();
    String[] colunas = new String[] { "id", "Dados", "Sel" };
    try {
        while(obj_conexao.resultset.next())
        // Alimenta as linhas de dados
        dados.add(new String[]{obj_conexao.resultset.getString("id_od"),
                               obj_conexao.resultset.getString("dados"),
                               obj_conexao.resultset.getString("sel")});
        obj_conexao.resultset.last();
    } catch (SQLException ex) {
        Logger.getLogger(consultaExtratos.class.getName()).log(Level.SEVERE, null, ex);
    }
    TableModelPadrao modelo = new TableModelPadrao(dados, colunas);
    TableObs = new JTable(modelo);
    TableObs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    return TextObs;

}[/code]

essa TableObs eu peguei da palheta do netbeans… ta correto isso? ou devo criar uma por código apenas…

gostaria de uma explicacao, pois estou aprendendo sobre TableModels

Um TableModel desse tipo consegue ser ainda pior que o DefaultTableModel. Ele não só herda todos os seus problemas (pois, no fundo, é uma reimplementação do seu conceito), como também não trata os eventos adequadamente. Se for para fazer assim, evite duplicar código e use o Default diretamente.

Como você sabe, sou absolutamente contra o uso do Default. Se você não quer escrever um TableModel baseado em suas classes de negócio, direito, use o ObjectTableModel do projeto Towel. É bem mais poderoso, evita casts e já está pronto.

ViniGodoy nao qro usar o Default, só que to aprendendo arrecem a fazer um TableModel, se vc tiver uma dica de como criar um tableModel posta ai, pra mim estudar, pois nao internet nao consigo achar nada completo pra estudar
valeu

Primeiro de tudo, você deve organizar suas classes de negócio. Precisa criar uma classe livro. Nos links da minha assinatura há muito material sobre o assunto.

bahh dei uma olhada nas links, mas nao consigo entender…

vamos ver se é por esse caminho…

1º crio uma classe que pode ser chamada de TableModelPadrao… certo?

2º pra chamar no meu jform uso: private TableModelPadrao model;

3º busco os dados da minha jtable assim:

private void pesquisarRegistro() { // instancia uma DefaultTableModel informando as colunas que aparecerão na jTable... DefaultTableModel modeloTabela = new DefaultTableModel(null, new String[] {"Nome do Cliente","Data de Nascimento"}); // informa à jTable qual o modelo dela... jTable1.setModel(modeloTabela); // faz a conexao com o banco de dados... conexao.conectar(); try { Statement stmt = conexao.con.createStatement(); // realiza a consulta no banco... ResultSet rs = stmt.executeQuery("SELECT * FROM Clientes WHERE nomeCli like '%"+editCliente.getText()+"%'"); while (rs.next()) { // implementa vetores do tipo String... String[] dados = new String[2]; // guarda as colunas retornadas da consulta nos vetores... dados[0] = rs.getString("nomeCli"); dados[1] = rs.getString("dataNascCli"); // joga os valores armazenados nos vetores dentro da jTable linha por linha... modeloTabela.addRow(dados); } rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } // encerra a conexao... conexao.desconectar(); }

e para mostrá-la? como faço? qro que a jtable apareça dentro de um jpanel

espero que me ajudem, pois estou perdido, mas qro PARAR de usar DEFAULTTABLEMODEL

abraço

cara, dei uma pesquisada e consegui fazer isso, ve se realmente é bom, ou é pior que o Default

Classe Observacoes

[code]package modelos;

import java.util.Date;

/**
*

  • @author Wagner Vielmond
    */
    public class Observacoes {

    private Integer id;
    private Integer idod;
    private String dados;
    private Boolean sel;
    private Date data;

    public Date getDate(){
    return data;
    }

    public void setDate(Date data){
    this.data = data;
    }

    public String getDados(){
    return dados;
    }

    public void setdDados(String dados){
    this.dados = dados;
    }

    public Integer getId(){
    return id;
    }

    public Integer getIdOd(){
    return idod;
    }

    public void setId(int id){
    this.id = id;
    }

    public void setIdOd(int idod){
    this.idod = idod;
    }

    public Boolean getSel(){
    return sel;
    }

    public void setSel(Boolean sel){
    this.sel = sel;
    }
    }[/code]

classe TableModel

[code]package modelos;

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

public class TableModel extends AbstractTableModel{

private List<Observacoes> list = new ArrayList<Observacoes>();

public TableModel(){

}

// public Observacoes get(int row){
// return list.get(row);
// }

public void insert(Observacoes obs){
    list.add(obs);
    fireTableDataChanged();
}

public void update(int row,Observacoes obs){
    list.set(row, obs);
    fireTableDataChanged();
}

public void delete(int row){
    list.remove(row);
    fireTableDataChanged();
}

public void setData(List<Observacoes> list){
    this.list = list;
    fireTableDataChanged();
}

@Override
public String getColumnName(int column) {
    switch(column){
        case 0: return "Id";
        case 1: return "Obs";
        case 2: return "Dados";
        case 3: return "Sel";
        case 4: return "Data";
        default: return null;
    }
}

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

public int getColumnCount() {
    return 5;
}

public Object getValueAt(int rowIndex, int columnIndex) {
    switch(columnIndex){
        case 0: return list.get(rowIndex).getId();
        case 1: return list.get(rowIndex).getIdOd();
        case 2: return list.get(rowIndex).getDados();
        case 3: return list.get(rowIndex).getSel();
        case 4: return list.get(rowIndex).getDate();
        default: return null;
    }
}

}[/code]

implementacao no jframe

1 - coloquei um jtable da palheta

2 - editei o nome para TableObs

3 - importei private TableModel tableModel = new modelos.TableModel();

4 - criei assim: TableObs.setModel(tableModel);

bem básico…

criou as colunas, agora como coloco os valores vindo do db firebird?

valeu

ahh outra coisa, estou tentando mostrar da seguinte forma:

[code] public void Obs()
{
Date datOBS = null;
String obs = “”;
DateFormat formatter = new SimpleDateFormat(“yyyy/MM/dd”);
try {
datOBS = new java.sql.Date(((java.util.Date) formatter.parse(d)).getTime());
} catch (ParseException ex) {
Logger.getLogger(consultaExtratos.class.getName()).log(Level.SEVERE, null, ex);
}
try {
obj_conexao.executeSQL("SELECT od.id_od,od.id_obs,od.dados,od.sel,od.data "
+“FROM OBS_DADOS od "
+“LEFT JOIN OBSERVACOES o ON od.id_obs = o.id_obs "
+“WHERE o.id_conta = “+LabelIdConta.getText()+” and od.id_obs = o.id_obs and '”+datOBS+”’ BETWEEN o.DATAI AND o.DATAF”);
while (obj_conexao.resultset.next()) {
String[] dados = new String[5];
dados[0] = obj_conexao.resultset.getString(“id_od”);
dados[1] = obj_conexao.resultset.getString(“id_obs”);
dados[2] = obj_conexao.resultset.getString(“dados”);
dados[3] = obj_conexao.resultset.getString(“sel”);
dados[4] = obj_conexao.resultset.getString(“data”);
.
//aqui deveria ter o tableModel.addRow(dados); porém nao consigo adicionar, pq? e nao aparece nada ao executar
}
}
catch (SQLException e) {
e.printStackTrace();
}

}[/code]

obrigado

alguém pra me dar uma ajuda?

valeu

pessoal, aguém que entenda sobre criação de TableModels pode me dar uma mãozinha?

nao ta mostrando os dados na jtable… alguém ai por favor…

valeu

Agora que você tem a classe Observacoes, faça uma classe que carregue as observações do banco e retorne um List<Observacao> preenchido. É esse list que irá dentro do TableModel.

ViniGodoy

tem como me dar um exemplo?

nao seu como fazer… já pesquisei por toda a internet e não consigo fazer…

valeu cara…

to ficando loco ja hehheh

qro q fique assim, só q esse exemplo os dados são estáticos, e o q qro é pegá-los do db.

o TABLEMODEL que achei pra mostra esse exemplo.

[code]class MyTableModel extends AbstractTableModel {
private String[] columnNames = { “First Name”, “Last Name”, “Sport”,
“# of Years”, “Vegetarian” };

private Object[][] data = { // aki nao consigo fazer pegar do banco de dados...
    { "Mary", new Boolean(false) },
    { "Alison", new Boolean(true) },
    { "Kathy", new Boolean(false) },
    { "Sharon", new Boolean(true) },
    { "Philip",  new Boolean(false) } };

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

public int getRowCount() {
  return data.length;
}

public String getColumnName(int col) {
  return columnNames[col];
}

public Object getValueAt(int row, int col) {
  return data[row][col];
}

/*
 * JTable uses this method to determine the default renderer/ editor for
 * each cell. If we didn't implement this method, then the last column
 * would contain text ("true"/"false"), rather than a check box.
 */
public Class getColumnClass(int c) {
  return getValueAt(0, c).getClass();
}

/*
 * Don't need to implement this method unless your table's editable.
 */
public boolean isCellEditable(int row, int col) {
  //Note that the data/cell address is constant,
  //no matter where the cell appears onscreen.
  if (col < 2) {
    return false;
  } else {
    return true;
  }
}

/*
 * Don't need to implement this method unless your table's data can
 * change.
 */
public void setValueAt(Object value, int row, int col) {
  if (DEBUG) {
    System.out.println("Setting value at " + row + "," + col
        + " to " + value + " (an instance of "
        + value.getClass() + ")");
  }

  data[row][col] = value;
  fireTableCellUpdated(row, col);

  if (DEBUG) {
    System.out.println("New value of data:");
    printDebugData();
  }
}

private void printDebugData() {
  int numRows = getRowCount();
  int numCols = getColumnCount();

  for (int i = 0; i < numRows; i++) {
    System.out.print("    row " + i + ":");
    for (int j = 0; j < numCols; j++) {
      System.out.print("  " + data[i][j]);
    }
    System.out.println();
  }
  System.out.println("--------------------------");
}

}[/code]

só que nao consigo fazer ele mostrar os dados do db…

mas esse é só um exemplo, qria que vc me ajudasse na classe Observacoes como crio uma classe que preencha um list com os dados do Db?

valeu