Re:JTable difícil

hehehe, vamos por parte:

Não permita ao usuário modificar manualmente os dados da célula na qual clique, mas permita que o valor da célula seja alterado pela chamada de um método;

pra que a jtable não possa ser modificada voce tem que setar isto no model,
caso use o netbeans é só ir em propriedades >> cliacar no botao […] em frente a palavra model >> e desmarcar a caixa de seleção editable dos campos

Trabalhe com os métodos “addRow()” e “removeRow()”;

isto voce faz atraves do model da tabela:

   ((DefaultTableModel)jTable1.getModel()).addRow(new Object[] {
      new String("blablabla"),
      new Integer(3),
      new ......
});
   ((DefaultTableModel)jTable1.getModel()).removeRow(3);

Gere um evento quando o usuário clica numa linha;

é so criar o seguinte listener para obter qual linha foi selecionada.

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
    jTable1.getSelectedRow();
}

espero ter ajudado mais que confundido…

[ ]'s

Luiz Rocha, Bom dia!

Eu recomendo tudo o que o rodrigo.ccn2005 recomendou, só que eu vou mais além: implemente vc mesmo um TableModel, asim vc só terá vantagens, como, por exemplo, resolver de forma muito mais reutilizável e elegante a forma como vc irá recuperar os dados presentes na tabela e também utilizar os recursos já existentes na API pra “popular” as linhas. Aposto que vc estava inserindo os dados “manualmente”, não era?

Na classe abaixo (que está 80% concluida, :D) eu mostro minha implementação de model. É um model para recuperar funcionários. Veja só:

/*
 * FuncionarioTableModel.java
 *
 * Created on 18 de Novembro de 2006, 02:29
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package visual.model;

import entidades.pessoas.Funcionario;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import persistencia.Banco;
import util.Util;

/**
 *
 * @author sombriks
 */
public class FuncionarioTableModel extends AbstractTableModel 
        implements TableModel{
    
    private List<Funcionario>data;
    private Banco b;
    private Util util;
    
    /** Creates a new instance of FuncionarioTableModel */
    public FuncionarioTableModel(Banco b,Util util) {
        this.b=b;
        this.util=util;
    }

    public int getRowCount() {
        return data != null ? data.size() : 0;
    }

    public int getColumnCount() {
        return 9;
    }
    
    public Funcionario getFuncionario(int index){
        return data.get(index);
    }
    
    public void select(Funcionario f){
        if(f == null)
            data = b.select(Funcionario.class);
        else
            data = b.select(f);
        fireTableDataChanged();
    }
    
    public void insert(Funcionario f){
        if(f != null)
            b.set(f);
        select(null);
    }

    public void update(Funcionario f){
        if(f != null)
            b.set(f);
        select(null);
    }
    
    public void delete(Funcionario f){
        if(f != null)
            b.delete(f);
        select(null);
    }
    
    public String getColumnName(int columnIndex) {
        switch(columnIndex){
            case 0 :
                return "id";
            case 1 :
                return "login";
            case 2 :
                return "nome";
            case 3 :
                return "nome do pai";
            case 4 :
                return "nome da mãe";
            case 5 :
                return "data de nascimento";
            case 6 :
                return "nº da identidade";
            case 7 :
                return "salário mensal";
            case 8 :
                return "nível de acesso";
            default :
                return "";            
        }
    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }
    
    public Object getValueAt(int rowIndex, int columnIndex) {
        if(getRowCount()&gt0){
            switch(columnIndex){
                case 0:
                    return data.get(rowIndex).getId();
                case 1:
                    return data.get(rowIndex).getLogin();
                case 2:
                    return data.get(rowIndex).getNome();
                case 3:
                    return data.get(rowIndex).getNomePai();
                case 4:
                    return data.get(rowIndex).getNomeMae();
                case 5:
                    return data.get(rowIndex).getDataNasc();
                case 6:
                    return data.get(rowIndex).getIdentidade();
                case 7:
                    return data.get(rowIndex).getSalario();
                case 8:
                    return data.get(rowIndex).getLvAcesso();
                default:
                    return null;
            }
        }return null;
    }  
}

Assim, quando eu uso o método create | update | delete | select eu insiro os dados e atualizo a tabela com o método vindo de AbstractTableModel, fireTableChanged();

bom, qq dúvida continue a fazer tópicos, :smiley:

té+++

Estou com um problema que já me tomou dias:

Eu quero uma JTable que:

Não permita ao usuário modificar manualmente os dados da célula na qual clique, mas permita que o valor da célula seja alterado pela chamada de um método;

Trabalhe com os métodos “addRow()” e “removeRow()”;

Gere um evento quando o usuário clica numa linha;

E eu só consigo uma coisa ou outra. Como é que eu faço?

Se você não souber, pelomenos obrigado pelo interesse.