home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / TableExample4.java < prev    next >
Text File  |  1998-05-08  |  7KB  |  150 lines

  1. /*
  2.  * @(#)TableExample4.java    1.6 98/01/27
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20.  
  21. /**
  22.  * Another JTable example, showing how column attributes can be refined 
  23.  * even when columns have been created automatically. Here we create some 
  24.  * specialised renderers and editors as well as changing widths and colors 
  25.  * for some of the columns in the SwingSet demo table. 
  26.  *
  27.  * @version 1.6 01/27/98
  28.  * @author Philip Milne
  29.  */
  30.  
  31. import com.sun.java.swing.*;
  32. import com.sun.java.swing.table.*;
  33. import com.sun.java.swing.border.*;
  34.  
  35. import java.awt.Dimension;
  36. import java.awt.event.WindowAdapter;
  37. import java.awt.event.WindowEvent;
  38. import java.awt.Color;
  39.  
  40. public class TableExample4 {
  41.  
  42.     public TableExample4() {
  43.         JFrame frame = new JFrame("Table");
  44.         frame.addWindowListener(new WindowAdapter() {
  45.             public void windowClosing(WindowEvent e) {System.exit(0);}});
  46.  
  47.         // Take the dummy data from SwingSet.  
  48.         final String[] names = {"First Name", "Last Name", "Favorite Color", 
  49.                                 "Favorite Number", "Vegetarian"}; 
  50.         final Object[][] data = {
  51.         {"Mark", "Andrews", "Red", new Integer(2), new Boolean(true)},
  52.         {"Tom", "Ball", "Blue", new Integer(99), new Boolean(false)},
  53.         {"Alan", "Chung", "Green", new Integer(838), new Boolean(false)},
  54.         {"Jeff", "Dinkins", "Turquois", new Integer(8), new Boolean(true)},
  55.         {"Amy", "Fowler", "Yellow", new Integer(3), new Boolean(false)},
  56.         {"Brian", "Gerhold", "Green", new Integer(0), new Boolean(false)},
  57.         {"James", "Gosling", "Pink", new Integer(21), new Boolean(false)},
  58.         {"David", "Karlton", "Red", new Integer(1), new Boolean(false)},
  59.         {"Dave", "Kloba", "Yellow", new Integer(14), new Boolean(false)},
  60.         {"Peter", "Korn", "Purple", new Integer(12), new Boolean(false)},
  61.         {"Phil", "Milne", "Purple", new Integer(3), new Boolean(false)},
  62.         {"Dave", "Moore", "Green", new Integer(88), new Boolean(false)},
  63.         {"Hans", "Muller", "Maroon", new Integer(5), new Boolean(false)},
  64.         {"Rick", "Levenson", "Blue", new Integer(2), new Boolean(false)},
  65.         {"Tim", "Prinzing", "Blue", new Integer(22), new Boolean(false)},
  66.         {"Chester", "Rose", "Black", new Integer(0), new Boolean(false)},
  67.         {"Ray", "Ryan", "Gray", new Integer(77), new Boolean(false)},
  68.         {"Georges", "Saab", "Red", new Integer(4), new Boolean(false)},
  69.         {"Willie", "Walker", "Phthalo Blue", new Integer(4), new Boolean(false)},
  70.         {"Kathy", "Walrath", "Blue", new Integer(8), new Boolean(false)},
  71.         {"Arnaud", "Weber", "Green", new Integer(44), new Boolean(false)}
  72.         };
  73.  
  74.         // Create a model of the data.
  75.         TableModel dataModel = new AbstractTableModel() {
  76.             // These methods always need to be implemented. 
  77.             public int getColumnCount() { return names.length; } 
  78.             public int getRowCount() { return data.length;}
  79.             public Object getValueAt(int row, int col) {return data[row][col];}
  80.  
  81.             // The default implementations of these methods in 
  82.             // AbstractTableModel would work, but we can refine them. 
  83.             public String getColumnName(int column) {return names[column];}
  84.             public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
  85.             public boolean isCellEditable(int row, int col) {return true;} 
  86.             public void setValueAt(Object aValue, int row, int column) {
  87.                 System.out.println("Setting value to: " + aValue); 
  88.                 data[row][column] = aValue; 
  89.             }
  90.          }; 
  91.  
  92.         // Create the table
  93.         JTable tableView = new JTable(dataModel);  
  94.  
  95.     // Create a combo box to show that you can use one in a table. 
  96.     JComboBox comboBox = new JComboBox();
  97.     comboBox.addItem("Red");
  98.     comboBox.addItem("Orange");
  99.     comboBox.addItem("Yellow");
  100.     comboBox.addItem("Green");
  101.     comboBox.addItem("Blue");
  102.     comboBox.addItem("Indigo");
  103.     comboBox.addItem("Violet");
  104.  
  105. // .5       TableColumn colorColumn = tableView.getColumn(new Integer(3)); 
  106.         TableColumn colorColumn = tableView.getColumn("Favorite Color"); 
  107.         // Use the combo box as the editor in the "Favorite Color" column. 
  108.         colorColumn.setCellEditor(new DefaultCellEditor(comboBox)); 
  109.         
  110.         // Set a pink background and tooltip for the Color column renderer.
  111.         DefaultTableCellRenderer colorColumnRenderer = new DefaultTableCellRenderer(); 
  112.         colorColumnRenderer.setBackground(Color.pink); 
  113.         colorColumnRenderer.setToolTipText("Click for combo box"); 
  114.         colorColumn.setCellRenderer(colorColumnRenderer); 
  115.         
  116.         // Set a tooltip for the header of the colors column. 
  117.     TableCellRenderer headerRenderer = colorColumn.getHeaderRenderer(); 
  118.     if (headerRenderer instanceof DefaultTableCellRenderer)
  119.         ((DefaultTableCellRenderer)headerRenderer).setToolTipText("Hi Mom!");
  120.  
  121.     // Set the width of the "Vegetarian" column.
  122.         TableColumn vegetarianColumn = tableView.getColumn("Vegetarian"); 
  123.         vegetarianColumn.setWidth(35); 
  124.  
  125.     // Show the values in the "Favorite Number" column in different colors.
  126.         TableColumn numbersColumn = tableView.getColumn("Favorite Number"); 
  127.         DefaultTableCellRenderer numberColumnRenderer = new DefaultTableCellRenderer() {
  128.         public void setValue(Object value) { 
  129.             int cellValue = (value instanceof Number) ? ((Number)value).intValue() : 0; 
  130.             setForeground((cellValue > 30) ? Color.black : Color.red); 
  131.             setText((value == null) ? "" : value.toString());
  132.         } 
  133.         }; 
  134.         numberColumnRenderer.setHorizontalAlignment(JLabel.RIGHT); 
  135.         numbersColumn.setCellRenderer(numberColumnRenderer); 
  136.  
  137.         // Finish setting up the table. 
  138.         JScrollPane scrollpane = JTable.createScrollPaneForTable(tableView);
  139.     scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
  140.         scrollpane.setPreferredSize(new Dimension(700, 300)); 
  141.         frame.getContentPane().add(scrollpane);
  142.         frame.pack();
  143.         frame.setVisible(true);
  144.     }
  145.     
  146.     public static void main(String[] args) {
  147.         new TableExample4(); 
  148.     }
  149. }
  150.