Maison > Java > javaDidacticiel > Comment obtenir le numéro de ligne d'une JComboBox dans une JTable après un ItemEvent ?

Comment obtenir le numéro de ligne d'une JComboBox dans une JTable après un ItemEvent ?

DDD
Libérer: 2024-12-13 22:47:11
original
859 Les gens l'ont consulté

How to Get the Row Number of a JComboBox in a JTable After an ItemEvent?

Comment puis-je obtenir le CellRow de la JComboBox dans une JTable lorsqu'un ItemEvent se produit ?

Vous avez une JTable avec une colonne contenant un JComboBox et un ItemListener attaché au JComboBox pour répondre aux modifications. Cependant, ItemListener n’a pas la capacité de récupérer la ligne du ComboBox modifié. Pour opérer sur une autre colonne de la même ligne lorsque la ComboBox change, vous avez besoin du numéro de ligne.

Comprendre le problème

Dans l'exemple de code donné, lorsqu'un changement est détecté dans le ComboBox, le ComboBoxListener récupère l'élément affecté. Cependant, il ne fournit pas de moyen d'accéder à la ligne correspondante dans la JTable.

Une solution pour récupérer la CellRow

Lorsque vous utilisez une Combo Box comme éditeur , la méthode TableCellEditor getTableCellEditorComponent() fournit la ligne en tant que paramètre. En faisant référence à l'exemple associé lié dans la réponse, vous pouvez récupérer le CellRow comme :

public void itemStateChanged(ItemEvent e) {
    // Get the table cell editor
    TableCellEditor editor = table.getCellEditor();
    // Get the row of the cell being edited
    int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...));
    //...
}
Copier après la connexion

Garder les colonnes synchronisées

Pour maintenir la synchronisation entre les colonnes dépendantes, vous pouvez remplacer la méthode getValueAt() du modèle pour mettre à jour les valeurs de manière dynamique en fonction des valeurs associées dans la même ligne. Par exemple, vous pouvez mettre à jour la valeur de « l'autre colonne » dans la méthode setValueAt() du modèle avant de déclencher l'événement de mise à jour.

Exemple d'implémentation

Le code suivant démontre ces solutions :

import javax.swing.table.DefaultTableModel;

//...

// Override getValueAt() to keep columns synchronized
@Override
public Object getValueAt(int row, int col) {
    if (col == DEPENDENT_COL) {
        return "C2:" + this.getValueAt(row, ITEM_COL);
    } else {
        return super.getValueAt(row, col);
    }
}

//...

// Attach a new ItemListener
combo.addItemListener(new ItemListener() {

    @Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            // Get the table cell editor
            TableCellEditor editor = table.getCellEditor();
            // Get the row and update the other column
            int row = table.convertRowIndexToModel(editor.getTableCellEditorComponent(table, ...));
            model.setValueAt("C2:" + e.getItem(), row, DEPENDENT_COL);
        }
    }
});
Copier après la connexion

Cette solution combine les deux approches pour synchroniser les colonnes dépendantes et récupérer le CellRow.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal