ComboBox Table
/* Core SWING Advanced Programming By Kim Topley ISBN: 0 13 083292 8 Publisher: Prentice Hall */ import javax.swing.*; import javax.swing.table.*; import java.awt.event.*; public class ComboBoxTable { public static void main(String[] args) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception evt) {} JFrame f = new JFrame("Combo Box Table"); JTable tbl = new JTable(new ComboBoxTableModel()); // Create the combo box editor JComboBox comboBox = new JComboBox(ComboBoxTableModel.getValidStates()); comboBox.setEditable(true); DefaultCellEditor editor = new DefaultCellEditor(comboBox); // Assign the editor to the second column TableColumnModel tcm = tbl.getColumnModel(); tcm.getColumn(1).setCellEditor(editor); // Set column widths tcm.getColumn(0).setPreferredWidth(200); tcm.getColumn(1).setPreferredWidth(100); // Set row heighht tbl.setRowHeight(20); tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tbl.setPreferredScrollableViewportSize(tbl.getPreferredSize()); f.getContentPane().add(new JScrollPane(tbl), "Center"); f.pack(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); f.setVisible(true); } } class ComboBoxTableModel extends AbstractTableModel { // Implementation of TableModel interface public int getRowCount() { return data.length; } public int getColumnCount() { return COLUMN_COUNT; } public Object getValueAt(int row, int column) { return data[row][column]; } public Class getColumnClass(int column) { return (data[0][column]).getClass(); } public String getColumnName(int column) { return columnNames[column]; } public boolean isCellEditable(int row, int column) { return column == 1; } public void setValueAt(Object value, int row, int column) { if (isValidValue(value)) { data[row][column] = value; fireTableRowsUpdated(row, row); } } // Extra public methods public static String[] getValidStates() { return validStates; } // Protected methods protected boolean isValidValue(Object value) { if (value instanceof String) { String sValue = (String)value; for (int i = 0; i < validStates.length; i++) { if (sValue.equals(validStates[i])) { return true; } } } return false; } protected static final int COLUMN_COUNT = 2; protected static final String[] validStates = { "On order", "In stock", "Out of print" }; protected Object[][] data = new Object[][] { { "Core Java Volume 1", validStates[0] }, { "Core Java Volume 2", validStates[0] }, { "Core Web Programming", validStates[0] }, { "Core Visual Basic 5", validStates[0] }, { "Core Java Foundation Classes", validStates[0] } }; protected static final String[] columnNames = { "Book Name", "Status" }; }