Win a copy of The Java Performance Companion this week in the Performance forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Getting Focus in my JTable cell

 
Jon Swanson
Ranch Hand
Posts: 216
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am wanting my table cells to stop editing when I click outside the table.


I made a custom editor and tried to close/cancel editing when the focus shifts to some other panel like this:



If I double-click in a table cell, I see the comforting message "Focus gained" and then if I type in a number and click outside the GUI, for example, I get "Lost focus editing cell" and the cell editing finishes. Exactly what I want.

If I just type a number, the cell contains the number and looks to be in edit mode. Though I do not see the message "Focused gained" and if I click outside the GUI, I still seem to be in edit mode. To get out of it, I have to click another cell in the table.

I tried putting this in my table model:



I see the message "Requesting Focus." The first println returns true, the second false. So again, clicking outside the table fails to get the CellEditor to stopCellEditing. No surprise, as I seemed to have failed to get focus in the cell.

Could someone help me with this?

How should I be requesting focus on the editing text field?



 
Rob Spoor
Sheriff
Pie
Posts: 20552
57
Chrome Eclipse IDE Java Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
To stop editing a cell when it loses focus, use the following code:
This is one of those non-documented features that everybody wants to know about.
 
Jon Swanson
Ranch Hand
Posts: 216
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks for the suggestion. I did come across that property myself last night, but it produced an interesting dilemma. I had the table set up to more 'Excel-like' in that you can start typing in a cell and the new value will replace the old value, rather than having the new text appended to what was already in the field. Users also like that they can use right and left arrow keys to move between cells in the table.

At least in my hands, 'table.putClientProperty("terminateEditOnFocusLost", true);' breaks all that functionality.

There is more than one method I have seen to implement the Excel behavior. They override functions of JTable.



overriding editCellAt and selectAll() seems to work also.



both recipes come from trolling with Google.

I can't take away functionality users really like, but they complain a lot about leaving the table and not having it update.

What I read about setting the property made me think as a minimum, I'd always end up in the editor when typing new text, so I could not use the right and left arrows for navigation. I have been thinking I'd be better off trying to attach another listener somewhere to call stopCellEditing(). But if there are ways to keep the 'Excel-ness' and use 'terminateEditOnFocusLost' I would love to hear suggestions.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic