For Computational Finance
Java
Applets and the AWT
Jeff Stephenson(slides adapted from Manu Kumar)
Java Applets?
Applets are Java programs which can run within your web browser
Applets vs. Applications– Applets
run in the web browser subject to security restrictions do not have a main()
– Applications full fledged Java programs run from commandline no security restrictions
So far we’ve built applications– for good reason too since we’ll need what we’ve learnt!
Java Applet Sandbox
Applets Vs. Application– Applet: runs in Web browser.– Application: runs in any Java VM.
Applet restrictions (http://www.javasoft.com/sfaq)
– no access to Client’s file System cannot check for existence, read, write, or rename a file cannot create or list the contents of a directory cannot check a file’s type, timestamp or size.
– Network connection ONLY to originating host cannot connect to arbitrary servers / sites across the net key issue when designing client-server applets
Java Architecture in light of Sandbox
DB
WWW
Applet
The Web server machine mustact as the proxy for all calls to services on other machines
An overly simplified description :
Java Displaying applets in the browser
To add a Java applet to your HTML page– use <APPLET> </APPLET tag
Full Syntax: <APPLET CODE="..." WIDTH="..." HEIGHT="...”
[CODEBASE="..." ALT="..." NAME="...” ALIGN=left | right | top VSPACE="..." HSPACE="...” ]>[<PARAM NAME="..." VALUE="...">][Text for non-Java supporting browsers]</APPLET >
Browsers treatment of an applet tag– Java enabled browser will load applet– non-Java enabled browser will ignore <APPLET>
it will display Text for non-Java supporting browsers
Java JavaPhysical Example
Place compiled Applet classes in directory under web server
Include <APPLET> tag in HTML file– <APPLET CODEBASE="OtherClasses"
CODE="JavaEnabled.class" WIDTH=375 HEIGHT=46><H2 ALIGN=CENTER>Your Browser is NOT Java Enabled!</H2></APPLET>
Load up page in Java enabled browser!
Java Applet Class
Applets inherit from java.applet.Applet– provides basic structure for applet to run in a browser
What you must/should override– default constructor, init(), start(), stop(), destroy()
For a threaded applet – implement Runnable interface– override run()
For graphics– may override repaint(), update() and paint()
Java Applet Lifecycle
Browser loads HTML page– Find <APPLET> tag– Locates code using codebase– Downloads .class files to browser– Browser verifies .class files for security
Applet methods executed AUTOMATICALLY in this order:– init()– start()– leaving the page calls stop()– returning to the page calls start() again– exiting the browser or leaving the page permanently calls
destroy()
Java HelloWorldApplet
import java.awt.*;import java.applet.*;
public class HelloWorld extends Applet {
public void init() { resize (150, 25); }
public void paint(Graphics g) { g.drawString("Hello World!", 50, 25); }}
Java Applets in the Real World
To make applets more functional– May need a complicated interface– Must respond to events– Do something useful
Applet uses– Make information and functionality available via browser!– No download necessary– Works automatically– Browser becomes the “platform”
Java Handling Events
Sribble Applet
public boolean mouseDown(Event e, int x, int y) {lastX = x;lastY = y;return true;
}
public boolean mouseDrag(Event e, int x, int y) { Graphics g = getGraphics(); g.drawLine(lastX, lastY, x, y); lastX = x; lastY = y; return true; }
Java Scribble Applet CodeWalk
Notice the two methods:– mouseDown– mouseDrag
These get call automatically when any mouse event occurs– all we need to do is override them and take the appropriate
action
If we run the applet– we can draw anything we like with the mouse!
Java Making applet functional
Requires:– may more graphical components
buttons labels checkboxes text fields etc.
– handling events other than mouse events click on button check a checkbox doubleclick in a list type in a text box etc.
To do this we’ll need the AWT!!!
Java AWT
AWT– Abstract Windowing Toolkit– Awkward Windowing Toolkit ?!?
Java’s library for graphical elements– Makes EXTENSIVE use of inheritance and OO techniques!
That’s why you needed to learn them before we got to Applets
– Hierarchical approach to developing “Components” you’ll see when we look at the API
– The AWT is platform independent gives you the same components and “widgets” on all platforms! Allows you to write code for the Java-platform as opposed to
Windows or Mac or UNIX
Java AWT Classes
The two MAIN classes in the AWT are– Component– Container
Component– nearly all the “widgets” in the AWT inherit from Component
it inherits attributes and behavior from Component
Container– a placeholder– a Container can “contain” other Components– a Container is a Component
I.e. a Container can contain another Container
Java Layout Managers
AWT uses the concept of “Layout Managers” to define the user interface
Layout Managers– tell the AWT where to position a component or a container– tell the AWT what to do when we resize the application/applet!
Dynamic resizing Layout Managers specify everything using “relationships”
– There are lots of layout managers, we’ll look at a few… GridLayout BorderLayout
Java Handling Events
Two approaches to handling events– we saw one approach earlier
overriding specific event handler methods such as mouseDown, mouseDrag etc.
– today we will see the better approach using Listners
Java AWT Widgets
Frame Panel Canvas Button Checkbox Choice Label List ScrollBar TextArea TextField
Java AWT development process
Steps:– Create a Container
An applet extends Panel and is therefore already a Container
– Set the layout manager– Instantiate the components– Add the components to the container using the layout manager– Call show() to actually draw the components on the screen
Tricks:– Remember the containers can be NESTED
VERY USEFUL TRICK!
– Use multiple nested layouts for complex user interfaces
Java LayoutManagers
We’ll only look at two today– BorderLayout
Provide North, South, East, West and Center regions
– GridLayout Divides the container into equally spaced rows and columns
Lets see some working Demos and explanations!!– Off to the Java Tutorial from here…– http://www.javasoft.com/docs/books/tutorial/ui/layout/using.html
Java Nesting in AWT
Key Concept:– A Container is also a Component
in most cases we care about for this class
Example Problem– Say we wish to create the
layout shown on the right– Characteristics:
Button Bar on the left TextField at the bottom TextArea in the rest
– Note: buttons are equally spaced
Java Nesting in AWT (2)
Process– Layout the design you want on paper or a whiteboard!– Analyze the design to see what sections you can identify
Buttons on the left can be one possible piece TextArea and TextField are the other two pieces
– Work from top to bottom identify a suitable layout for the big pieces identified above
– BorderLayout (surprise!)• Buttons in the West• TextField in the South• TextArea in the North
But what about the “Buttons”– GridLayout for the buttons!
• Here is where we’ll use nesting
Java Nesting in AWT (3)
Sample Solution– (see ButtonPad.java):
// set the top level layout setLayout(new BorderLayout(3,3));
// create the text area notesArea = new WrappedTextArea(10, 30); notesArea.setEditable(false);
// add the text area add("Center", notesArea);
// create the text field entryField = new TextField(40);
// add the entry field add("South", entryField);
// create a NEW PANEL for NESTING! Panel buttonPanel = new Panel();
//set the layout in this panel buttonPanel.setLayout(new GridLayout(0, 1, 5, 5));
//create and add the buttons button1 = new Button("Button 1"); button2 = new Button("Button 2"); button3 = new Button("Button 3"); button4 = new Button("Button 4"); button5 = new Button("Button 5"); buttonPanel.add(button1); buttonPanel.add(button2); buttonPanel.add(button3); buttonPanel.add(button4); buttonPanel.add(button5);
//add the panel to the west of the main BorderLayout add("West", buttonPanel);
Java Handling Events
Two approaches to handling events– we saw one approach earlier
overriding specific event handler methods such as mouseDown, mouseDrag etc.
– today we will see the better approach using Listners
Java Handling Events
Types of events:– ACTION_EVENT, LIST_SELECT, LIST_DESELECT,
WINDOW_DESTROY, WINDOW_ICONIFY, WINDOW_DEICONIFY, WINDOW_MOVED, MOUSE_DOWN, MOUSE_UP, MOUSE_DRAG, KEY_PRESS, KEY_ACTION, KEY_RELEASE, KEY_ACTION_RELEASE, GOT_FOCUS, LOST_FOCUS, MOUSE_ENTER, MOUSE_EXIT, MOUSE_MOVE
All can be handled with special listners– We’ll use a MouseListner as an example
OR you can override the methods corresponding to each event– what we saw in the Scribble applet
Java Handling Events (2)
public class MouseEventDemo ... implements MouseListener
{
...//where initialization occurs:
//Register for mouse events on blankArea and applet (panel).
blankArea.addMouseListener(this);
addMouseListener(this);
...
Java Handling Events (3)
Continued …..
public void mousePressed(MouseEvent e) {
saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); }
public void mouseReleased(MouseEvent e) {
saySomething("Mouse released; # of clicks: " + e.getClickCount(), e); }
public void mouseEntered(MouseEvent e) {
saySomething("Mouse entered", e); }
……..}