import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*; import java.net.URL; import java.io.StreamTokenizer; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Date; import java.text.SimpleDateFormat; /* * This applet implements the graphical user interface of * the StockPlotter application. */ public class StockPlotterInterface extends Applet implements ItemListener, KeyListener{ // Local variables Vector company_tickers; // Widgets Choice choice; Checkbox cb0; Checkbox cb1; Checkbox cb2; TextField tf_ticker; TextField tf_start; TextField tf_stop; TextArea textarea; Button config; TextField tf_block_size; TextField tf_average_length; TextField tf_knot_dist; public void init(){ // Build the user interface. Label l; setBackground(Color.lightGray); setForeground(Color.black); GridBagLayout gbl = new GridBagLayout(); setLayout(gbl); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.WEST; //Checkboxes... gbc.gridx = 4; gbc.gridy = 3; gbc.gridwidth = 1; gbc.weighty = 2.0; gbc.insets.top = 20; l = new Label("Filters:"); gbl.setConstraints(l, gbc); add(l); gbc.insets.top = 0; gbc.gridy = 4; cb0 = new Checkbox("Trendline", false); cb0.setForeground(Color.blue); gbl.setConstraints(cb0, gbc); add(cb0); gbc.gridy = 5; cb1 = new Checkbox("Gliding average", false); cb1.setForeground(Color.red); gbl.setConstraints(cb1, gbc); add(cb1); gbc.gridy = 6; cb2 = new Checkbox("Spline approx.", false); cb2.setForeground(Color.yellow); gbl.setConstraints(cb2, gbc); add(cb2); gbc.insets.bottom = 20; gbc.gridy = 7; config = new Button("Configure filters"); gbl.setConstraints(config, gbc); add(config); cb0.addItemListener(this); cb1.addItemListener(this); cb2.addItemListener(this); //Ticker list... gbc.insets.bottom = 0; gbc.weighty = 1.0; gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; gbc.insets.left = 30; l = new Label("Company:"); gbl.setConstraints(l, gbc); add(l); gbc.insets.left = 0; gbc.gridx = 1; gbc.gridwidth = 3; choice = new Choice(); choice.addItemListener(this); choice.add("Pick company"); gbl.setConstraints(choice, gbc); add(choice); //Start and Stop... gbc.insets.left = 30; gbc.gridy = 1; gbc.gridx = 0; gbc.gridwidth = 1; l = new Label("Start:"); gbl.setConstraints(l, gbc); add(l); gbc.insets.left = 0; gbc.gridx = 1; tf_start = new TextField(8); tf_start.setText("01.01.97"); tf_start.addKeyListener(this); gbl.setConstraints(tf_start, gbc); add(tf_start); gbc.gridx = 2; gbc.insets.left = 20; l = new Label("Stop:"); gbl.setConstraints(l, gbc); add(l); gbc.insets.left = 0; gbc.gridx = 3; tf_stop = new TextField(8); Date now = new Date(); SimpleDateFormat df = new SimpleDateFormat("dd.MM.yy"); tf_stop.setText(df.format(now)); tf_stop.addKeyListener(this); gbl.setConstraints(tf_stop, gbc); add(tf_stop); //TextArea gbc.gridx = 0; gbc.gridy = 9; gbc.gridwidth = 5; gbc.fill = GridBagConstraints.HORIZONTAL; textarea = new TextArea("", 4, 60, TextArea.SCROLLBARS_VERTICAL_ONLY); textarea.setEditable(false); textarea.setBackground(Color.gray); gbl.setConstraints(textarea, gbc); add(textarea); //PlotArea gbc.gridx = 0; gbc.gridy = 2; gbc.gridwidth = 4; gbc.gridheight = 7; gbc.weighty = 6.0; gbc.weightx = 2.0; l = new Label("This should have been the plot window."); gbl.setConstraints(l, gbc); add(l); // Read company info (dummy version) readCompanyInfo(); } /* * Catches events from choice menu and Checkboxes */ public void itemStateChanged(ItemEvent e){ ItemSelectable curr = e.getItemSelectable(); if(curr == choice && choice.getSelectedIndex() != 0) textarea.append("You selected: " + company_tickers.elementAt(choice.getSelectedIndex() - 1) + ".\n"); else{ if(curr == cb0){ if(e.getStateChange() == ItemEvent.SELECTED) textarea.append("Trendline turned on.\n"); else textarea.append("Trendline turned off.\n"); }else if(curr == cb1){ if(e.getStateChange() == ItemEvent.SELECTED) textarea.append("Gliding average turned on.\n"); else textarea.append("Gliding average turned off.\n"); }else if(curr == cb2){ if(e.getStateChange() == ItemEvent.SELECTED) textarea.append("Spline approx. turned on.\n"); else textarea.append("Spline approx. turned off.\n"); } } } public void keyPressed(KeyEvent event) {} public void keyTyped(KeyEvent event) {} /* * Catches key presses (the ticker) */ public void keyReleased(KeyEvent event){ if(event.getKeyCode() == KeyEvent.VK_ENTER){ if((event.getComponent() == tf_start) || (event.getComponent() == tf_stop)) textarea.append("New date range selected.\n"); } } void readCompanyInfo(){ company_tickers = new Vector(); // Fill with dummy information, and add to choice menu. company_tickers.addElement("TOTX"); company_tickers.addElement("NHY"); company_tickers.addElement("SAG"); choice.add("Totalindeksen"); choice.add("Norsk Hydro"); choice.add("Saga Petroleum A"); } /* * Empty paint method, since all components used can redraw themself. */ public void paint(Graphics g){} }// class StockPlotterInterface