2012-01-13 62 views
2

当我们从同一行中选择时,设置为监听单元格选择事件的JTable不会生成事件,如果我选择除选定单元格之外的其他行,Jtable引发事件。设置为监听单元格选择事件的Jtable不会触发事件

这是代码... 示例当我选择单元格“row0 col0”,然后尝试选择同一行中的任何其他单元格时,jtable将不会触发任何事件, 以便触发事件“行0第1栏”细胞,我必须选择在第2行的任何细胞,并且具有点击“排0 COL1”细胞

public class test_jtable_event extends javax.swing.JFrame { 

    /** Creates new form test_jtable_event */ 
    public test_jtable_event() { 
     initComponents(); 
    } 



// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    jScrollPane1 = new javax.swing.JScrollPane(); 
    jTable1 = new javax.swing.JTable(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jTable1.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {"row 0 column1", "row 0column 2", "row 0 column 3", "row 0column4"}, 
      {"row 1 column 0", "row 1 column 2", "row 1 column 2", "row 1 column 2"}, 
      {null, null, null, null}, 
      {null, null, null, null} 
     }, 
     new String [] { 
      "Title 1", "Title 2", "Title 3", "Title 4" 
     } 
    )); 
    jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() 
     { 
      public void valueChanged(ListSelectionEvent e) 
      { 
       System.out.println(e.getSource()); 
       System.out.println(jTable1.getSelectedColumn()); 
       System.out.println(jTable1.getSelectedRow()); 
      } 

     }); 
     jTable1.setCellSelectionEnabled(true); 
     jScrollPane1.setViewportView(jTable1); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addContainerGap(13, Short.MAX_VALUE) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(25, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

public static void main(String args[]) { 

    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(test_jtable_event.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(test_jtable_event.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(test_jtable_event.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(test_jtable_event.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 

      new test_jtable_event().setVisible(true); 
     } 
    }); 
} 
// Variables declaration - do not modify 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JTable jTable1; 
// End of variables declaration 
} 
+2

请学习Java命名约定并严格遵守。 – kleopatra 2012-01-13 11:12:39

回答

5

行和列选择由不同的选择模型来控制:

  • row:table.getSelectionModel()
  • 柱:table.getColumnModel()getSelectionModel()

你有你的听众注册到两个