⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stockapplet.java

📁 帮助你系统进入JAVA的学习中来
💻 JAVA
字号:
/* * Copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */package examples.stock;import java.applet.Applet;import java.awt.*;import java.net.URL;import java.rmi.*;import java.rmi.server.*;import java.util.*;/** * The StockApplet exports a remote object, and contacts the StockWatch * server to register interest in receiving stock updates.  The applet * displays the updates in a graph format. */public class StockApplet extends Applet	implements StockNotify, java.io.Serializable{    /** maximum number of updates displayed */    static final int MAX_UPDATES = 34;    /** maximum width of panel */    private static final int width  = 500;    /** maximum height of panel */    private static final int height = 350;    /** vector containing time of each update */    private Vector time = new Vector(MAX_UPDATES);    /** table mapping stock names to stock data */    private Hashtable stockTable = new Hashtable();    /** reference to StockWatch server */    private StockWatch stockWatch = null;        private String name[] = { "Sun", "HP", "Microsoft", "DEC","Novell",			      "IBM","Apple","Netscape","Borland","SGI"};    private Color color[]= { new Color(205,92,92),			     Color.orange,			     new Color(220,220,90),			     new Color(85, 107, 47),			     Color.blue,			     new Color(160,32,240),			     new Color(238, 130, 238),			     Color.black,			     new Color(205,120,92),			     new Color(0,100,0) };        /**     * Notification of stock updates for a particular time.     * @param date the time of the stock update     * @param stocks an array containing the stocks for which the     * object has registered interest.     */    public void update (Date date, Stock[] stock)     {	System.out.println("StockApplet.update: " + date);	// record date	if (time.size() == MAX_UPDATES) { 	    time.removeElementAt(0);	}	time.addElement(date);	// record individual stock updates	int numUpdates = time.size();	for (int i=0; i<stock.length; i++) {	    StockData data = (StockData)stockTable.get(stock[i].symbol);	    if (data != null) {		data.update(stock[i], numUpdates);	    }	}	repaint();    }    /**     * Initialize applet: export the applet as remote object that gets     * notified of stock updates.     */    public void init()     {	try {	    // export the applet as a remote object	    System.out.println("StockApplet.init: exporting remote object");	    UnicastRemoteObject.exportObject(this);	    	    // lookup StockWatch server	    URL base = getDocumentBase();	    String serverName = "//" + base.getHost() + ":" +		getParameter("registryPort") + "/example.stock.StockServer";	    	    System.out.println("StockApplet.init: looking up server");	    stockWatch = (StockWatch)Naming.lookup(serverName);	    // register interest in receiving stock updates	    for (int i=0; i<name.length; i++) {	    System.out.println("StockApplet.init: watch stock " + name[i]);		stockWatch.watch(name[i], this);		stockTable.put(name[i], new StockData(name[i], color[i]));	    }	    System.out.println("StockApplet.init: done registering stocks");	    	} catch (Exception e) {	    // fatal error	    System.out.println("got exception: " + e.getMessage());	    e.printStackTrace();	    return;	}        setLayout(null);	// draw checkboxes	Enumeration enum =  stockTable.elements();	int i=0; 	while (enum.hasMoreElements()) {	    StockData data = (StockData)enum.nextElement();            SensitiveCheckbox cb = new SensitiveCheckbox (data, this);            data.cb = cb;            add(cb);            cb.setState(data.displayed);            cb.reshape(10,i++*25+35,110,18);        }    }    /**     * Called when applet is destroyed; the applet cancels all     * requests for stock updates.     */    public void destroy()     {	// cancel request for stock updates	if (stockWatch != null) {	    try {		stockWatch.cancelAll(this);	    } catch (Exception e) {		// eat exception	    }	}    }    /**     * Called to repaint the panel.     */    public void paint(Graphics g) {        // draw black boarder        g.setColor(Color.black);        g.drawRect(0,0,width-1,height-1);        float miny = 0.0f;        float maxy = 75.0f;	// draw all stock data	Enumeration enum = stockTable.elements();	while (enum.hasMoreElements()) {	    StockData data = (StockData)enum.nextElement();            int size;            Stock[] updates;            synchronized (data.updates) {                size = data.updates.size();                updates = new Stock[size];                data.updates.copyInto(updates);            }	                g.setColor(data.color);            if (data.displayed) {		// draw box around checkbox if mouse is over it                if (data.cb != null && data.cb.haveMouse()) {                    Point p = data.cb.location();                    Dimension d = data.cb.size();                    g.drawRect(p.x-1, p.y-1, d.width+4, d.height+4);                    g.drawRect(p.x-2, p.y-2, d.width+4, d.height+4);		    // point to graph for stock                    if (size > 0)                        g.drawLine(p.x+d.width+2,p.y+10,150,                                   scale(updates[0].current));                }		// draw graph of updates for this stock                int x = 150, inc = 10;                for (int i = 0; i < size; i++) {                    if (updates[i] != null) {                        g.drawRect(x-1,scale(updates[i].current)-1,3,3);                        if ((i < size - 1) && updates[i + 1] != null) {                            int x2 = x + inc;                            g.drawLine(x, scale(updates[i].current), x2,                                       scale(updates[i + 1].current));                        }                    }		    x += inc;		}	    }        }    }    /**     * Used to scale y-values.     */    int scale(float y) {        return height - (int) (y*5+.5);    }    /**     * Make sure that mouseHere is set properly (fix for windows     * display problems).     */    void setMouseHere(boolean display)     {	Enumeration enum = stockTable.elements();	while (enum.hasMoreElements()) {	    StockData data = (StockData)enum.nextElement();	    data.cb.mouseHere = display;	}    }}/** * StockData contains stock updates and display information. */class StockData {    public String name;    public Vector updates;    public Color color;    public boolean displayed;    public SensitiveCheckbox cb;    public StockData(String name, Color cl) {        this.name = name;        this.color = cl;	this.updates = new Vector(StockApplet.MAX_UPDATES);        displayed = true;    }    /**     * Update stock.     */    void update(Stock stock, int numUpdates)     {        synchronized (updates) {            if (updates.size() == StockApplet.MAX_UPDATES) {                updates.removeElementAt(0);            }            // If this stock has not received updates for previous timeslices,            // fill them in with the current update value as well.            if (updates.size() < numUpdates) {                for (int i=updates.size(); i<numUpdates-1; i++) {                    updates.addElement(stock);                }            }            updates.addElement(stock);        }    }}/** * A mouse-sensitive checkbox that records whether the mouse is over * the checkbox. */class SensitiveCheckbox extends Canvas {    StockData data;    boolean state = true;    StockApplet panel;    boolean mouseHere = false;    public boolean haveMouse() {        return mouseHere;    }    public SensitiveCheckbox(StockData data, StockApplet p) {        this.data = data;        panel = p;    }    public boolean mouseEnter(Event evt, int x, int y) {        if (state) {	    panel.setMouseHere(false); // for windows            mouseHere = true;            panel.repaint();        }        return false;    }    public boolean mouseExit(Event evt, int x, int y) {        if (state) {            mouseHere = false;            panel.repaint();        }        return false;    }    public boolean mouseDown(Event evt, int x, int y) {        if (state)            state = false;        else            state = true;        mouseHere=state;        data.displayed = state;        repaint();        panel.repaint();        return true;    }    public void paint(Graphics g) {        g.setColor(Color.black);        g.drawLine(4,4,14,4);        g.drawLine(4,4,4,14);        g.setColor(Color.gray);        g.drawLine(5,14,14,14);        g.drawLine(14,5,14,14);        g.setColor(data.color);        g.fillRect(5,5,8,8);        g.setColor(data.color);        g.drawString(data.name, 17,15);        g.setColor(Color.black);        if (state) {            if (data.color == Color.black)                g.setColor(Color.gray);            if (data.color == Color.blue)                g.setColor(Color.gray);            g.drawLine(5,5,13,13);            g.drawLine(5,6,12,13);            g.drawLine(13,5,5,13);            g.drawLine(13,6,6,13);        }    }    public void setState(boolean s) {        state = s;        repaint();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -