2016-05-15 4 views
0

Ich schreibe ein kleines Programm, das JTable (in diesem Fall t1) verwendet und einen ListSelectionListener implementiert, indem ich durch Klicken auf eine Zeile die Daten in die Datenbank lege (ich benutze mysql und Verbindung über JDBC).getValueAt() verdoppelte Einträge in die Datenbank

// t1 is a JTable 
t1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
t1.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 

    @Override 
    public void valueChanged(ListSelectionEvent e) { 

      int row = t1.getSelectedRow(); 

      try { 
       String sql = "INSERT INTO xxx (x1, x2, x3) VALUES(?,?,?)"; 

       PreparedStatement pst = conn.prepareStatement(sql); 

       int col1 = (int)t1.getValueAt(row, 0); 
       int col2 = (int)t1.getValueAt(row, 1); 
       int col3 = (int)t1.getValueAt(row, 2); 

       pst.setLong(1, col1); 
       pst.setLong(2, col2); 
       pst.setLong(3, col3); 

       pst.addBatch(); 

       pst.executeBatch(); 
     } 

      catch (SQLException e1) { 

      e1.printStackTrace(); 
     } 
    } 
}); 

Alles funktioniert gut, außer dass jede Zeile zweimal in der Datenbank abgelegt wird. Wenn ich zum Beispiel die dritte Zeile auswähle, bekomme ich sie zweimal in der Datenbank. Es sieht so aus, als ob es einen Eintrag beim Drücken der Maus und einen beim Loslassen macht, es erscheint nicht, wenn ich Tastaturpfeile verwende. Kann mir jemand helfen?

Antwort

1

Bitte benutzen Sie das folgende Logik

ListSelectionModel selectionModel = table.getSelectionModel(); 
    selectionModel.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent e) { 
      if (e.getValueIsAdjusting()){ 
       return; 
      } 
      if (e.getSource() == table.getSelectionModel() && 
       table.getRowSelectionAllowed()) { 
       int selected = table.getSelectedRow(); 
       System.out.println("Column 1 : " + table.getValueAt(selected, 0)); 
       System.out.println("Column 2 : " + table.getValueAt(selected, 1)); 
       System.out.println("Column 3 : " + table.getValueAt(selected, 2)); 
      } 
     } 
    }); 

ich auf diesem Posten sah java-listselectionlistener-interface-with-keyboard

Verwandte Themen