【问题标题】:Determine Which JTable Cell is Clicked确定单击了哪个 JTable 单元格
【发布时间】:2011-06-15 07:11:36
【问题描述】:

当用户单击JTable 上的单元格时,我如何确定被单击单元格的行和列?我如何在JLabel 中显示这些信息?

【问题讨论】:

    标签: java swing jtable listener


    【解决方案1】:

    我发现当列被隐藏/重新排序时columnAtPoint 返回可见列索引,这不是我需要的。对我有用的代码是

    int row = theTable.convertRowIndexToModel(theTable.rowAtPoint(event.getPoint()));
    int col = theTable.convertColumnIndexToModel(theTable.columnAtPoint(event.getPoint()));
    

    【讨论】:

      【解决方案2】:

      它对我有用!!!

      jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
      @Override
       public void mouseClicked(java.awt.event.MouseEvent evt) {
          int row = jTable1.rowAtPoint(evt.getPoint());
          int col = jTable1.columnAtPoint(evt.getPoint());
          if (row >= 0 && col >= 0) {
      
      
          }
       }
      });
      

      【讨论】:

      • 此解决方案承认点击 JTable 组件中的空白区域的可能性。
      【解决方案3】:

      现有答案有效,但如果您不启用单元格选择,还有一种替代方法可能会更好。在您的 MouseListener 中,执行以下操作:

      public void mouseClicked(java.awt.event.MouseEvent event) {
          int row = theTable.rowAtPoint(event.getPoint());
          int col = theTable.columnAtPoint(event.getPoint());
          // ...
      

      【讨论】:

      • 支持这个答案。使用右键单击时,getSelectedRow() 或 getSelectedColumn() 不起作用。
      • 喜欢(几乎)所有的 Java Swing“解决方案”,sorcks:很烂,但很有效。
      【解决方案4】:

      您可以在 JTable 上使用以下方法来检索所选单元格的行和列:

      int rowIndex = table.getSelectedRow();
      int colIndex = table.getSelectedColumn();
      

      并在表中添加SelectionListener 以在选择表时捕获事件。

      【讨论】:

      • +1,除了 ListSelectionListener 添加到 ListSelectionModel,而不是 JTable。
      • 您可能还想在 JTable 的 ColumnModel 中添加一个 ListSelectionListener,以防所选行保持不变但所选列发生变化:table.getColumnModel().getSelectionModel().addListSelectionListener(...);跨度>
      【解决方案5】:

      你试过addMouseListener()吗?我希望你正在使用 Swing 的 JTable。

      【讨论】:

      • 是的,我正在使用 Swing,不,我没有尝试过 addMouseListener。将立即尝试...谢谢。
      • 这有点令人困惑,您能否提供一些指示或链接?我一直在寻找,没有结果。我只想将所选 jTable CELL 的行和列添加到 jLabel 中.....
      • 我认为这不是解决问题的好方法。 MouseEvent 不会那么容易转换为列和行。请参阅 Develman 的回答。
      • 我并不是想将鼠标监听器添加到表本身。通常表格单元由表格模型管理的一些摆动组件表示。我建议给这个组件添加监听器。
      • -1,通过绘制组件的图像来表示单元格,称为渲染器。您不能向渲染器添加侦听器,因为它不是真正的组件。如果您在哪里使用 MouseListener,它确实需要添加到表中,但没有必要这样做,因为这是 ListSelectionListener 的目的。
      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多