ListSelectionListener делает двойное событие одним щелчком мыши - PullRequest
0 голосов
/ 12 сентября 2018

Я создаю программу, в которой я могу искать элементы в базе данных. Чтобы отслеживать время использования программы, я добавляю счетчик. Поэтому каждый раз, когда кто-то нажимает кнопку или определенную строку, счетчик становится равным +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");
            }
        }
    });

Я действительно потерян на этом, кто-нибудь может помочь?

...