Maison > Java > javaDidacticiel > Comment récupérer l'index de ligne d'un JComboBox dans une cellule JTable lors d'un ItemEvent ?

Comment récupérer l'index de ligne d'un JComboBox dans une cellule JTable lors d'un ItemEvent ?

Mary-Kate Olsen
Libérer: 2024-12-09 12:58:11
original
909 Les gens l'ont consulté

How to Retrieve the Row Index of a JComboBox Within a JTable Cell During an ItemEvent?

Comment obtenir la ligne de cellules d'une JComboBox dans une cellule JTable pendant un événement ItemEvent

Lors de l'utilisation d'une JComboBox comme éditeur de cellule dans une JTable , il peut être difficile d'obtenir la ligne associée au JComboBox modifié lors d'un ItemEvent. Ces informations sont cruciales pour accéder aux autres colonnes de la même ligne lors de la mise à jour en fonction du changement de JComboBox.

Solution :

La clé pour résoudre ce problème est de comprendre que la méthode remplacée de TableCellEditor, getTableCellEditorComponent(), inclut la ligne en tant que paramètre. Vous trouverez ci-dessous une solution qui exploite cela :

import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class JComboBoxCellRowAccess {

    public static void main(String[] args) {
        JTable table = createTable();
        JComboBox<String> comboBox = new JComboBox<>(new String[] { "Item1", "Item2", "Item3" });
        TableColumn column = table.getColumnModel().getColumn(1);
        column.setCellEditor(new DefaultCellEditor(comboBox));

        comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                int row = getCellRow(comboBox);
                System.out.println("Row: " + row);
            }
        });
    }

    public static int getCellRow(JComboBox<?> comboBox) {
        TableCellEditor editor = comboBox.getCellEditor();
        if (editor != null) {
            Component component = editor.getTableCellEditorComponent(null, null, true, -1, -1);
            return ((JTable) component.getParent()).getSelectedRow();
        }
        return -1;
    }

    public static JTable createTable() {
        DefaultTableModel model = new DefaultTableModel(new Object[][] { { "Row 0" }, { "Row 1" }, { "Row 2" } }, new String[] { "Column 1" });
        return new JTable(model);
    }
}
Copier après la connexion

Avec cette solution, vous pouvez accéder à la ligne du JComboBox dans ItemListener, vous permettant de mettre à jour ou de récupérer des informations d'autres colonnes de la même ligne selon vos besoins.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal