【发布时间】:2022-01-05 23:09:21
【问题描述】:
我有以下示例 Java Swing JTable 应用程序:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class JTableListSelectionListener
{
public static void main(String[] a)
{
JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTable table;
String[] columnTitles={"A","B","C","D"};
Object[][] rowData={{"11","12","13","14"},{"21","22","23","24"},{"31","32","33","34"},{"41","42","43","44"}};
table=new JTable(rowData,columnTitles);
table.setCellSelectionEnabled(true);
ListSelectionModel cellSelectionModel=table.getSelectionModel();
cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cellSelectionModel.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
String selectedData=null;
int[] selectedRow=table.getSelectedRows();
int[] selectedColumns=table.getSelectedColumns();
for (int i=0;i<selectedRow.length;i++)
for (int j=0;j<selectedColumns.length;j++)
selectedData=(String)table.getValueAt(selectedRow[i],selectedColumns[j]);
System.out.println("Selected: "+selectedData);
}
});
frame.add(new JScrollPane(table));
frame.setLocationRelativeTo(null);
frame.setSize(300,200);
frame.setVisible(true);
}
}
如果我点击同一行,它不会响应:
如果我点击“12”然后点击“13”或者先点击“21”然后点击“23”,为什么?
-
如何解决这个问题,无论我按什么顺序点击,它总是会输出那个单元格中的值?
-
如何判断我点击的是鼠标左键还是鼠标右键?
【问题讨论】:
-
“如果我点击同一行,它不会响应:12 -> 13 或 21 -> 23” - 这不清楚。什么是“同一行”?
-
添加了更多细节。
-
JTable不是电子表格。您可以编写JTable代码,使其类似于电子表格,但需要大量自定义代码。 Stack Overflow 答案的自定义代码太多。
标签: java swing jtable listselectionlistener