Board index » jbuilder » Setting column titles in JTable, TableDialogEditDemo example
Richard
JBuilder Developer |
Setting column titles in JTable, TableDialogEditDemo example2004-11-28 02:00:11 AM jbuilder1 Hello, This is no doubt a really dumb question, but I don't see where in the example TableDialogEditDemo.java (from Sun's Java examples) that we "tell" the table to have one fixed row, to make it grey, and to use getColumnName() for the column headers? (Stated another way, what would I do differently if I didn't want the column titles to be grey, for instance?) The full java listing is below. Thanks, Richard Ulrich /* * TableDialogEditDemo.java is a 1.4 application that requires these files: * ColorRenderer.java * ColorEditor.java */ import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * This is like TableDemo, except that it substitutes a * Favorite Color column for the Last Name column and specifies * a custom cell renderer and editor for the color data. */ public class TableDialogEditDemo extends JPanel { private boolean DEBUG = false; public TableDialogEditDemo() { super(new GridLayout(1,0)); JTable table = new JTable(new MyTableModel()); table.setPreferredScrollableViewportSize(new Dimension(500, 70)); //Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); //Set up renderer and editor for the Favorite Color column. table.setDefaultRenderer(Color.class, new ColorRenderer(true)); table.setDefaultEditor(Color.class, new ColorEditor()); //Add the scroll pane to this panel. add(scrollPane); } class MyTableModel extends AbstractTableModel { private String[] columnNames = {"First Name", "Favorite Color", "Sport", "# of Years", "Vegetarian"}; private Object[][] data = { {"Mary", new Color(153, 0, 153), "Snowboarding", new Integer(5), new Boolean(false)}, {"Alison", new Color(51, 51, 153), "Rowing", new Integer(3), new Boolean(true)}, {"Kathy", new Color(51, 102, 51), "Knitting", new Integer(2), new Boolean(false)}, {"Sharon", Color.red, "Speed reading", new Integer(20), new Boolean(true)}, {"Philip", Color.pink, "Pool", new Integer(10), new Boolean(false)} }; public int getColumnCount() { return columnNames.length; } public int getRowCount() { return data.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { return data[row][col]; } /* * JTable uses this method to determine the default renderer/ * editor for each cell. If we didn't implement this method, * then the last column would contain text ("true"/"false"), * rather than a check box. */ public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } public boolean isCellEditable(int row, int col) { //Note that the data/cell address is constant, //no matter where the cell appears onscreen. if (col < 1) { return false; } else { return true; } } public void setValueAt(Object value, int row, int col) { if (DEBUG) { System.out.println("Setting value at " + row + "," + col + " to " + value + " (an instance of " + value.getClass() + ")"); } data[row][col] = value; fireTableCellUpdated(row, col); if (DEBUG) { System.out.println("New value of data:"); printDebugData(); } } private void printDebugData() { int numRows = getRowCount(); int numCols = getColumnCount(); for (int i=0; i < numRows; i++) { System.out.print(" row " + i + ":"); for (int j=0; j < numCols; j++) { System.out.print(" " + data[i][j]); } System.out.println(); } System.out.println("--------------------------"); } } /** * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */ private static void createAndShowGUI() { //Make sure we have nice window decorations. JFrame.setDefaultLookAndFeelDecorated(true); //Create and set up the window. JFrame frame = new JFrame("TableDialogEditDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Create and set up the content pane. JComponent newContentPane = new TableDialogEditDemo(); //This is an extension of JPanel newContentPane.setOpaque(true); //content panes must be opaque frame.setContentPane(newContentPane); //Display the window. frame.pack(); frame.setVisible(true); } public static void main(String[] args) { //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } |