// TradeViewer.java // Author: P Gray // Simple scrollable list over a set of financial records. // Selected list element is displayed in a separate pane. import java.awt.*; import java.awt.event.*; import java.util.Vector; import java.util.Enumeration; public class TradeViewer extends Frame { private SourceDomain sourceDomain; private List listWidget; private ListPanel listPanel; private StarFieldPanel starFieldPanel; private RecordPanel recordPanel; public TradeViewer(String title, String filename) { // create a new source domain sourceDomain = new SourceDomain(); // load it with sourceDomain sourceDomain.load(filename); // initialise presentation setTitle(title); setLayout(new BorderLayout()); setSize(new Dimension(600,800)); // add components listPanel = new ListPanel(this); add("West", new ListPanel(this)); recordPanel = new RecordPanel(this, sourceDomain.labels()); add("South", recordPanel); starFieldPanel = new StarFieldPanel(this); add("Center", starFieldPanel); // add event handlers addWindowListener(new WindowHandler(this)); // show it setVisible(true); } public Insets getInsets() { // space my elements return new Insets(25,5,5,5); } public static void main(String args[]) { TradeViewer tradeList = new TradeViewer("Trade Viewer", "data.csv"); } // accessing methods public SourceDomain sourceDomain() { return sourceDomain; } // updating methods - called when an item in the source domain is selected public void handleSelection(int row) { if (row >= 0) { recordPanel.update(sourceDomain.record(row)); starFieldPanel.update(row); } } } // end TradeViewer class ListPanel extends Panel implements ItemListener { private List listWidget; private TradeViewer application; public ListPanel(TradeViewer application) { this.application = application; // initialise presentation setBackground(Color.lightGray); setLayout(new GridLayout(1,1)); // create list widget listWidget = new List(application.sourceDomain().dataSize()); // put record labels into list Vector idList = application.sourceDomain().ids(); Enumeration idListElements = idList.elements(); while (idListElements.hasMoreElements()) listWidget.add((String)idListElements.nextElement()); // add component add(listWidget); // add listener on the list widget listWidget.addItemListener(this); } public void itemStateChanged(ItemEvent ie) { application.handleSelection(listWidget.getSelectedIndex()); } } // end ListPanel class RecordPanel extends Panel { private Vector fieldLabelWidgets, fieldValueWidgets; private TradeViewer application; public RecordPanel(TradeViewer application, Vector labels) { this.application = application; // initialise presentation setBackground(Color.lightGray); setLayout(new GridLayout(14,2)); // create the text fields fieldLabelWidgets = new Vector(); fieldValueWidgets = new Vector(); makeWidgets(labels); // put the text fields into the panel Enumeration fieldLabelWidgetsElements = fieldLabelWidgets.elements(); Enumeration fieldValueWidgetsElements = fieldValueWidgets.elements(); while (fieldLabelWidgetsElements.hasMoreElements()) { add((TextField)fieldLabelWidgetsElements.nextElement()); add((TextField)fieldValueWidgetsElements.nextElement()); } } private void makeWidgets(Vector labels) { TextField tf; for (int i = 0; i < labels.size() ; i++) { tf = new TextField( (String) labels.elementAt(i) ); tf.setEditable(false); fieldLabelWidgets.addElement(tf); tf = new TextField("unselected"); tf.setEditable(false); fieldValueWidgets.addElement(tf); } } public void update(Vector record) { for (int i = 0; i < record.size(); i++) ((TextField) fieldValueWidgets.elementAt(i)).setText((String) record.elementAt(i)); repaint(); } } // end RecordPanel class WindowHandler extends WindowAdapter { private TradeViewer appWindow; public WindowHandler(TradeViewer appWindow) { this.appWindow = appWindow; } public void windowClosing(WindowEvent we) { appWindow.setVisible(false); appWindow.dispose(); System.exit(0); } }