Bom dia a todos, eu tenho um objeto “usuario”, esse objeto contém os atributos
nome
telefone
valorConta
valor total
onde cada coluna do JTable tem esses reespectivos nomes, como faço pra add na linha do table os valores desses atributos?
Bom dia a todos, eu tenho um objeto “usuario”, esse objeto contém os atributos
nome
telefone
valorConta
valor total
onde cada coluna do JTable tem esses reespectivos nomes, como faço pra add na linha do table os valores desses atributos?
Vc precisa construir um tablemodel que irá representar seu usuário…
Um table model tem métodos que você precisa implementar como getValueAt(int coluna, int linha)…etc etc… Vc deve aplicar a lógica para aplicar esse seu table model para seu Bean… Se tem um bom conhecimento de OO aconsenho não fazer um tablemodel que retorne Strings e tudo mais… Tente implementar para retornar um objeto do tipo Usuario na linha clicada por exemplo…
O VinyGodoy tem uma solução muito legal na assinatura dele… Object Table Models
eae…
um exemplo de um tableModel…
pra usar eh soh adicionar ele na sua tabela…
qualquer duvida eh soh perguntar
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package visao.model.movimento;
import DAO.DAO;
import Entidades.Movimentos.EntityOrcamento;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
/**
*
* @author Frank
*/
public class TMMovimentoOrcamento implements TableModel{
private DAO<EntityOrcamento> dao;
private List<EntityOrcamento> lista;
public TMMovimentoOrcamento(){
dao=new DAO<EntityOrcamento>(EntityOrcamento.class);
lista=dao.list();
}
public int getRowCount() {
return lista.size();
}
public int getColumnCount() {
return 3;
}
public String getColumnName(int columnIndex) {
String coluna[]={"ID","Nome","Sigla"};
return coluna[columnIndex];
}
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public Object getValueAt(int rowIndex, int columnIndex) {
EntityOrcamento c=lista.get(rowIndex);
switch(columnIndex){
case 0:return c.getId();
}
return null;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
}
public void addTableModelListener(TableModelListener l) {
}
public void removeTableModelListener(TableModelListener l) {
}
}
frankwco esse exemplo seu e pra web ne n? vlw!!
esse eh pra java desktop
flw
Veja sobre TableModel aqui: http://guj.com.br/posts/list/15/199067.java#1001295
marcos estou tentando implementar mas travei aqui, nao entendi o metodo getValueAt(int rowIndex, int columnIndex), tem como me ajudar?
package mascarenhas.relatorio.telefonia;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class MyTableModel extends AbstractTableModel{
List<Usuarios> lista;
private final int COL_NOME = 0;
private final int COL_TEL = 1;
private final int COL_CENTRO_CUSTO = 2;
private final int COL_VALCONTA = 3;
private final int COL_VALTOTAL = 4;
public MyTableModel(List<Usuarios> user){
this.lista = new ArrayList<Usuarios>(user);
}
//metodo que gera qtde de Colunas
@Override
public int getColumnCount() {
return 5;
}
//método que gera qtde de linhas
@Override
public int getRowCount() {
return this.lista.size();
}
// NAO ENTENDI COMO IMPLEMENTAR AQUI...
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
}
// metodo responsavel por gerar nomes as colunas.
public String ColumName(int columIndex){
if (columIndex == COL_NOME){
return "Usuário";
}
if (columIndex == COL_TEL){
return "Telefone";
}
if(columIndex == COL_CENTRO_CUSTO) {
return "Centro Custo";
}
if(columIndex == COL_VALCONTA){
return "Valor Conta";
}
if(columIndex == COL_VALTOTAL){
return "Valor Total";
}
return null;
}
}
O que o método te pergunta? Qual é o valor naquela coluna e naquela linha.
No seu caso, vamos ver como fica:
//O JTable pergunta para o table o seguinte, usando esse método:
//Que dado está na linha rowIndex e na coluna ColumnIndex?
public Object getValueAt(int rowIndex, int columnIndex) {
//Cada linha tem um usuário. Então, vamos pegar o usuário da linha que ele quer saber:
Usuario usuario = lista.get(rowIndex);
//Ok, cada coluna tem uma informação desse usuário. Vamos retornar essa informação:
if (columnIndex == COL_NOME) return usuario.getNome();
if (columnIndex == COL_TEL) return usuario.getTelefone();
//...e assim por diante
throw new IllegalArgumentException("Número da coluna inválido: " + columnIndex); //Nunca deve ocorrer.
}
Aproveite e ponha esse método no seu TableModel. São métodos assim que vão fazer ele ser melhor de usar do que o Default:
public Usuario getUsuario(int linha) {
return lista.get(linha);
}
public Object getValueAt(int rowIndex, int columnIndex) {
//Cada linha tem um usuário. Então, vamos pegar o usuário da linha que ele quer saber:
Usuario usuario = lista.get(rowIndex);
//Ok, cada coluna tem uma informação desse usuário. Vamos retornar essa informação:
if (columnIndex == COL_NOME) return usuario.getNome();
if (columnIndex == COL_TEL) return usuario.getTelefone();
//...e assim por diante
throw new IllegalArgumentException("Número da coluna inválido: " + columnIndex); //Nunca deve ocorrer.
}
JTable chama esse método até o fim das colunas e linhas passando pra rowIndex o numero de todas linhas?
Isso!
O pseudo-código do JTable é algo mais ou menos assim:
public void draw() {
for (int rowIndex = 0; i < tableModel.getRowCount(); rowIndex++) {
for (int columnIndex = 0; i < tableModel.getColumnCount(); columnIndex++) {
Object toDraw = tableModel.getValueAt(rowIndex, columnIndex);
render(toDraw);
}
}
}
Obvio que o código não é esse, mas a idéia é essa aí.
Nossa Vini muito bom cara, so teve um probleminha eu usei ScrollPane ele nao preencheu os nomes das colunas sera que é por causa do scrol?
O nome das colunas é no método getColumnName. Você deixou o nome do método errado. Para evitar esse problema, use a annotation @Override
// metodo responsavel por gerar nomes as colunas.
@Override
public String getColumName(int columIndex){
O @Override força o compilador a dar um erro, caso esse método que você declarou não esteja fazendo sobrecarga de um método. É útil para evitar erros de digitação (como o seu, que esqueceu do get) e para detectar quais classes devem ser alteradas caso você mude um método da classe pai (todos os filhos vão dar erro, pois não estarão sobrescrevendo o método de novo nome).