JTableHeader, pegar coluna clicada

8 respostas
A

Galera, tenho uma table e um JTableHeader como abaixo:

tableHeader = tabelaCliente.getTableHeader();
tableHeader.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent e) {
           //aqui desejo saber qual a coluna clicada.
        }
    });

o que preciso agora é saber qual é a coluna que cliquei, um índice ou o texto da coluna. Alguém poderia me ajudar?

8 Respostas

dudaskank

Todos os eventos possuem um atributo source, que pode ser obtido com o método getSource(). Este objeto que é retornado é o objeto de onde partiu o evento, ou seja, nesse caso será o tableHeader.

Aí para pegar qual coluna não sei se você sabe algum método pra pegar, não sei se tem algo indicando no JTable isso, mas tem um método int columnAtPoint(Point point) que te retorna o índice da coluna em determinado ponto… talvez ajude. Tem um getPoint() nesse evento aí também…

flw

R

skank, e como faço para pegar a linha e a coluna de uma célula clicada?

T+

dudaskank

o JTable tem columnAtPoint e rowAtPoint, chamando os dois você consegue saber a coluna e a linha.

R

vc tem algum exemplo usando esses metodos?

dudaskank

infelizmente agora não, mas em breve coloco um por aqui…

flw

dudaskank

Pronto, agora tenho um, segue minha classe de teste:

package teste.guj;

import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class TesteJTableComVariasLinhas extends JFrame implements MouseListener {
	private static final long serialVersionUID = 1L;
	JTable table;
	JLabel label;

	public TesteJTableComVariasLinhas(int rows) {
		super();
		setTitle(getClass().toString());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JScrollPane pane;
		table = new JTable(getData(rows), getColumns());
		table.addMouseListener(this);
		pane = new JScrollPane(table);
		getContentPane().add(pane);
		label = new JLabel("-");
		getContentPane().add(label, BorderLayout.SOUTH);
		pack();
	}

	private Vector getData(int rows) {
		Vector data = new Vector();
		Vector row;
		for (int i = 0; i < rows; i++) {
			row = new Vector();
			row.add("Linha " + i);
			data.add(row);
		}
		return data;
	}

	private Vector getColumns() {
		Vector columns = new Vector();
		columns.add("Linha");
		return columns;
	}

	public static void main(String[] args) {
		new TesteJTableComVariasLinhas(2500).setVisible(true);
	}

	public void mouseClicked(MouseEvent e) {
		int coluna = table.columnAtPoint(e.getPoint());
		int linha = table.rowAtPoint(e.getPoint());
		label.setText("Coluna: " + coluna + ", Linha: " + linha);
	}

	public void mouseEntered(MouseEvent e) {
	}

	public void mouseExited(MouseEvent e) {
	}

	public void mousePressed(MouseEvent e) {
	}

	public void mouseReleased(MouseEvent e) {
	}
}
R

valew skank, isso resolveu meu problema…
valew

S

Aproveitando esse tópico, e se este header tiver um RowSort, como eu poderia verificar o estado deste header?

Se ele está em ASCENDING,DESCENDING ou UNSORTED?

Como eu poderia verificar esse estado ao clicar no header?

Criado 12 de julho de 2006
Ultima resposta 19 de ago. de 2009
Respostas 8
Participantes 4