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: