The row index is always -1 displayed in JTable

I wrote this piece of code to get the row index, which I double-clicked by the user, but this always returns -1 for each row. Please solve the problem.

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;


public class A extends MouseAdapter {

    JFrame frame = new JFrame();
    Object data[][] = {{"1","Jahanzeb"},{"2","Ahmed"},{"3","Shaikh"}};
    String col[] = {"#","Names"};
    JTable table = new JTable(data,col);
    JScrollPane scroll = new JScrollPane(table);


    public static void main(String arg[]) {
        new A();
    }

    public A() {

        table.addMouseListener(this);
        table.setEnabled(false); // because table should not be editable
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scroll);
        frame.add(table);
        frame.setVisible(true);
    }


    public void mouseClicked(MouseEvent e) {
        if(e.getClickCount()==2)
            System.out.println(table.getSelectedRow());
    }

}
0
source share
3 answers

If your table is not included, you cannot select any row.

Think about it, you need to implement your own table model and set it to false.

DefaultTableModel tableModel = new DefaultTableModel(data, col)

    @Override
    public boolean isCellEditable(int row, int column) {
       return false;
    }
};

table.setModel(tableModel);
+1
source

For me, this code works fine.

public class A extends MouseAdapter {

    JFrame frame = new JFrame();
    Object data[][] = { { "1", "Jahanzeb" }, { "2", "Ahmed" },
            { "3", "Shaikh" } };
    String col[] = { "#", "Names" };
    JTable table = new JTable(data, col);
    JScrollPane scroll = new JScrollPane(table);

    public static void main(String arg[]) {
        new A();
    }

    public A() {

        table.addMouseListener(this);

        DefaultTableModel tableModel = new DefaultTableModel(data, col) {

            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };

        table.setModel(tableModel);

        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scroll);
        frame.add(table);
        frame.setVisible(true);
    }

    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() == 2)
            System.out.println(table.getSelectedRow());
    }

}
0
source

, Row mousevent.

public void mouseClicked(MouseEvent e) {
  JTable table = (JTable) e.getSource();
  int row = table.rowAtPoint(e.getPoint());
  int column = table.columnAtPoint(e.getPoint());
}
0

Source: https://habr.com/ru/post/1548277/


All Articles