Maison >Java >javaDidacticiel >Comment récupérer l'index de ligne d'une cellule JTable contenant une JComboBox lors de la sélection d'un élément ?

Comment récupérer l'index de ligne d'une cellule JTable contenant une JComboBox lors de la sélection d'un élément ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 10:43:25698parcourir

How to Retrieve the Row Index of a JTable Cell Containing a JComboBox on Item Selection?

Comment obtenir le CellRow lorsqu'un JComboBox dans une cellule JTable déclenche un ItemEvent

Lorsque vous travaillez avec un JTable qui contient un JComboBox dans son cellules, vous devrez peut-être récupérer la ligne spécifique dans laquelle se trouve la JComboBox lors d'un changement d'élément. Cela peut être délicat, car le ItemListener associé au JComboBox ne fournit pas directement ces informations.

Remplacer le TableCellEditor par défaut

Une approche consiste à remplacer le TableCellEditor par défaut et fournissez votre propre implémentation qui inclut l’accès aux lignes. En remplaçant la méthode getTableCellEditorComponent(), vous pouvez obtenir le numéro de ligne en tant que paramètre :

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

public class CustomTableCellEditor extends DefaultCellEditor implements TableCellRenderer {

    private int currentRow; // Add a field to track the current row

    @Override
    public TableCellEditorComponent getTableCellEditorComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        currentRow = row; // Capture the current row
        return super.getTableCellEditorComponent(table, value, isSelected, hasFocus, row, column);
    }
}

Remplacer la méthode getValueAt() du TableModel

Si vous devez effectuez des actions basées sur la valeur d'une autre colonne dans la même ligne, vous pouvez remplacer la méthode getValueAt() du TableModel pour ajuster la valeur renvoyée en fonction sur l'élément modifié. Par exemple :

import javax.swing.table.AbstractTableModel;

public class CustomTableModel extends AbstractTableModel {

    @Override
    public Object getValueAt(int row, int column) {
        if (column == 1) {
            return "Dependent Value: " + this.getValueAt(row, 2); // Modify the value based on the selected item in column 2
        } else {
            return super.getValueAt(row, column);
        }
    }
}

En implémentant ces techniques, vous pouvez récupérer efficacement le CellRow associé à un ItemEvent dans la JComboBox au sein d'une cellule JTable, vous permettant d'effectuer les actions souhaitées en fonction de l'élément et de la ligne sélectionnés.

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!

Déclaration:
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