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