2012-01-13 17 views
2

リスンセル選択イベントを設定するJTableは、選択したセル以外の他の行を選択すると、同じ行から選択するとイベントを生成しません。イベントを発生させます。セル選択イベントをリッスンするように設定されたJtableはイベントを発生させません

これはコードです... 例 "row0 col0"セルを選択し、同じ行の他のセルを選択しようとすると、jtableはイベントを発生させません イベントを発生させるには「行0 COL 1」セルは、iが行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

行および列選択は異なる選択モデルによって制御される。

  • 行:table.getSelectionModel()
  • コラム:table.getColumnModel()getSelectionModel()

あなたは両方の

関連する問題