Insérer JSpinner dans un JTable

JTable est un composant Swing flexible, est une sous-classe de la classe JComponent et elle peut être utilisée pour créer une table avec des informations affichées dans plusieurs lignes et colonnes. Nous pouvons insérer JSpinner dans un JTable en personnalisant le code en héritant la classe DefaultCellEditor et nous devons redéfinir la méthode getTableCellEditorComponent().
 


 
 

Exemple:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.table.*;

public class Main 
{
    //Header de JTable 
    static String[] columns = {
        "Produit", "Quantité"
    };
    //données pour JTable dans un tableau 2D
    static Object[][] data = {
        { "Ordinateur", 12 },
        { "Clavier", 20 },
        { "Souris", 30 },
        { "Imprimante", 6 },
        { "Scanner", 10 },
    };
	
    public static void main( String[] args ) {
        //crée un frame
        JFrame f = new JFrame();
        //crée un JTable
        JTable table = new JTable(data, columns);
        JScrollPane scrollPane = new  JScrollPane(table);
        //récupérer le modéle de colonne de JTable
        TableColumnModel model = table.getColumnModel();
        //récupérer la 2éme colonne
        TableColumn col = model.getColumn(1);
        //définir l'éditeur
        col.setCellEditor(new MySpinnerEditor());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(scrollPane);
        f.setSize(200, 150);
        f.setVisible(true);
    }
	
    public static class MySpinnerEditor extends DefaultCellEditor
    {
        JSpinner sp;
        DefaultEditor defaultEditor;
        JTextField text;

        // Initialise le spinner
        public MySpinnerEditor() {
            super(new JTextField());
            sp = new JSpinner();
            defaultEditor = ((DefaultEditor)sp.getEditor());
            text = defaultEditor.getTextField();
        }

        // Prépare le composant spinner et retourne-le
        public Component getTableCellEditorComponent(JTable table, Object 
        value, boolean isSelected, int row, int column) 
        {
            sp.setValue(value);
            return sp;
        }

        // Renvoie la valeur actuelle du spinners
        public Object getCellEditorValue() {
            return sp.getValue();
        }
    }
}

Sortie:


 
Partagez cet article

Laisser un commentaire

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