Я создаю программу, в которой я могу искать элементы в базе данных.
Чтобы отслеживать время использования программы, я добавляю счетчик. Поэтому каждый раз, когда кто-то нажимает кнопку или определенную строку, счетчик становится равным +1, и я вижу, сколько раз программа используется в нашей компании.
Для каждой кнопки она работает так, как и должна, за исключением той, где она не кнопка, а ListSelectionListener, каждый раз, когда я нажимаю на ячейку в моей JTable. он выполняет действие дважды, и счет увеличивается на 2 вместо одного.
Я не могу понять, почему он выполняет это дважды (я добавил несколько команд печати, чтобы проверить, где повторяется код, но он повторяет все это)
table = new JTable();
table.setFillsViewportHeight(true);
table.setColumnSelectionAllowed(true);
table.setCellSelectionEnabled(true);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener () {
public void valueChanged(ListSelectionEvent event) {
if(table.getSelectedRow() > -1){
String temp =table.getValueAt(table.getSelectedRow(),table.getSelectedColumn()).toString();
LBL_Test.setText(temp);
connect.setTable_search_count1(gebruiker_keuze.getGebruiker());
System.out.println("a");
if(temp.contains("Ifc")){
System.out.println("b");
connect.Connect_Double_Table(temp, table_1, table_2,
gebruiker_keuze.getGebruiker(),
connect.getTable_search_count1(),
"Table_search_count1_string");
System.out.println("Match gevonden : tabel ingevoerd");
}else{
System.out.println("Geen match gevonden ");
}
}
}
});
scrollPane.setViewportView(table);
В коде я использую connect
для ссылки на класс, который подключается к базе данных.
Этот класс выглядит так:
public void Connect_Double_Table(String query_invoer, JTable table_invoer,JTable table_invoer2,
String gebruiker_invoer, int count_invoer, String BTN_count_string) {
connection();
String temp = null;
try{
con = DriverManager.getConnection(host,Username,Password);
String q1 = "SELECT TypeEntitie FROM typeentities WHERE Typeentitie = '" + query_invoer + "';";
ps = con.prepareStatement(q1);
rs = ps.executeQuery();
table_invoer.setModel(DbUtils.resultSetToTableModel(rs));
String q2 = "SELECT id FROM typeentities WHERE typeentitie = '" + query_invoer + "';";
ps1 = con.prepareStatement(q2);
rs1 = ps1.executeQuery();
while(rs1.next()){
temp = rs1.getString(1);
}
String q3 = "SELECT TypeEnumerations_sub FROM typeenumerations where id_TypeEntities = '" + temp + "';" ;
ps2 = con.prepareStatement(q3);
rs2 = ps2.executeQuery();
table_invoer2.setModel(DbUtils.resultSetToTableModel(rs2));
if(BTN_count_string == "pulldown_1"){
count_invoer +=1;
String q = "UPDATE gebruikers_HFB SET pulldown_1 = ? WHERE gebruiker = ?;";
ps3 = con.prepareStatement(q);
ps3.setInt(1, count_invoer);
ps3.setString(2, gebruiker_invoer);
ps3.executeUpdate();
Pulldown_Count1 = count_invoer;
con.close();
}if(BTN_count_string == "Table_search_count1_string"){
count_invoer +=1;
String q = "UPDATE gebruikers_HFB SET Table_search_count1 = ? WHERE gebruiker = ?;";
ps4 = con.prepareStatement(q);
ps4.setInt(1, count_invoer);
ps4.setString(2, gebruiker_invoer);
ps4.executeUpdate();
Table_search_count1 = count_invoer;
con.close();
}if(BTN_count_string == "Table_search_count2_string"){
count_invoer +=1;
String q = "UPDATE gebruikers_HFB SET Table_search_count2 = ? WHERE gebruiker = ?;";
ps4 = con.prepareStatement(q);
ps4.setInt(1, count_invoer);
ps4.setString(2, gebruiker_invoer);
ps4.executeUpdate();
Table_search_count2 = count_invoer;
con.close();
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
}
Странная вещь, я использую ListSelectionListener на другой таблице в той же программе, и всякий раз, когда я нажимаю там, он выполняет это только один раз.
эта часть выглядит так:
table_1 = new JTable();
table_1.setFillsViewportHeight(true);
table_1.getSelectionModel().addListSelectionListener(new ListSelectionListener () {
public void valueChanged(ListSelectionEvent event) {
if(table_1.getSelectedRow() > -1){
String temp =table_1.getValueAt(table_1.getSelectedRow(),table_1.getSelectedColumn()).toString();
connect.setPulldown_count1(gebruiker_keuze.getGebruiker());
connect.Connect_Double_Table(temp, table_1, table_2,
gebruiker_keuze.getGebruiker(),
connect.getTable_search_count2(),
"Table_search_count2_string");
}
}
});
Я действительно потерян на этом, кто-нибудь может помочь?