Evento no jTable

5 respostas
juliocesarss

Gostaria de saber como eu coloco um evento de click no nome da coluna de um jTable.

Como mostra na imagem:

5 Respostas

lina

Oi,

Eu tenho esse código guardado. Espero que ajude:

public void mouseClicked(MouseEvent evt) {
    JTable table = ((JTableHeader)evt.getSource()).getTable();
    TableColumnModel colModel = table.getColumnModel();
    
    // índice da coluna cujo titulo foi clicado
    int vColIndex = colModel.getColumnIndexAtX(evt.getX());
    int mColIndex = table.convertColumnIndexToModel(vColIndex);
    
    if(vColIndex == -1) {
      return;
    }
    
    System.out.println("O clique ocorreu no titulo 
       da coluna com indice " + mColIndex);
  }

Tchauzin!

juliocesarss

Deu certo não.

Eu clikei no “Nome” mas nada ocorreu, dai dei um duplo clik em uma linha qualquer e ativouo evento mas deu erro

Exception occurred during event dispatching:
java.lang.ClassCastException: javax.swing.JTable cannot be cast to javax.swing.table.JTableHeader
	at cadastroability.FormPesquisa.jTable1MouseClicked(FormPesquisa.java:167)
	at cadastroability.FormPesquisa.access$000(FormPesquisa.java:10)
	at cadastroability.FormPesquisa$2.mouseClicked(FormPesquisa.java:89)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6266)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6028)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
	at java.awt.Dialog$1.run(Dialog.java:1046)
	at java.awt.Dialog$3.run(Dialog.java:1098)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.Dialog.show(Dialog.java:1096)
	at java.awt.Component.show(Component.java:1563)
	at java.awt.Component.setVisible(Component.java:1515)
	at java.awt.Window.setVisible(Window.java:842)
	at java.awt.Dialog.setVisible(Dialog.java:986)
	at cadastroability.FormPesquisa$3.run(FormPesquisa.java:195)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Obs. eu uso o Netbeans, eu crei minha tabela através da aplicação.

Tentei trocar o código subistituindo o “table” pela minha tabela dessa forma:

jTable1 = ((JTableHeader) evt.getSource()).getTable();
        TableColumnModel colModel = jTable1.getColumnModel();

        // índice da coluna cujo titulo foi clicado  
        int vColIndex = colModel.getColumnIndexAtX(evt.getX());
        int mColIndex = jTable1.convertColumnIndexToModel(vColIndex);

        if (vColIndex == -1) {
            return;
        }

        System.out.println("O clique ocorreu no titulo da coluna com indice " + mColIndex);

Mas também não deu certo

lina

Oi,

Código completo! Só não lembro de onde peguei! Faz muito tempo!

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import javax.swing.event.*;

public class Estudos extends JFrame{
  public Estudos(){
    super("Exemplo de uma tabela simples");
		
    // colunas da tabela
    String[] colunas = {"Cidade", "Estado", "Habitantes"};
		
    // conteúdo da tabela	
    Object[][] conteudo = {
        {"Goiânia", "GO", "43.023.432"},
        {"São Paulo", "SP", "5.343.234"},
        {"Rio de Janeiro", "RJ", "6.434.212"},
        {"Jussara", "GO", "87.454"},
        {"Barra do Garças", "MT", "64.344"}
    };
        
    // constrói a tabela
    final JTable tabela = new JTable(conteudo, colunas);
    tabela.setPreferredScrollableViewportSize(new Dimension(350, 50));
	
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
	
    JTableHeader header = tabela.getTableHeader();
    header.addMouseListener(new ColumnHeaderListener());
			
    JScrollPane scrollPane = new JScrollPane(tabela);
    c.add(scrollPane);
    	
    setSize(400, 300);
    setVisible(true);
  }
	
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

class ColumnHeaderListener extends MouseAdapter {
  public void mouseClicked(MouseEvent evt) {
    JTable table = ((JTableHeader)evt.getSource()).getTable();
    TableColumnModel colModel = table.getColumnModel();
    
    // índice da coluna cujo titulo foi clicado
    int vColIndex = colModel.getColumnIndexAtX(evt.getX());
    int mColIndex = table.convertColumnIndexToModel(vColIndex);
    
    if(vColIndex == -1) {
      return;
    }
    
    System.out.println("O clique ocorreu no titulo 
       da coluna com indice " + mColIndex);
  }
}

Tchauzin!

juliocesarss

ahh legal… o seu funcionou belezinha…

O meu ainda não… to tentando adptar aqui

atilaraphael

Olá, tem um modelo bem simples no site da oracle

http://download.oracle.com/javase/tutorial/uiswing/components/table.html#sorting

Mas eu fiz de outra maneira, eu sobrescrevi a classe AbstractTableModel e criei meu próprio table model, é muito fácil, fica bem organizado e genérico, o reaproveitamento de código é o meu foco.

Se você quiser posto o código aqui.

Criado 20 de julho de 2011
Ultima resposta 20 de jul. de 2011
Respostas 5
Participantes 3