Selecção de linha na JTable

1 resposta
O

Hey pessoal, antes de mais queria desejar a toda a gente um bom ano de 2007.

É o seguinte eu tenho uma JTable a funcionar com tudo direitinho.
Criei um PopupMenu com alguns Itens que tambem já está a funcionar.
Nesse JFrame tenho JButtons do tipo Adicionar, Remover, Modificar, também a funcionar (Estou a mecher os dados em MySql).

Agora a questão é a seguinte, Por exemplo quando eu quero modificar, o utilizador escreve por exemplo o nome do Individuo que quer modificar.

Mas eu queria ao seleccionar a linha da JTable e depois ao clicar para abrir o JPopupMenu e seguidamente carregando em modificar que ele já guardasse o nome desse Individuo dessa linha nao precisando de ele inserir o nome que quer modificar.

MUITO obrigado pessoal []`s.

1 Resposta

Sombriks

others, bom 2007 pra vc também!

vejamos, vc já resolveu a parte de pegar a linha e popular o formulário, correto? Pois bem, na minha aplicação quando eu termino de editar eu uso o model da tabela para atualizar; no meu caso eu implementei a interface TableModel e extendi de AbstractTableModel, que cuida da parte de ouvintes.

aí o que acontece: 1- seleciono um linha na tabela e peço o objeto em questão para a minha implementação de TableModel 2- após as modificações eu utilizo um método extra que eu inseri no model da minha tabela para fazer “update” 3- utilizo um método chamado fireTableDataChanged() que está presente em AbstractTableModel

acho que fui muito confuso, mas o segredo todo é chamar esse fireTableDataChanged; claro, é recomendável que você implemente o seu próprio model, pois, ao menos pra mim, ele é uma ligação perfeita entre o banco e a nossa tela.

Acho que já postei isto antes, mas aqui vai um exemplo de um dos Models que eu tenho utilizado… com ele as tarefas de select, create, update e delete ficam muito fáceis, e métodos de ordenação também são uma boa colocar no Model…

/*
 * ProdutoTableModel.java
 *
 * Created on 18 de Dezembro de 2006, 23:44
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package visual.model;

import entidades.produtos.Produto;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import persistencia.Banco;

/**
 *
 * @author sombriks
 */
public class ProdutoTableModel extends AbstractTableModel implements TableModel{
    
    private List<Produto>data;
    private Banco banco;
    
    /** 
     *  Creates a new instance of ProdutoTableModel
     */
    public ProdutoTableModel(Banco banco) {
        this.banco=banco;
    }
    
    /**
     *  Através deste método que "subimos" um produto até a camada mais próxmia
     *do end-user.
     */
    public Produto getProdutoAt(int i) {
        return data != null ? data.size() &gt i ? data.get(i) : null : null;
    }
    
    /**
     *  Este método nos permite popular com dados oriundos do banco o modelo, e
     *dessa forma exibir através da tabela os dados ao cliente.
     */
    public void select(Produto produto){
        data = produto != null ? 
            banco.select(produto) : banco.select(Produto.class);
        fireTableDataChanged();
    }
    
    /**
     *  Metodo de "criação" de produtos. Na realidade o produto já chega pronto
     *aqui.
     */
    public void create(Produto p) {
        if(p!=null)
            banco.set(p);
        select(null);
    }
    
    /**
     *  Método utilizado para atualizar produtos
     */
    public void update(Produto p) {
        if(p!=null)
            banco.set(p);
        select(null);
    }
    
    /**
     *  Método prara deletar produtos
     */
    public void delete(Produto p) {
        if(p!=null)
            banco.delete(p);
        select(null);
    }

    /**
     *  Método exigido pela interface. devolvemos o tamanho do List privado, que
     *é onde guardamos os valores recuperados do banco.
     */
    public int getRowCount() {
        //assert data != null : "Um problema ocorreu..."; 
        return data != null ? data.size() : 0;
    }

    /**
     *  Método exigido pela interface. serve para devolver o número de colunas.
     */
    public int getColumnCount() {
        return 7;
    }

    /**
     *  Método sobrescrito da classe abstrata e exigido pela interface. aqui nós
     *fornecemos os nomes das colunas.
     */
    public String getColumnName(int columnIndex) {
        switch(columnIndex){
            case 0:
                return "id";
            case 1:
                return "nome do produto";
            case 2:
                return "unidade de medida";
            case 3:
                return "quantidade em estoque";
            case 4:
                return "valor unitário";
            case 5:
                return "preco de compra";
            case 6:
                return "descrição";
            default :
                return "";
        }
    }

    /**
     *  Método sobrecrito da classe abstrata e exigido pela interface; os dados
     *não são editados na própria tabela, mas sim em um componente externo.
     */
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }
    
    /**
     *  Método exigido pela interface. aqui utiliamos uma switch para pegar os
     *dados da lista e exibir um por vez de forma tratada.
     */
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch(columnIndex){
            case 0:
                return data.get(rowIndex).getId();
            case 1:
                return data.get(rowIndex).getNome();
            case 2:
                return data.get(rowIndex).getUnidade();
            case 3:
                return data.get(rowIndex).getEstoque();
            case 4:
                return "R$ "+data.get(rowIndex).getValor();
            case 5:
                return "R$ "+data.get(rowIndex).getPrecoDeCompra();
            case 6:
                return data.get(rowIndex).getDescricao();
            default :
                return "";
        }
    }
}

espero ter descomplicado ao invés de complicar, :smiley:

boa sorte e qualquer dúvida continue o tópico.

Criado 2 de janeiro de 2007
Ultima resposta 2 de jan. de 2007
Respostas 1
Participantes 2