Gostaria de saber como eu coloco um evento de click no nome da coluna de um jTable.
Como mostra na imagem:

Gostaria de saber como eu coloco um evento de click no nome da coluna de um jTable.
Como mostra na imagem:

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!
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
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!
ahh legal… o seu funcionou belezinha…
O meu ainda não… to tentando adptar aqui
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.