Mega Code Archive

 
Categories / Java / Swing JFC
 

Colored Table CellRenderer

/* Swing, Second Edition by Matthew Robinson, Pavel Vorobiev */ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Vector; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumn; public class StocksTable2 extends JFrame {   protected JTable m_table;   protected StockTableData m_data;   protected JLabel m_title;   public StocksTable2() {     super("Stocks Table");     setSize(600, 300);     m_data = new StockTableData();     m_title = new JLabel(m_data.getTitle(), new ImageIcon("money.gif"),         SwingConstants.LEFT);     m_title.setFont(new Font("TimesRoman", Font.BOLD, 24));     m_title.setForeground(Color.black);     getContentPane().add(m_title, BorderLayout.NORTH);     m_table = new JTable();     m_table.setAutoCreateColumnsFromModel(false);     m_table.setModel(m_data);     for (int k = 0; k < StockTableData.m_columns.length; k++) {       DefaultTableCellRenderer renderer = new ColoredTableCellRenderer();       renderer           .setHorizontalAlignment(StockTableData.m_columns[k].m_alignment);       TableColumn column = new TableColumn(k,           StockTableData.m_columns[k].m_width, renderer, null);       m_table.addColumn(column);     }     JTableHeader header = m_table.getTableHeader();     header.setUpdateTableInRealTime(false);     JScrollPane ps = new JScrollPane();     ps.getViewport().add(m_table);     getContentPane().add(ps, BorderLayout.CENTER);     WindowListener wndCloser = new WindowAdapter() {       public void windowClosing(WindowEvent e) {         System.exit(0);       }     };     addWindowListener(wndCloser);     setVisible(true);   }   public static void main(String argv[]) {     new StocksTable2();   } } class ColoredTableCellRenderer extends DefaultTableCellRenderer {   public void setValue(Object value) {     if (value instanceof ColorData) {       ColorData cvalue = (ColorData) value;       setForeground(cvalue.m_color);       setText(cvalue.m_data.toString());     } else if (value instanceof IconData) {       IconData ivalue = (IconData) value;       setIcon(ivalue.m_icon);       setText(ivalue.m_data.toString());     } else       super.setValue(value);   } } class ColorData {   public Color m_color;   public Object m_data;   public static Color GREEN = new Color(0, 128, 0);   public static Color RED = Color.red;   public ColorData(Color color, Object data) {     m_color = color;     m_data = data;   }   public ColorData(Double data) {     m_color = data.doubleValue() >= 0 ? GREEN : RED;     m_data = data;   }   public String toString() {     return m_data.toString();   } } class IconData {   public ImageIcon m_icon;   public Object m_data;   public IconData(ImageIcon icon, Object data) {     m_icon = icon;     m_data = data;   }   public String toString() {     return m_data.toString();   } } class StockData {   public static ImageIcon ICON_UP = new ImageIcon("ArrUp.gif");   public static ImageIcon ICON_DOWN = new ImageIcon("ArrDown.gif");   public static ImageIcon ICON_BLANK = new ImageIcon("blank.gif");   public IconData m_symbol;   public String m_name;   public Double m_last;   public Double m_open;   public ColorData m_change;   public ColorData m_changePr;   public Long m_volume;   public StockData(String symbol, String name, double last, double open,       double change, double changePr, long volume) {     m_symbol = new IconData(getIcon(change), symbol);     m_name = name;     m_last = new Double(last);     m_open = new Double(open);     m_change = new ColorData(new Double(change));     m_changePr = new ColorData(new Double(changePr));     m_volume = new Long(volume);   }   public static ImageIcon getIcon(double change) {     return (change > 0 ? ICON_UP : (change < 0 ? ICON_DOWN : ICON_BLANK));   } } class ColumnData {   public String m_title;   public int m_width;   public int m_alignment;   public ColumnData(String title, int width, int alignment) {     m_title = title;     m_width = width;     m_alignment = alignment;   } } class StockTableData extends AbstractTableModel {   static final public ColumnData m_columns[] = {       new ColumnData("Symbol", 100, JLabel.LEFT),       new ColumnData("Name", 160, JLabel.LEFT),       new ColumnData("Last", 100, JLabel.RIGHT),       new ColumnData("Open", 100, JLabel.RIGHT),       new ColumnData("Change", 100, JLabel.RIGHT),       new ColumnData("Change %", 100, JLabel.RIGHT),       new ColumnData("Volume", 100, JLabel.RIGHT) };   protected SimpleDateFormat m_frm;   protected Vector m_vector;   protected Date m_date;   public StockTableData() {     m_frm = new SimpleDateFormat("MM/dd/yyyy");     m_vector = new Vector();     setDefaultData();   }   public void setDefaultData() {     try {       m_date = m_frm.parse("4/6/1999");     } catch (java.text.ParseException ex) {       m_date = null;     }     m_vector.removeAllElements();     m_vector.addElement(new StockData("ORCL", "Oracle Corp.", 23.6875,         25.375, -1.6875, -6.42, 24976600));     m_vector.addElement(new StockData("EGGS", "Egghead.com", 17.25,         17.4375, -0.1875, -1.43, 2146400));     m_vector.addElement(new StockData("T", "AT&T", 65.1875, 66, -0.8125,         -0.10, 554000));     m_vector.addElement(new StockData("LU", "Lucent Technology", 64.625,         59.9375, 4.6875, 9.65, 29856300));     m_vector.addElement(new StockData("FON", "Sprint", 104.5625, 106.375,         -1.8125, -1.82, 1135100));     m_vector.addElement(new StockData("ENML", "Enamelon Inc.", 4.875, 5,         -0.125, 0, 35900));     m_vector.addElement(new StockData("CPQ", "Compaq Computers", 30.875,         31.25, -0.375, -2.18, 11853900));     m_vector.addElement(new StockData("MSFT", "Microsoft Corp.", 94.0625,         95.1875, -1.125, -0.92, 19836900));     m_vector.addElement(new StockData("DELL", "Dell Computers", 46.1875,         44.5, 1.6875, 6.24, 47310000));     m_vector.addElement(new StockData("SUNW", "Sun Microsystems", 140.625,         130.9375, 10, 10.625, 17734600));     m_vector.addElement(new StockData("IBM", "Intl. Bus. Machines", 183,         183.125, -0.125, -0.51, 4371400));     m_vector.addElement(new StockData("HWP", "Hewlett-Packard", 70,         71.0625, -1.4375, -2.01, 2410700));     m_vector.addElement(new StockData("UIS", "Unisys Corp.", 28.25, 29,         -0.75, -2.59, 2576200));     m_vector.addElement(new StockData("SNE", "Sony Corp.", 96.1875, 95.625,         1.125, 1.18, 330600));     m_vector.addElement(new StockData("NOVL", "Novell Inc.", 24.0625,         24.375, -0.3125, -3.02, 6047900));     m_vector.addElement(new StockData("HIT", "Hitachi, Ltd.", 78.5, 77.625,         0.875, 1.12, 49400));   }   public int getRowCount() {     return m_vector == null ? 0 : m_vector.size();   }   public int getColumnCount() {     return m_columns.length;   }   public String getColumnName(int column) {     return m_columns[column].m_title;   }   public boolean isCellEditable(int nRow, int nCol) {     return false;   }   public Object getValueAt(int nRow, int nCol) {     if (nRow < 0 || nRow >= getRowCount())       return "";     StockData row = (StockData) m_vector.elementAt(nRow);     switch (nCol) {     case 0:       return row.m_symbol;     case 1:       return row.m_name;     case 2:       return row.m_last;     case 3:       return row.m_open;     case 4:       return row.m_change;     case 5:       return row.m_changePr;     case 6:       return row.m_volume;     }     return "";   }   public String getTitle() {     if (m_date == null)       return "Stock Quotes";     return "Stock Quotes at " + m_frm.format(m_date);   } }