繁体   English   中英

鼠标双击不起作用

[英]mouse double click is not working

我已经编写了这个java代码来检测鼠标左键双击,但是这段代码不起作用请帮忙。

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class B extends MouseAdapter {

    JFrame frame = new JFrame();
    Object rows[][] = new Object[5][3];
    String colums[] = {"A","B","C"};
    JTable table = new JTable(rows,colums);
    JScrollPane scroll = new JScrollPane(table);

    public static void main(String arg[]) {
        new B();
    }

    B() {
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        table.addMouseListener(this);
        frame.add(scroll);
        frame.setVisible(true);
    }

    public void mouseClicked(MouseEvent clicked) {
        if(clicked.getSource()==table && clicked.getButton()==1 && clicked.getClickCount()==2)
            System.out.println("Left Double Click");
    }
}
  1. 你的例子不会编译
  2. 您应该使用SwingUtilities.isLeftMouseButton(clicked)而不是clicked.getButton()==1
  3. 在通知MouseListener之前,该表可能正在使用MouseEvent并安装单元格编辑器。
  4. 如果你使用table.setFillsViewportHeight(true); 您可以成功双击行/列之外的内容

您可以更改表的CellEditor以忽略MouseEvent (或更改所需的点击次数),这将允许MouseListener获取双击,但也会增加您的工作量,因为您需要提供CellEditor for每一列Class

    TableCellEditor editor = new DefaultCellEditor(new JTextField(10)) {

        @Override
        public boolean isCellEditable(EventObject anEvent) {
            boolean editable = false;
            if (!(anEvent instanceof MouseEvent)) {
                editable = super.isCellEditable(anEvent);
            }
            return editable;
        }

    };

    table.setDefaultEditor(Object.class, editor);

没有更多的背景,很难知道还有什么建议

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM