Java jTable函数getSelectedRow(),getSelectedColumn()返回-1

Java jTable函数getSelectedRow(),getSelectedColumn()返回-1,java,swing,jtable,Java,Swing,Jtable,我是Java编程新手。我需要得到所选列和行的索引。我得到-1作为列和行的选定索引。我一直在寻找解决办法,但没有找到令人满意的办法 我的代码如下: private void deleteProductButtonActionPerformed(java.awt.event.ActionEvent evt) { DefaultTableModel tableModel = (Default

我是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);
} 

您正在检查在用户甚至可以与JTable交互之前,是否在JTable显示之前选择了一行


相反,为什么不将该代码放在ActionListener或其他侦听器中,以便用户至少有机会选择某些内容?这表明您可能对事件驱动编程的工作原理有误解,需要进一步研究这些概念。

是什么让您认为创建一个新的
JTable
会有任何选定的行或列

JTable table = new JTable(tableModel); //???

尝试使用用户实际可见的表,而不是在代码中创建新的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);
} 

谢谢大家花时间回复。 我从@dic19的评论中得到了答案。
现在我清楚地看到了我所犯的错误。这是因为我缺乏Java编程方面的知识

您没有选择任何内容-1表示未选择任何行。您确定要选择一行吗?单击一行,然后重试。您好,谢谢您的回复。我选择了一行、多行、多列,但仍返回-1。感谢您的回复。实际上,我在一个页面中按下delete按钮,该页面中的表已经存在,用户可以选择一个元素。然后他按下按钮。我确实对事件驱动编程感到困惑,这就是我困惑的地方。在UI中,有一个表,用户选择一个单元格,然后按Delete按钮。我给出的代码是deleteButtonActionPerformed。我需要获得用户选择的行索引和列索引。你能告诉我,为了得到这些索引,我需要做些什么吗?@user3509781那么你为什么要创建一个
JTable
的新实例,并从
productDisplaTable
的实例中传递
tableModel
TableModel
对数据进行建模,而不是对UID的状态进行建模。我从@dic19的评论中找到了答案(如下所示)。感谢您花时间回复。您好,我对TableModel和JTable实例感到困惑。“JTable table=newjtable(tableModel);”这句话我是盲目地从互联网上取下来的,只是想看看它是否有效。实际上,您的代码解决了这个问题。非常感谢。欢迎@user3509781。这就是从互联网上盲目复制代码的风险:你不知道自己在做什么。如果你是初学者,我建议你开始阅读Swing教程。有完整的工作示例帮助您理解这些概念。