我是Java编程的新手。我需要获取所选列和行的索引。我得到-1作为列和行的选定索引。我已经找到了解决方案,但没有找到任何令人满意的结果。
我的代码如下:
private void deleteProductButtonActionPerformed(java.awt.event.ActionEvent evt) {
DefaultTableModel tableModel = (DefaultTableModel) this.productDisplaTable.getModel();
JTable table = new JTable(tableModel);
int selectedRowIndex = table.getSelectedRow();
int selectedColIndex = table.getSelectedColumn();
System.out.println(selectedRowIndex );
System.out.println(selectedColIndex);
}
答案 0 :(得分:3)
在用户甚至可以与JTable进行交互之前,您是否在显示JTable之前检查是否选择了一行。
相反,为什么不在ActionListener或其他侦听器中使用该代码,以便用户至少有机会选择某些内容?这表明您可能对事件驱动编程的工作方式存在误解,需要更多地研究这些概念。
答案 1 :(得分:3)
是什么让您认为创建新的JTable
会有任何选定的行或列
JTable table = new JTable(tableModel); //???
尝试使用实际上对用户可见的表格
答案 2 :(得分:2)
在您的代码中,您可以创建一个新的JTable,但不要将此组件添加到任何容器中。因此,它永远不会被看见,也不会选择行或列。
现在,虽然我们可以在Swing中动态添加组件,但我们会在顶层容器(窗口)可见之前放置所有组件。在这种情况下,您应该在初始化组件时放置表格(不要忘记滚动窗格),并在按下按钮时执行您需要执行的操作。
另一方面,我不确定你想要达到什么目标。我的意思是你已经有一个名为productDisplaTable
的表。如果要在该表中打印选定的行和列,请进行少许更改:
private void deleteProductButtonActionPerformed(java.awt.event.ActionEvent evt) {
//DefaultTableModel tableModel = (DefaultTableModel) this.productDisplaTable.getModel();
//JTable table = new JTable(tableModel);
int selectedRowIndex = this.productDisplaTable.getSelectedRow();
int selectedColIndex = this.productDisplaTable.getSelectedColumn();
System.out.println(selectedRowIndex );
System.out.println(selectedColIndex);
}
答案 3 :(得分:0)
感谢所有人花时间回复。 我从@ dic19的评论中得到了答案。 现在我清楚地看到了我正在做的错误。这是因为我缺乏Java编程知识。