[RESOLVIDO]Evento do Click na JTable

4 respostas
S

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!?

4 Respostas

S

Depois de procurar muito descobri isso:

Porem como eu pego o valor da linha?
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));
                }  
            }  
        });
        
    }

vllw =D

G

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?

S
opa, implementei desse jeito..
linha = tabela.getSelectedRow();

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

S

segue meu metodo resolvido:

=D
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();
                    
                    } 
                    
                    
                    
                    
                    
                    
                    
                    
                }  
            }  
        });
Criado 6 de novembro de 2012
Ultima resposta 6 de nov. de 2012
Respostas 4
Participantes 2