home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 July / CHIP-1999-07.iso / software / jdk / jdk121.exe / disk1 / data1.cab / demos / demo / jfc / Table / TableExample4.java < prev    next >
Encoding:
Java Source  |  1999-03-27  |  6.5 KB  |  147 lines

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