Maison > Java > javaDidacticiel > Comment déterminer la ligne JTable contenant une JComboBox qui a déclenché un ItemEvent ?

Comment déterminer la ligne JTable contenant une JComboBox qui a déclenché un ItemEvent ?

Patricia Arquette
Libérer: 2024-12-17 16:04:14
original
651 Les gens l'ont consulté

How to Determine the JTable Row Containing a JComboBox That Triggered an ItemEvent?

Détermination de la ligne associée à une cellule JComboBox dans une JTable

Question initiale :

Vous souhaitez connaître la ligne numéro dans un JTable qui contient un JComboBox dans une cellule spécifique lorsqu'un ItemEvent est déclenché dans le JComboBox. Ce numéro de ligne est crucial pour les actions ultérieures impliquant une autre cellule dans la même ligne après la modification de JComboBox.

Réponse :

Il semble que vous utilisez une JComboBox comme un éditeur au sein de la JTable. Dans de tels scénarios, la méthode getTableCellEditorComponent() de la classe TableCellEditor donne accès à la ligne comme l'un de ses paramètres. Reportez-vous aux ressources suivantes pour plus d'informations :

  • Tutoriel Java : Utiliser une zone de liste déroulante en tant qu'éditeur
  • Exemple : Personnalisation de l'éditeur de zone de liste déroulante

Addendum pour la synchronisation des valeurs :

Pour synchroniser la valeur d'une colonne dépendante avec celle de la Colonne JComboBox, remplacez la méthode getValueAt() du modèle de table. Cela vous permet de renvoyer la valeur mise à jour en fonction du contenu modifié de la colonne JComboBox.

Exemple supplémentaire :

Le code ci-dessous présente cette approche, en conservant une colonne dépendante synchronisé avec la colonne JComboBox à l'aide de la méthode getValueAt() remplacée :

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Example {

  private static final int DEPENDENT_COL = 1;
  private static final int ITEM_COL = 2;
  private static final String[] columnNames = {"Col 1", "Col 2", "Col 3"};

  public static void main(String[] args) {
    // Create table model
    DefaultTableModel model = new DefaultTableModel(columnNames, 0) {
      @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);
        }
      }
    };

    // Add rows to table model
    for (int i = 0; i < 16; i++) {
      model.addRow(new Object[] {"C1", "C2", "Item1"});
    }

    // Create table and customize JComboBox column
    JTable table = new JTable(model);
    TableColumn col = table.getColumnModel().getColumn(ITEM_COL);
    String[] items = {"Item1", "Item2", "Item3"};
    JComboBox combo = new JComboBox(items);
    col.setCellEditor(new DefaultCellEditor(combo));

    // Create the frame and add the table
    JFrame frame = new JFrame();
    frame.add(new JScrollPane(table));
    frame.pack();
    frame.setVisible(true);
  }
}
Copier après la connexion

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