ListSelectionListener не будет работать должным образом - PullRequest
0 голосов
/ 30 сентября 2019

Вот мой код. При включении слева направо возникла проблема.

        import javax.swing.*;
        import javax.swing.event.*;
        public class swingex7 extends JFrame{
        swingex7(){
        JFrame f = new JFrame("Table Example");  
        String row[][]= {{"101","Hein Htet","10000000"},{"102","Hein Htet1","20000000"},{"103","Hein 
        Htet2","30000000"}};
        String column[]= {"Id","Name","Salary"};
        final JTable jt = new JTable(row,column);
        jt.setCellSelectionEnabled(true);
        ListSelectionModel lsm = jt.getSelectionModel();
        lsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        lsm.addListSelectionListener(new ListSelectionListener() {      
            @Override
            public void valueChanged(ListSelectionEvent e) {    
                String data=null;
                int[] rows=jt.getSelectedRows();
                int[] columns = jt.getSelectedColumns();
                for(int i=0;i<rows.length;i++) {
                    for(int j=0;j<columns.length;j++) {
                        data = (String)jt.getValueAt(rows[i], columns[j]);
                    }
                }               
                System.out.println("Table element seleted is "+data);
            }   
         });

         JScrollPane js = new JScrollPane(jt);
         f.add(js);
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         f.setSize(400, 400);
         f.setVisible(true);
     }
         public static void main (String[]args) {
         new swingex7();
     }
     }

При выполнении сеанса слева направо возникла проблема. Я также хочу выводить только один раз за действие.

1 Ответ

1 голос
/ 30 сентября 2019

В коде есть 2 проблемы.

1. Первая проблема - ListSelectionListener вызывается 2 раза при щелчке мыши и при отпускании мыши. Но вместо этого, если вы можете добавить MouseListener в ваш JTable, как показано ниже.

MouseListener tableMouseListener = new MouseAdapter() {

                  @Override
                  public void mouseReleased(MouseEvent e) {
                      String data = null;
                      int[] rows = jt.getSelectedRows();
                      int[] columns = jt.getSelectedColumns();
                      for (int i = 0; i < rows.length; i++) {
                            for (int j = 0; j < columns.length; j++) {
                                data = (String) jt.getValueAt(rows[i], columns[j]);
                                System.out.println("Table element selected is " + data);
                            }
                      }
                  }
               };
               jt.addMouseListener(tableMouseListener);

2. Второй вопрос - это место, где вы распечатали данные. Это должно быть внутри цикла. В противном случае данные будут перезаписываться на каждой итерации цикла, и будет напечатано только последнее значение.

for (int i = 0; i < rows.length; i++) {
    for (int j = 0; j < columns.length; j++) {
            data = (String) jt.getValueAt(rows[i], columns[j]);
            System.out.println("Table element selected is " + data);
    }
}
...