getPoint só pega a coluna certa, a linha retorna -1

4 respostas
B

Galera,

Estou querendo pegar a posição de determinada célula numa tabela, porém o getPoint do mouseClicked, me retorna a coluna corretamente, porém a linha ele sempre me retorna -1.

jXTableRamaisPorGrupo.addMouseListener(new MouseAdapter()
{
    public void mouseClicked(MouseEvent e)
    {                      
        // Pegando a posição na tabela do ramal
        Point p = e.getPoint();
        int col = jXTableRamaisPorGrupo.columnAtPoint(p);
        int row = jXTableRamaisPorGrupo.rowAtPoint(p);  

        System.out.println("Col: " + col + " | " + "Row: " + row);

        // Pegando o valor desse ramal                            
        String ramal = tableModel.getValueAt(row, col).toString();

        // Pegando apenas o número do ramal  
        String ramalDestino = ramal.substring(14, ramal.lastIndexOf("<br>"));

        // Passa o ramalDestino para o método verifRamalDest, se o ramal puder participar de
        // uma ligação, a operação disca / transfere é chamada
        DiscaTransfereController discaTransfere = new DiscaTransfereController();
        discaTransfere.verifRamalDest(ramalDestino, "jXTable");

    }
});

Já tentei usando os métodos getSelectedColumn() e getSelectedRow(), mas tbém não deu.
Me ajudem, por favor? Valeu :wink:

4 Respostas

davidbuzatto

Porque getSelectedColumn() e getSelectedRow() não funcionaram?

B

Ambos retornam -1.

davidbuzatto

Muito estranho isso… Como está configurada a política de seleção das linhas da tabela? A tabela está ativa?

Matheus_Tardivo
Use um ListSelectionListener:
final JTable tabela = new JTable();
tabela.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
	public void valueChanged(ListSelectionEvent e) {
		int selectedRow = tabela.getSelectedRow();
		int selectedColumn = tabela.getSelectedColumn();
		// ...
	}
});
Segue um exemplo completo para você entender melhor:
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class TesteTabela extends JFrame {

    public TesteTabela() {
        super("Teste Tabela");

        final JTextField text = new JTextField();
        text.setEditable(false);
        getContentPane().add(text, BorderLayout.PAGE_END);

        String[] columnNames = { "First Name", "Last Name", "Sport", "# of Years", "Vegetarian" };

        final Object[][] data = { { "Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false) },
                { "Alison", "Huml", "Rowing", new Integer(3), new Boolean(true) },
                { "Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false) },
                { "Sharon", "Zakhour", "Speed reading", new Integer(20), new Boolean(true) },
                { "Philip", "Milne", "Pool", new Integer(10), new Boolean(false) } };

        final JTable tabela = new JTable(data, columnNames);
        tabela.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                int selectedRow = tabela.getSelectedRow();
                int selectedColumn = tabela.getSelectedColumn();

                if (selectedRow < 0) {
                    text.setText("");
                } else {
                    text.setText(String.format("data[%d][%d]: %s", selectedRow, selectedColumn,
                        data[selectedRow][selectedColumn].toString()));
                }
            }
        });

        getContentPane().add(tabela);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);
        pack();
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        new TesteTabela().setVisible(true);
    }
}
Alguns links: :arrow: How to Use Tables :arrow: Listening for Selection Events in a JTable Component
Criado 30 de janeiro de 2008
Ultima resposta 31 de jan. de 2008
Respostas 4
Participantes 3