Making a JTable cell editable - but *not* by double clicking

finnw picture finnw · Aug 12, 2009 · Viewed 15.3k times · Source

I am trying to add a column to a JTable with the following behaviour (similar to Windows Explorer and similar shells):

  • The cell can be clicked once to select it, as usual.
  • The cell can be double-clicked to perform a separate action (launching an external program.)
  • The cell value (a string) can still be edited, by single-clicking a second time (after a pause) or by pressing F2 when the cell is highlighted.

Double-clicking must not trigger editing of the cell, but I would like to leave any other default editing triggers operational if possible.

I have tried adding a MouseListener to the table, and consuming all MouseEvents, but this does not work - if I return true from isCellEditable() then my listener never receives any click events but if I return false then F2 no longer works.

Can this be achieved using only event listeners? I would prefer not to mess with the PLAF functions if I can avoid it.

Answer

camickr picture camickr · Aug 12, 2009

The DefaultCellEditor has a setClickCountToStart() method to control mouse clicks for editing. The default is 2. Changing this will have no effect on F2 functionality.

Therefore you can set editing to be a triple click.

Not sure exactly how to handle two single clicks to start editing but I guess you would use a Timer to keep track of the first click and then do the editing if the second single click is within you time interval.