StocksTable2.java Source code

Java tutorial

Introduction

Here is the source code for StocksTable2.java

Source

/*
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);
    }
}