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

时间:2014-11-04 22:44:06

标签: java swing jtable

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

4 个答案:

答案 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编程知识。