Je bâche et apps à l'application avec plusieurs Tout autre moyen de faire cela? P> jtales code> et je dois détecter lorsque la valeur de la valeur de cellule se produit afin que je puisse la mettre à jour dans la base de données. J'ai essayé
Tablodellisener code> et remplacement
tablechanged code>, mais il tire uniquement lorsque je clique sur l'extérieur strong> (cliquez sur une autre ligne) après avoir édité une cellule. p>
4 Réponses :
Je suis d'accord avec @mkorbel - à moins que toutes vos entrées sont des cases à cocher et des déposées, vous souhaitez attendre que l'édition de cellule soit arrêtée (vous ne voulez pas vous engager dans la base de données à chaque fois qu'une lettre est une lettre. dactylographié dans une zone de texte).
Si le problème est que cela ne vous engage pas après la mise au point est allé à un autre composant, ajoutez un : p> FocusListener CODE> qui arrête de modifier la table lorsque la mise au point est perdue sur la table: P>
Merci, cela semble prometteur. Je vais l'essayer. Mais si le programme est fermé avant que la mise au point ne soit perdue?
Sauf si c'est une fermeture naturelle (non tuée par le gestionnaire de tâches ou une personne qui utilise System.exit dans le code), je suis sûr que l'adaptateur perdu de l'accent sera mis à feu. Sinon, il y a aussi le code> WindowListener code> qui écoute pour la fermeture de la fenêtre.
Nope, ça ne tire pas. Mais, j'arrête Cell Modifier sur l'application Sortie :) Pour toutes les tables. J'ai utilisé le code plus simple d'@ Trashgod pour arrêter l'édition lorsque la mise au point est perdue et je ne peux pas décider que je ne peux pas décider si je devais enregistrer toutes les modifications à la sortie ou utiliser l'auditeur de modèles de table. Je suis sûr que les deux vont travailler maintenant, mais quelle réponse dois-je choisir? J'ai utilisé le code de Trahsgod pour édition de cellules SOP et votre idée de s'en tenir à ne pas vous contacter chaque fois qu'une lettre est saisie.
Etrange - il semble que je dois être sûr de plus de 90% des choses. Bon à savoir!
@Igor: Pour référence, java.util.preferences code> fait un effort (spécifique à la plate-forme) pour enregistrer la dernière valeur
mettre () code>.
Vous pouvez implémenter le Il peut également être pratique de mettre fin à la modification lorsque la mise au point est perdue, comme indiqué ICI : p> CelleDitorListener code>
interface, comme indiqué dans ce exemple . Notez que JTABLE code> A> elle-même est un
celleditorlistener code>.
table.putClientProperty("terminateEditOnFocusLost", true);
+1 ooo ... j'aime bien. Dommage que ces propriétés soient ennuyeuses / difficiles à trouver de la documentation sur.
Pensez-vous que c'est une bonne idée d'utiliser Tablodellisener et Code> TableChanged () `?
Hors du contexte, bonne i> est difficile à mesurer. Essayez de couvrir toutes les chemins de sortie normaux et utilisez un onduleur.
@trashgod et comment diriez-vous jtextarea code> /
jtextpane code>? Existe-t-il un auditeur d'événement similaire à celui-ci, où je n'ai pas à utiliser
DocumentListener code> et mettre à jour la base de données à chaque fois qu'un personnage est entré? Un événement qui déclenche sur "
jtextarea code> fin d'édition" Si ce que je suis après.
Vous pouvez bloquer une copie de travail du contenu dans java.util.preferences code>, en tant que couverture et effacer sur la base de données commit.
vk_enter code> est lié à
insert-break code>, de sorte que vous auriez besoin d'un autre geste.
J'utilise la touche Entrée afin que chaque fois qu'un utilisateur appuie entrer dans la cellule mettra à jour.
DefaultTableModel dtm = new DefaultTableModel(data, columnNames); JTable table = new JTable(dtm); table.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { int row = table.getSelectedRow(); int column = table.getSelectedColumn(); // resul is the new value to insert in the DB String resul = table.getValueAt(row, column).toString(); // id is the primary key of my DB String id = table.getValueAt(row, 0).toString(); // update is my method to update. Update needs the id for // the where clausule. resul is the value that will receive // the cell and you need column to tell what to update. update(id, resul, column); } } });
Carte Kyebindings pas Keylistener
Ceci est également pratique si vous souhaitez arrêter l'édition sur un gestionnaire d'événements à partir du bouton de sélection ou de sauvegarde.
if (table.isEditing()) table.getCellEditor().stopCellEditing();
Je pense que cela est possible d'ajouter auditeur, tout dépend de votre xxxcelleditor, mais la manière plus sûre pourrait être en attente de la cellule validée sur stopcelledit (pareil avec msexcell, sans vba / vbe), sinon vous avez en danger
@mkorbel quel genre d'auditeur? J'ai déjà essayé Tablodellisener.
ne pas ajouter d'auditeur approprié au jcomponent qui représentant l'éditeur,
Si possible, j'essaierais d'attendre que
SetValUeat code> sur le modèle de table est appelé, personnellement