【问题标题】:How can I make a JTable cell do different things on single-click than on double-click?如何让 JTable 单元格在单击时执行与双击时不同的操作?
【发布时间】:2011-05-22 15:36:16
【问题描述】:

我正在使用一个可编辑的JTable,其中包含一个名为主题的列。当第一行为空并且用户单击主题单元格以添加新任务时,默认情况下,用户必须单击两次才能使单元格可编辑。我想让它在单击时可编辑,并让它在双击时打开另一个表单。我试过MouseListener,但没能解决。有没有办法解决这个问题?如果有,是什么?

我的代码:

class mouseRenderer extends DefaultTableCellRenderer {
    JLabel lblcell = new JLabel();

    public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row,
            int column) {
        ttable.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                selrow = ttable.getSelectedRow();
                selcol = ttable.getSelectedColumn();

                if(e.getClickCount() == 1) {
                    if(selrow == 0) {
                        lblcell.setText("");
                    }
                }
            }
        });
        return lblcell;
    }
}

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    对于一键编辑,您可以尝试 jtable 中使用的 celleditor 的“setClickCountToStart()”方法。

    【讨论】:

    • 如果编辑器是 DefaultCellEditor 类型(默认注册的是)则可能
    • 我可以单击鼠标编辑单元格并能够通过鼠标双击打开另一个表单。但问题是:如果我使用右键单击(两次)打开另一个表单,它可以工作。我想通过左键单击(两次)打开另一个表单并在单击鼠标左键时编辑单元格。使用上面粘贴的代码。如何使用鼠标左键双击打开表单?
    【解决方案2】:

    您可以尝试创建一个像这样的自定义 CellEditor 并将其设置为setCellEditor()

    public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {
    
        public boolean isCellEditable(EventObject evt) {
            if (evt instanceof MouseEvent) {
                int clickCount;
    
                // For single-click activation
                clickCount = 1;
    
                // For double-click activation
                clickCount = 2;
    
                // For triple-click activation
                clickCount = 3;
    
                return ((MouseEvent)evt).getClickCount() >= clickCount;
            }
            return true;
        }
    }
    

    【讨论】:

      【解决方案3】:

      MouseListener 是捕获连续双击的方法。它应该可以正常工作。

      就一键编辑而言,您可能希望使用MouseMotionListener 选择行并让JTable 进行单击编辑。另一种选择可能是使用 MouseListener 来检测被单击的单元格,但这有点混乱。

      【讨论】:

      • 谢谢.. 让我试试 MouseMotionListener。但我不知道如何使 JTable 仅通过单击即可编辑。让我再试一次。
      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多