这是我的代码。
从左到右删除时出现问题。

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

从左到右删除时出现问题。
我还希望每个动作仅输出一次。

最佳答案

代码中有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);
    }
}

关于java - ListSelectionListener无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58168426/

10-10 23:58