Question

J'utilise une JComboBox comme CellRenderer dans ma JTable.
Tout fonctionne bien, la JComboBox affiche l'élément correct pour la ligne correspondante.

Le problème sur lequel je travaille actuellement est que lorsque je choisis une nouvelle valeur dans la JComboBox (par exemple la ligne 9), la valeur est définie correctement, mais lorsque j'essaye de changer la valeur de la ligne suivante, la JComboBox (pourexemple à la ligne 10) définit automatiquement la valeur de la ligne précédente.

J'ai créé une classe DropDownCellRenderer qui étend JComboBox et implémente TableCellRenderer, j'ai pensé que c'était suffisant, mais il semble que l'objet DropDownCellRenderer est le même pour chaque ligne.

table.getColumnModel().getColumn( 3 ).setCellRenderer( new DropDownCellRenderer() );
table.getColumnModel().getColumn( 3 ).setCellEditor( new DefaultCellEditor( new DropDownCellRenderer() ) );

Comment éviter que chaque ligne utilise le même objet?

Était-ce utile?

La solution

J'ai regardé le code source de votre moteur de rendu.

  1. Je ne pense pas que vous deviez rechercher le produit par son nom.Le value qui vous est transmis est le produit, qui provient de votre modèle de table (s'il est correctement implémenté).Définissez simplement le value comme élément sélectionné et cela devrait fonctionner.

  2. Pour que le rendu se comporte correctement, modifiez ses couleurs de premier plan et d'arrière-plan en fonction du paramètre isSelected.Le code devrait ressembler à:

    if (isSelected) {
        setForeground(table.getSelectionForeground());
        super.setBackground(table.getSelectionBackground());
    } else {
        setForeground(table.getForeground());
        setBackground(table.getBackground());
    }
    
  3. Faites de votre tableau initial de valeurs un argument du constructeur.Cela transformera votre moteur de rendu en un moteur de rendu de combobox universel.

Autres conseils

On dirait que vous enregistrez et affichez des valeurs dans la zone de liste déroulante elle-même, pas à partir du modèle de la table.Lorsque vous définissez une valeur et enregistrez une valeur de liste déroulante, vous devez mettre à jour le modèle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top