0


0

Swing:CellEditorがフォーカスを失うのを防ぐ

テーブルがあります(テキストフィールドとボタンで構成されるテーブルセルエディターを作成します。 ボタンをクリックすると、日付ピッカー付きのポップアップメニューが表示されます。 これは、日付ピッカーで日付が選択されるたびにテキストフィールドを更新するという考え方です。

問題は、日付ピッカーとやり取りすると、セルエディターのフォーカスが失われ、その結果、テーブルがセルエディターリスナー(JTable.editingStopped())としてエディターから削除されることです。

リスナーが削除されるため、新しい日付が設定されたときにセルエディターでfireProperyChange()を呼び出しても効果はなく、更新はテーブル/テキストフィールドに反映されません。

私が望む行動をどのように達成できるかについてのアイデアはありますか?

ありがとうございました。

ピッカーで日付を設定した後の呼び出しスタックは次のとおりです。

PropertySheetTable(JTable).editingStopped(ChangeEvent)line:4713 + CellEditorAdapter(AbstractCellEditor).fireEditingStopped()line:125 + CellEditorAdapter.stopCellEditing()line:152 + JTable $ CellEditorRemover.propertyChange(PropertyChangeEvent)line:5954 PropertyChangeSupport.firePropertyChange(PropertyChangeEvent )行:339 PropertyChangeSupport.firePropertyChange(PropertyChangeEvent)行:347 PropertyChangeSupport.firePropertyChange(String、Object、Object)行:276 + DefaultKeyboardFocusManager(KeyboardFocusManager).firePropertyChange(String、Object、Object)行:1389 DefaultKeyboardFocusManager(KeyboardFocusManager).setGlobalPermanentFocusOnerコンポーネント)行:687 DefaultKeyboardFocusManager.dispatchEvent(AWTEvent)行:490 + JXMonthView(Component).dispatchEventImpl(AWTEvent)行:4502 + JXMonthView(Container).dispatchEventImpl(AWTEvent)行:2099 + JXMonthView(Component).dispatchEvent(AWTEvent)行:4460 + EventQueue.dispatchEvent(AWTEvent)行:599 + EventDispatchThre ad.pumpOneEventForFilters(int)行:269 + EventDispatchThread.pumpEventsForFilter(int、Conditional、EventFilter)行:184 + EventDispatchThread.pumpEventsForHierarchy(int、Conditional、Component)行:174 + EventDispatchThread.pumpEvents(int、Conditional)行:169 + EventDispatchThread.pumpEvents(Conditional)行:161 + EventDispatchThread.run()行:122

1 Answer


0


http://download.oracle.com/javase/tutorial/uiswing/components/table.html [表の使用方法]でSwingチュートリアルを読んでください。 PopopエディターとしてColor Chooserを使用する例があります。 データセレクターの概念は同じである必要があります。