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 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!