Java 行索引出现-1始终在JTable中

Java 行索引出现-1始终在JTable中,java,swing,jtable,Java,Swing,Jtable,我已经编写了这部分代码,用于获取用户单击两次的行的索引,但是对于每一行,它总是返回-1。请解决这个问题 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 {

我已经编写了这部分代码,用于获取用户单击两次的行的索引,但是对于每一行,它总是返回-1。请解决这个问题

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());
    }

}

未启用表格时,不能选择任何行

我认为您需要实现自己的表模型,并将“可编辑”设置为false

DefaultTableModel tableModel = new DefaultTableModel(data, col)

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

table.setModel(tableModel);

对我来说,这段代码运行良好

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());
    }

}

您也可以在不依赖selectedRow的情况下获取单击的行,并使用mousevent

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