JTable + Access!

Galera, por favor,

Alguém tem um exemplo de JTable acessando banco de dados MDB??

Como faz para pegar o valor que o usuário jogou na célula para assim jogar em uma variável e gravar no Banco?

Valeu! 8)

Não importa o BD que você usar. Use JDBC e você estará livre* para suar qualquer banco de dados. Quanto à alteração automática, não tem como com Swing, a não ser que você pegue algum componente pronto para isso. Isso é coisa pra VB e Delphi que amarra todo o teu sistema ao BD.

Desculpe minha ignorância, mas viajei no que vc falou, creio que não entendeu.

Quero saber se tem como eu pegar qualquer dado de qualquer coluna que o usuário digitou em minha JTable e armazenar no Banco…

Meu pool de Conexão ja está prontinho, funcionando belezinha, o que quero saber é como pega do JTable, tipo que se eu estivesse pegando de um TextField, se vc tem algum código exemplo disso.

Mesmo assim Valeu! 8)

Sua dúvida é BEM recorrente.

Leia abaixo:
http://www.guj.com.br/posts/list/23440.java
http://www.guj.com.br/posts/list/23447.java
http://www.guj.com.br/posts/list/23443.java

Curiosamente você foi o autor dos três posts e eu fui o autor das MESMAS respostas. O caminho é este, usar Table Model para facilitar a sua vida.

De novo, seguem tutoriais para o assunto:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

http://www.guj.com.br/java.artigo.140.1.guj
http://www.guj.com.br/java.artigo.147.1.guj

[quote=danieldestro]Curiosamente você foi o autor dos três posts e eu fui o autor das MESMAS respostas. O caminho é este, usar Table Model para facilitar a sua vida.

De novo, seguem tutoriais para o assunto:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

http://www.guj.com.br/java.artigo.140.1.guj
http://www.guj.com.br/java.artigo.147.1.guj

[/quote]

Pois é, só que todos que vc respondeu não me ajudou em muita coisa, agora esse tutorial da Sun que parece estar um pouco mais esclarecedor, vou dar uma analisada.

Valeu! 8)

Lembre-se que mesmo que você crie um JTable sem (explicitamente) criar um table model, o próprio JTable, internamente, cria um DefaultTableModel.

Ae Daniel estou utilizando o Default mesmo…

Quando uso o seguinte código: JTProdutos.getValueAt(0,0)

Eu estou pegando o primeiro valor da primeira célula da primeira linha da primeira coluna, agora como faço para pegar de várias linhas, de várias colunas, sem saber o número das mesmas???

Tipo o usuário poderá incluir 1 ou 1000 linhas, como faço isso? Utiliza-se o getValue mesmo??

Valew! 8)

Pode ser.

Eu preferiria usar um table model customizado que recebe uma lista de objetos do tipo que eu to mostrando e me retorna uma lista deles tbm.

Imagina algo do tipo:

List pessoas = buscarPessoas(); //retorna um List de objetos Pessoa PessoasTableModel model = new PessoasTableModel( pessoas ); //ou --> model.add( pessoas ); jTable.setModel( model ); //faz algo Pessoa p = (Pessoa) model.getData( 1 ); //pega a linha 1

Parece bem mais fácil, não? Para isso você sód eve implementar o seu table model específico.

[quote=danieldestro]Pessoa p = (Pessoa) model.getData( 1 ); //pega a linha 1

[/quote]
Esse trecho do código pega todos valores da linha 1? ou só dá primeira coluna?

Tentarei usa assim.
Valeu! 8)

Isso não faz nada… só estou dando um exemplo. Mas imagine que você tem uma tabela que mostra as colunas: id - nome - idade, com dados de uma pessoa. Vc pdoeria pegar um objeto Pessoa com os dados daquela linha, diretamente. É melhor do que você pegar coluna a coluna, linha a linha e fazer tudo na mão. O que acha?

Entendi, é bem melhor, mas como no seu exemplo, o que tem no seu método busca pessoas???

É um exemplo imaginário. Só estou tentando dar a idéia geral para que você capte e siga sozinho depois.

No método buscarPessoas() eu poderia acessar o BD e montar um ArrayList com obejtos pessoas, populados com os dados. Nada demais.

Agora sim pintou uma luz aqui hauahua…

Valeu Daniel, qualquer dúvida eu posto aqui denovo!

Fui… 8)

Achei um exemplo que eu usei numa aplicação aqui e funciona bem. Adaptei para o exemplo de Pessoa.

PessoaTableModel.java

[code]package exemplo;

import java.text.;
import java.util.
;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

public class PessoaTableModel extends AbstractTableModel {
/**
* Mantém um array com os nomes das colunas.
*/
private final String[] columnNames = {“id”,
“Nome”,
“Email”,
“Idade”};

/**
 * Mantém os dados a serem apresentados na tabela.
 */
private List data;

/**
 * O construtor deve receber um List com objetos do tipo Pessoa.
 */
public PessoaTableModel( List data ) {
    this.data = data;
}

public List getData() {
    return this.data;
}

public void addNewEmptyLine() {
    addPessoa( new Pessoa() );
}

public void addPessoa( Pessoa p ) {
    this.data.add( p );
    this.fireTableDataChanged();
}

public void removePessoa( Pessoa p ) {
    this.data.remove( p );
    this.fireTableDataChanged();
}

public void removePessoa( int index ) {
    this.data.remove( index );
    this.fireTableDataChanged();
}

public void removePessoa( int[] index ) {
    for( int i=0; i < index.length; i++ ) {
        this.data.remove( index[i] );
    }
    this.fireTableDataChanged();
}

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

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

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

public Class getColumnClass(int c) {
    switch( c ) {
        case 0:
            return Integer.class;
        case 1:
            return String.class;
        case 2:
            return String.class;
        case 3:
            return Integer.class;
    }
    return String.class;
}

public boolean isCellEditable(int row, int col) {
    switch( col ) {
        case 0:
            return false;
        case 1:
        case 2:
        case 3:
            return true;
    }
    return false;
}

public Object getValueAt( int row, int col ) {
    Pessoa obj = (Pessoa) data.get( row );
    if( obj == null ) return null;
    switch( col ) {
        case 0:
            return obj.getId();
        case 1:
            return obj.getNome();
        case 2:
            return obj.getEmail();
        case 3:
            return obj.getIdade();
    }
    return null;
}

/*
 * Don't need to implement this method unless your table's
 * data can change.
 */
public void setValueAt(Object value, int row, int col) {
    Pessoa obj = (Pessoa) data.get( row );
    switch( col ) {
        case 0:
            obj.setId( (Integer) value );
            break;
        case 1:
            obj.setNome( (String) value );
             break;
        case 2:
            obj.setEmail( (String) value );
             break;
        case 3:
            obj.setIdade( (Integer) value );
             break;
    }
    //fireTableDataChanged();
    fireTableCellUpdated(row, col);
}

}[/code]

Para testar:

[code]Pessoa p = new Pessoa();
p.setId(new Integer(1));
p.setNome(“Fulano”);
p.setEmail(“a@b.c”);
p.setIdade(new Integer(25));

List l = new ArrayList();
l.add( p );

PessoaTableModel m = new PessoaTableModel( l );

jTable.setModel( m );

m.addPessoa( new Pessoa() );

Pessoa p2 = new Pessoa();
p2.setId(new Integer(3));
p2.setNome(“Ciclano”);
p2.setEmail(“xxx@xxxxx.xxx”);
p2.setIdade(new Integer(11));
[/code]

Brinque à vontade