Swing:防止CellEditor失去焦点

时间:2010-08-05 13:33:05

标签: java swing event-handling

我有一张桌子(我在其中创建一个包含文本字段和按钮的表格单元格编辑器。 单击该按钮会弹出一个带有日期选择器的弹出菜单。 我们的想法是,只要在日期选择器中选择了日期,就应该更新文本字段。

问题是,当与日期选择器交互时,单元格编辑器的焦点会丢失,因此,表格将作为单元格编辑器侦听器(JTable.editingStopped())从编辑器中删除。

由于删除了侦听器,因此在设置新日期时在单元编辑器中调用fireProperyChange()无效,并且没有更新传播到表/文本字段。

您对我如何实现我想要的行为有什么想法吗?

谢谢。

这是在选择器中设置日期后的调用堆栈:

PropertySheetTable(JTable).editingStopped(ChangeEvent)行:4713
CellEditorAdapter(AbstractCellEditor).fireEditingStopped()line:125
CellEditorAdapter.stopCellEditing()行:152
JTable $ CellEditorRemover.propertyChange(PropertyChangeEvent)行:5954 PropertyChangeSupport.firePropertyChange(PropertyChangeEvent)行:339 PropertyChangeSupport.firePropertyChange(PropertyChangeEvent)行:347 PropertyChangeSupport.firePropertyChange(String,Object,Object)行:276
DefaultKeyboardFocusManager(KeyboardFocusManager)。firePropertyChange(String,Object,Object)行:1389 DefaultKeyboardFocusManager(KeyboardFocusManager).setGlobalPermanentFocusOwner(Component)行:687 DefaultKeyboardFocusManager.dispatchEvent(AWTEvent)行:490
JXMonthView(Component).dispatchEventImpl(AWTEvent)行:4502
JXMonthView(Container).dispatchEventImpl(AWTEvent)行:2099
JXMonthView(Component).dispatchEvent(AWTEvent)行:4460
EventQueue.dispatchEvent(AWTEvent)行:599
EventDispatchThread.pumpOneEventForFilters(int)行:269
EventDispatchThread.pumpEventsForFilter(int,Conditional,EventFilter)行:184
EventDispatchThread.pumpEventsForHierarchy(int,Conditional,Component)行:174
EventDispatchThread.pumpEvents(int,Conditional)行:169
EventDispatchThread.pumpEvents(条件)行:161
EventDispatchThread.run()行:122

1 个答案:

答案 0 :(得分:0)

阅读How to Use Tables上的Swing教程。有一个示例使用Color Chooser作为popop编辑器。对于数据选择器,概念应该相同。