Mega Code Archive

 
Categories / Java / Swing JFC
 

Extends DefaultTableModel to create your own table model and build table from that

import java.awt.BorderLayout; import java.util.Vector; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; public class TableSample2 {   public static void main(String args[]) {     Object rows[][] = { { "one", "ichi - \u4E00", "un" },         { "two", "ni - \u4E8C", "deux" },         { "three", "san - \u4E09", "trois" },         { "four", "shi - \u56DB", "quatre" },         { "five", "go - \u4E94", "cinq" },         { "six", "roku - \u516D", "treiza" },         { "seven", "shichi - \u4E03", "sept" },         { "eight", "hachi - \u516B", "huit" },         { "nine", "kyu - \u4E5D", "neuf" },         { "ten", "ju - \u5341", "dix" }     };     Object options[] = { "un", "deux", "trois", "quatre", "cinq", "treiza",         "sept", "huit", "neuf", "dix" };     JComboBox comboBox = new JComboBox(options);     comboBox.setMaximumRowCount(4);     TableCellEditor editor = new DefaultCellEditor(comboBox);     Object headers[] = { "English", "Japanese", "French" };     JFrame frame = new JFrame("JTable Anatomy");     class CustomTableModel extends DefaultTableModel {       public CustomTableModel(Object rowData[][], Object columnNames[]) {         super(rowData, columnNames);       }       public Class getColumnClass(int col) {         Vector v = (Vector) dataVector.elementAt(0);         return v.elementAt(col).getClass();       }       public boolean isCellEditable(int row, int col) {         return true;       }     }     JTable table = new JTable(new DefaultTableModel(rows, headers));     //    ColumnModelUtilities.removeHeaders(table.getColumnModel());     table.getColumnModel().getColumn(2).setCellEditor(editor);     JScrollPane scrollPane = new JScrollPane(table);     frame.getContentPane().add(scrollPane, BorderLayout.CENTER);     frame.setSize(300, 150);     frame.setVisible(true);   } }