Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ListSelection侦听器未触发事件_Java_Swing - Fatal编程技术网

Java ListSelection侦听器未触发事件

Java ListSelection侦听器未触发事件,java,swing,Java,Swing,有人知道为什么吗 System.out.println(e.getFirstIndex()); System.out.println(e.getLastIndex()); 两者都不做什么?我的侦听器是否未正确注册?我试图知道某个单元格何时被选中,并对其进行处理。类似于通过鼠标或按键选择该单元格时为其设置默认文本 package VLGui; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.

有人知道为什么吗
System.out.println(e.getFirstIndex()); System.out.println(e.getLastIndex()); 两者都不做什么?我的侦听器是否未正确注册?我试图知道某个单元格何时被选中,并对其进行处理。类似于通过鼠标或按键选择该单元格时为其设置默认文本

package VLGui;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.*;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.Timer;
import javax.swing.table.*;

import VLCore.cellSelectedListener;


public class mainFrame extends JFrame{

    private JLabel lblTime;
    private Vector columnName = new Vector();
    private Vector tblData = new Vector();
    private JTable JTbl;
    private Timer timer = new Timer(1000,new MyListener());

    private JPanel topPnl,cenPnl,btmPnl;
    private Calendar time;

    private Object[] columnNames = {"Veh No.","Description","Time In","Time Out"};

    public mainFrame()
    {
        timer.start();
        //jtable settings
        JTbl = new JTable(new DefaultTableModel(columnNames,1));
        JTbl.setPreferredScrollableViewportSize(JTbl.getPreferredSize());
        JTbl.setFillsViewportHeight(true);
        JTbl.setCellSelectionEnabled(false);
        JTbl.setColumnSelectionInterval(0,0);
        JTbl.setRowSelectionInterval(0,0);
        JTbl.getSelectionModel().addListSelectionListener(new cellSelectedListener(JTbl));
        //Settings
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Vehicle Log");
        setSize(500,1000);
        setVisible(true);

        //Dec
        JScrollPane tableContainer = new JScrollPane(JTbl);
        topPnl = new JPanel();
        cenPnl = new JPanel();
        btmPnl = new JPanel();
        lblTime = new JLabel();


        //Adding Components
        topPnl.add(lblTime,BorderLayout.CENTER);
        cenPnl.add(tableContainer);


        getContentPane().add(topPnl,BorderLayout.NORTH);
        getContentPane().add(cenPnl,BorderLayout.CENTER);
        //add(btmPnl);

    }

    public class MyListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            time = Calendar.getInstance();
            lblTime.setText(time.getTime().toString());
            lblTime.repaint();
        }

    }
}




package VLCore;

import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class cellSelectedListener implements ListSelectionListener {
private JTable jTbl;

    public cellSelectedListener()
    {

    }

    public cellSelectedListener(JTable tbl)
    {
        jTbl = tbl;
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        ListSelectionModel lsm = (ListSelectionModel)e.getSource();
        System.out.println(e.getFirstIndex());
        System.out.println(e.getLastIndex());
    }

}

问题是,该行已被选中

表选择模型与行的选择更改相关

如果您更改注册侦听器的顺序,如下所示

JTbl.getSelectionModel().addListSelectionListener(new cellSelectedListener(JTbl));
JTbl.setColumnSelectionInterval(0, 0);
JTbl.setRowSelectionInterval(0, 0);
您将看到行选择的更改

更新代码审查…

通常,这
JTbl.setPreferredScrollableViewportSize(JTbl.getPreferredSize())不是一个好主意。你真的想让滚动窗格来做这些决定。如果确实想影响表的宽度,可以更改列大小


Java命名约定建议所有实例变量都以小写字符开头,所以
JTbl
将变成
JTbl
,所有类都以大写字母开头,所以
mainFrame
将变成
mainFrame
…很小的事情,但这是人们真正习惯的。

。删除了我的答案以避免混淆。@Melnocholson进行了一些挖掘和WTF?;)是的。我发现的问题不是问题的核心。