[RESOLVIDO]Evento do Click na JTable

Opa galera, la vem eu aqui outra vez…

Estou fazendo uma lista com jtable, ate ai tudo bem, porem nao consigo pegar o evento do click da lista…

alguem sabe como?

segue meu codigo:


public class ListarFazendas extends AbstractTableModel{
    
    private final List<FazendaBean> linhas;
    private final String[] colunas = new String[] {"ID", "Nome", "Tamanho"};

    public ListarFazendas() {
        linhas = new ArrayList<FazendaBean>();
    }

    public ListarFazendas (List<FazendaBean> listaDeFazendas) {
        linhas = new ArrayList<FazendaBean>(listaDeFazendas);
    }
    
    // Retorna a quantidade de colunas
    @Override
    public int getColumnCount() {
        return colunas.length;
    }

    // Retorna a quantidade de linhas. 
    @Override
    public int getRowCount() {
        return linhas.size();
    }

    // Retorna o nome da coluna no índice especificado. Este método é usado pela JTable para saber o texto do cabeçalho. 
    @Override
    public String getColumnName(int columnIndex) {
        return colunas[columnIndex];
    };

    // Retorna a classe dos elementos da coluna especificada. Este método é usado pela JTable na hora de definir o editor da célula. 
    @Override
    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
        case 0: 
                return String.class;
        case 1:
                return String.class;
        case 2: 
                return String.class;
        default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

    // Retorna o valor da célula especificada pelos índices da linha e da coluna.
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        
        FazendaBean bean = linhas.get(rowIndex);
        switch (columnIndex) {
        case 0: 
                return bean.getId();
        case 1: 
                return bean.getNome();
        case 2: 
                return bean.getTamanho();
        default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {};

    // Retorna um valor booleano que define se a célula em questão pode ser editada ou não.
    // Este método é utilizado pela JTable na hora de definir o editor da célula.
    // Neste caso, estará sempre retornando false, não permitindo que nenhuma célula seja editada. 
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }
    
    // Retorna a fazenda da linha especificada.
    public FazendaBean getFazenda(int indiceLinha) {
        return linhas.get(indiceLinha);
    }

    // Adiciona uma lista de sócios ao final dos registros. 
    public void addListaDeFazendas(List<FazendaBean> bean) {
        int tamanhoAntigo = getRowCount();
        linhas.addAll(bean);
        fireTableRowsInserted(tamanhoAntigo, getRowCount() -2);
    }

    // Verifica se este table model está vazio. 
    public boolean isEmpty() {
        return linhas.isEmpty();
    }
}

// Segue o codigo do frame:

public class FrameListarFazenda extends javax.swing.JFrame {                    

    private void btVoltarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        this.dispose();
    }                                        
    
    private JTable tabela;
    private ListarFazendas model;
    private final Fazenda fazenda = new Fazenda(); 
    private final List<FazendaBean> lista = fazenda.listarFazendas();
    private final int quantidadeLista = lista.size();

    public FrameListarFazenda() {
        super("Teste com Table Model");
        initialize();
        getModel().addListaDeFazendas(getFazendas());
    }

    private void initialize() {
        setSize(800, 600);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().add(new JScrollPane(getTblSocios()));
    }

    private JTable getTblSocios() {
        if (tabela == null) {
            tabela = new JTable();
            tabela.setModel(new ListarFazendas());
        }
        return tabela;
    }

    private ListarFazendas getModel() {
        if (model == null) {
            model = (ListarFazendas) getTblSocios().getModel();
        }
        return model;
    }

    private FazendaBean getFazenda() {
        FazendaBean bean = null;
        for (int i = 0; i < lista.size(); i++) {
            if (!(quantidadeLista == lista.size())){
                bean = new FazendaBean();
            }
        }
        return bean;
    }

    private List<FazendaBean> getFazendas() {
        FazendaBean retorno = getFazenda();
        if (!(retorno == null)){
            lista.add(retorno);
        }
        return lista;
    }    
    
    

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FrameListarFazenda().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton btVoltar;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                   
}

Alguem sabe como fazer isso!?

Depois de procurar muito descobri isso:

Porem como eu pego o valor da linha?

[code]
public FrameListarFazenda() {
super(“Teste com Table Model”);
initialize();
getModel().addListaDeFazendas(getFazendas());
tabela.addMouseListener(new MouseAdapter(){
private int linha;
private int coluna;
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
linha = tabela.getSelectedRow();
coluna = tabela.getSelectedColumn();
tabela.getColumnName(1);
System.out.println(tabela.getColumnName(1));
}
}
});

}[/code]

vllw =D

ué, crie seu próprio método no tableModel que retorna a linha selecionada, mais ou menos assim:

public String[] getRow(int index){ return linhas.get(index); }

Ai no seu mouse listner, pega a linha selecionada e chama esse método

Deu pra entender?

opa, implementei desse jeito…

[code]

linha = tabela.getSelectedRow();[/code]

aqui eu ja estava retornando a linha, mas como pegar os valores dessa linha?

segue meu metodo resolvido:

=D

[code]

tabela.addMouseListener(new MouseAdapter(){
private int linha;
private String opcoes[] = new String[]{“Atualizar”, “Excluir”};
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int i = JOptionPane.showOptionDialog(null, “O que deseja Fazer?”, “Alerta”, -1, -1, null, opcoes, 0);
if (i == 0){ // Atualizar
linha = tabela.getSelectedRow();
String id = String.valueOf(tabela.getValueAt(linha, 0));
String nome = String.valueOf(tabela.getValueAt(linha, 1));
String tamanho = String.valueOf(tabela.getValueAt(linha, 2));
FrameNovaFazenda nova = new FrameNovaFazenda();
nova.atualizarDados(id, nome, tamanho);
nova.setVisible(true);
} else { // excluir
System.out.println();

                } 
                
                
                
                
                
                
                
                
            }  
        }  
    });[/code]