JCombobox Dynamique dans un JTable

JTable est un composant Swing flexible qui est très bien adapté pour afficher des données dans un format tabulaire. Dans ce tutoriel nous allons découvrir comment remplir un JComboBox dynamiquement dans un JTable. Une façon consiste à redéfinir la méthode getCellEditor(…) de JTable. La méthode getCellEditor() renvoie l’éditeur de cellule actif, qui est nul si la table n’est pas en cours d’édition.
 
 

Exemple:
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.table.*;

public class ComboBoxJTable extends JPanel
{
    List<String[]> editData = new ArrayList<String[]>(3);

    public ComboBoxJTable()
    {
        setLayout(new BorderLayout());

        // ajouter des données dynamiquement
        // créer l'éditeur de données à utiliser pour chaque ligne
        editData.add(new String[]{ "Java", "PHP", "Python" });
        editData.add(new String[]{ "Rouge", "Vert", "Bleu" });
        editData.add(new String[]{ "Triangle", "Cercle", "Carré" });

        // créer JTable avec les données par défaut
        Object[][] data = {
            {"Langage", "Java"},
            {"Coleur", "Bleu"},
            {"Forme", "Cercle"},
            {"Text", "WayToLearnX"}
        };
		
        String[] columns = {"Propriété", "Valeur"};

        DefaultTableModel model = new DefaultTableModel(data, columns);
        JTable table = new JTable(model)
        {
            // déterminer l'éditeur à utiliser par les lignes de JTable
            public TableCellEditor getCellEditor(int row, int column)
            {
                int col = convertColumnIndexToModel(column);

                if (col == 1 && row < 3)
                {
                    JComboBox<String> cb = new JComboBox<String>(editData.get(row));
                    return new DefaultCellEditor(cb);
                }
                else
                    return super.getCellEditor(row, column);
            }
        };

        JScrollPane scroll = new JScrollPane(table);
        add(scroll);
    }

    private static void displayUI()
    {
        JFrame f = new JFrame("Exemple JTable avec JComboBox");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new ComboBoxJTable());
        f.setSize(300, 150);
        f.setLocationByPlatform(true);
        f.setVisible(true);
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                displayUI();
            }
        });
    }
}

Sortie:


 
Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *