// Purpose. JTable, TableModel, TableColumn, TableCellRenderer demo import java.awt.*; // Color.yellow, Color.red import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class JTableDataModelDemo { static class ArrayBasedDataModel extends AbstractTableModel { private Object[][] values; public ArrayBasedDataModel( Object[][] vals ) { values = vals; } public int getRowCount() { return values.length; } public int getColumnCount() { return values[0].length; } public Class getColumnClass( int col ) { return getValueAt(0,col).getClass(); } public boolean isCellEditable( int row, int col ) { return(col == 2); } public Object getValueAt( int row, int col ) { return values[row][col]; } public void setValueAt( Object aValue, int row, int column ) { values[row][column] = aValue; } } public static JTable createTable() { Object[][] values = { { "Alpha", new Integer(42), Boolean.TRUE }, { "Bravo", new Integer(11), Boolean.TRUE }, { "Charlie", new Integer(13), Boolean.FALSE }, { "Delta", new Integer(17), Boolean.TRUE }, { "Echo", new Integer(19), Boolean.FALSE }, { "Foxtrot", new Integer(23), Boolean.TRUE } }; JTable table = new JTable( new ArrayBasedDataModel( values ) ); TableColumn col1 = table.getColumnModel().getColumn(0); TableColumn col2 = table.getColumnModel().getColumn(1); TableColumn col3 = table.getColumnModel().getColumn(2); col1.setHeaderValue("Letter"); col2.setHeaderValue("Number"); col3.setHeaderValue("Selected"); DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setBackground( Color.yellow ); renderer.setForeground( Color.red ); renderer.setToolTipText( "Phonetic alphabet" ); col1.setCellRenderer( renderer ); return table; } public static void main( String[] args ) { JFrame frame = new JFrame( "JTable data model demo" ); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); JTable table = createTable(); frame.getContentPane().add( table, "Center" ); frame.getContentPane().add( table.getTableHeader(), "North" ); frame.pack(); frame.setVisible( true ); } }