2012-01-13 1 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

ответ

5

строки и выбора столбца находятся под контролем различных моделей выбор:

  • строка: таблица.getSelectionModel()
  • колонок: table.getColumnModel() getSelectionModel()

вы должны зарегистрировать слушатель как