2010-08-05 4 views
0

J'ai un tableau (dans lequel je crée un éditeur de cellule de tableau composé d'un champ de texte et d'un bouton.) Cliquer sur le bouton affiche un menu contextuel avec un sélecteur de date L'idée est que le champ de texte doit être mis à jour chaque fois qu'une date est sélectionnée dans le sélecteur de dateSwing: Empêche CellEditor de perdre le focus

Problème: lors de l'interaction avec le sélecteur de date, le focus de l'éditeur de cellules est perdu et, par conséquent, la table est supprimée depuis l'éditeur en tant qu'écouteur d'éditeur de cellules (JTable.editingStopped())

Étant donné que l'écouteur est supprimé, l'appel de fireProperyChange() dans l'éditeur de cellule lorsqu'une nouvelle date est définie aucun effet et aucune mise à jour n'est propagée dans le champ table/texte.

Avez-vous des idées sur la façon dont je peux atteindre le comportement que je veux?

Merci.

est ici la pile d'appel après avoir réglé une date dans le sélecteur:

PropertySheetTable (JTable) .editingStopped (ChangeEvent) Ligne: 4713
CellEditorAdapter (AbstractCellEditor) .fireEditingStopped() en ligne: 125
CellEditorAdapter.stopCellEditing() en ligne: 152
JTable $ ligne CellEditorRemover.propertyChange (PropertyChangeEvent): 5954 ligne PropertyChangeSupport.firePropertyChange (PropertyChangeEvent): 339 ligne PropertyChangeSupport.firePropertyChange (PropertyChangeEvent): 347 PropertyChangeSupport. firePropertyChange (String, Object, Object) en ligne: 276
DefaultKeyboardFocusManager (KeyboardFocusManager) .firePropertyChange (String, Object, Object) ligne: 1389 ligne DefaultKeyboardFocusManager (KeyboardFocusManager) .setGlobalPermanentFocusOwner (Composant): 687 ligne DefaultKeyboardFocusManager.dispatchEvent (AWTEvent) : 490
JXMonthView (Composant) .dispatchEventImpl ligne (AWTEvent): 4502
JXMonthView (Container) .dispatchEventImpl ligne (AWTEvent): 2099
ligne JXMonthView (Composant) .dispatchEvent (AWTEvent): 4460
EventQueue.dispatchEvent (AWTEvent) ligne: 599
EventDispatchThread.pump OneEventForFilters (int) en ligne: 269
EventDispatchThread.pumpEventsForFilter (int, sous condition, EventFilter) en ligne: 184
EventDispatchThread.pumpEventsForHierarchy (int, sous condition, de composants) en ligne: 174
EventDispatchThread.pumpEvents (int, sous condition) en ligne: 169
EventDispatchThread.pumpEvents ligne (Facultatif): 161
ligne EventDispatchThread.run(): 122

Répondre

0

lire le tutoriel Swing sur How to Use Tables. Il y a un exemple qui utilise un sélecteur de couleurs comme éditeur popop. Le concept devrait être le même pour un sélecteur de données.