Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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 监听器需要什么来检测JTable单元格是否被双击,从而切换到编辑模式?_Java_Swing_Jtable - Fatal编程技术网

Java 监听器需要什么来检测JTable单元格是否被双击,从而切换到编辑模式?

Java 监听器需要什么来检测JTable单元格是否被双击,从而切换到编辑模式?,java,swing,jtable,Java,Swing,Jtable,双击Swing中的可编辑JTable单元格时,该单元格将进入某种“编辑模式”,其中会出现插入符号,单元格周围会出现轮廓。我的问题是,我需要使用什么样的侦听器来检测编辑模式的更改 明确地说,我不是在寻找检测单元格值何时更改的侦听器,也不是在寻找双击侦听器,而是在双击可编辑单元格时发生的初始切换到编辑模式 那么,这个变化的监听器叫什么?它是否存在,或者我是否需要修改其他侦听器 谢谢,您需要将鼠标侦听器添加到表对象。在mousePressed()方法中,检查单击计数是否为2。这应该可以解决您的问题 y

双击Swing中的可编辑JTable单元格时,该单元格将进入某种“编辑模式”,其中会出现插入符号,单元格周围会出现轮廓。我的问题是,我需要使用什么样的侦听器来检测编辑模式的更改

明确地说,我不是在寻找检测单元格值何时更改的侦听器,也不是在寻找双击侦听器,而是在双击可编辑单元格时发生的初始切换到编辑模式

那么,这个变化的监听器叫什么?它是否存在,或者我是否需要修改其他侦听器


谢谢,

您需要将鼠标侦听器添加到表对象。在mousePressed()方法中,检查单击计数是否为2。这应该可以解决您的问题

yourTable.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
        JTable table =(JTable) e.getSource();
        Point p = e.getPoint();
        int row = table.rowAtPoint(p);
        if (e.getClickCount() == 2) {

        }
    }
});

您可以使用MouseClick事件查找单击次数

示例代码

jtable.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent me) {
        JTable table =(JTable) me.getSource();
        if (me.getClickCount() == 2) {

         int row = target.getSelectedRow();
         int column = target.getSelectedColumn(); 

         // add your logic here based on which row and column
        }
    }
});

这可能会有帮助。要了解更多详细信息,最好的方法是侦听属性“tableCellEditor”。因此,您可以轻松获取已激活/停用的编辑器

table.addPropertyChangeListener("tableCellEditor", new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getNewValue() == null) {
            // editing stopped
        } else {
            // editing started
        }
    }
};

if(e.getClickCount()==2){
而不是
if(me.getClickCount()==2){
;)这在某些情况下可能会起作用,但同时有时单元格可以编辑,有时不可以,所以双击并不一定保证我进入了编辑模式。只做一个onEditMode监听器似乎会“更干净”,但我想我要找的监听器可能根本不存在不要当心,单元格编辑器可以更改编辑的方式和时间,因此它们不总是可以通过双击来编辑-这意味着可以通过按enter键或甚至单个键来激活click@MadProgrammer是的,这是非常不一致的,并没有真正达到我想要的,只是小心,细胞编辑器c一个改变,如何和何时变成可编辑的,所以他们不总是成为可编辑的双击-这意味着,可以通过按下回车键,甚至一个单一的点击激活完美,这正是我想要实现的效果,非常感谢!