Jtable + AbstractTableModel + Evento com botão direito!

3 respostas
R

Tenho uma Jtable que extende um AbstractTableModel e preciso que no momento em que é clicado o botão direito em uma linha apareça uma opção em forma de menu, botão ou qualquer outra coisa e ao selecionar, o mesmo pegue o valor de um determinado campo!

Temos alguma forma simples de far isso?

3 Respostas

PauloBrito

O JTable não seleciona células quando você clica com o botão direito. Pra resolver isso, eu criei esta classe, baseado numa dica que achei na net. Veja abaixo. Eu custumo utilizá-la no construtor do JTable.

public class MinhaTabela extends JTable {

   public MinhaTabela() {
      addMouseListener(new SelectOnRightClickAdapter(this));
   }

}
/**
 * Código adaptado de http://stupidjavatricks.com/?p=12
 * @author Paulo Brito
 */
public class SelectOnRightClickAdapter extends MouseAdapter {

	private final JTable table;

	public SelectOnRightClickAdapter(JTable table) {
		this.table = table;
	}

	@Override
	public void mousePressed(MouseEvent e) {
		if (SwingUtilities.isRightMouseButton(e))
		{
			Point p = e.getPoint();
			int rowNumber = table.rowAtPoint(p);

			ListSelectionModel model = table.getSelectionModel();
			model.setSelectionInterval(rowNumber, rowNumber);
		}
	}
}
R

Ok!
Porém minha jtable é modelo extendido de um abstractablemodel!

Como eu usuaria a classe SelectOnRightClickAdapter, seria no meu modelo?

PauloBrito

Não entendi muito bem a afirmação…

Enfim… Em algum momento você cria um JTable, não cria? Então, logo depois de criar, adicione o listener. Algo parecido com isso:

(...)
   JTable table = new JTable();
   table.addMouseListener(new  SelectOnRightClickAdapter(this));
   (...)

Ou então no construtor do JFrame…

Criado 22 de julho de 2010
Ultima resposta 23 de jul. de 2010
Respostas 3
Participantes 2