ListSelectionListener无法正常工作

时间:2019-09-30 12:58:15

标签: java swing jtable actionlistener

这是我的代码。 从左到右进行选择时出现问题。

        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 个答案:

答案 0 :(得分:1)

代码中有2个问题。

1。 第一个问题是单击鼠标并释放鼠标时,将两次调用ListSelectionListener。但是,如果您可以将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循环内。否则,将在循环的每次迭代中重写数据,并且仅打印最后一个值。

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);
    }
}