    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: What Is Swing?</title>
        <link>https://members.accu.org/index.php/articles/1125</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>




<div class="xar-mod-head"><span class="xar-mod-title">Programming Topics + CVu Journal Vol 13, #3 - Jun 2001</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c65/">Programming</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c77/">CVu</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c120/">133</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c65-120/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c65+120/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;What Is Swing?</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 03 June 2001 13:15:46 +01:00 or Sun, 03 June 2001 13:15:46 +01:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e22" id="d0e22"></a>What Is
Swing?</h2>
</div>
<p>&quot;Swing&quot; is the name of an Application Programming Interface for
the Java platform. In a nutshell it is the project name for
plugable look-and-feel graphical user interface. Swing is one fifth
of Sun's Java division architecture for user interface design,
better known as the Java Foundation Classes. Confused? You won't be
if you can understand that this is just marketing between two large
companies<sup>[<a name="d0e27" href="#ftn.d0e27" id=
"d0e27">1</a>]</sup>. Simply put the JFC consists of the five
parts: the Abstract Windows Toolkit (AWT), Accessibility, Java 2D,
Drag and Drop, and Swing. Accessibility is the programming
interface for the visually impaired and/or audio inhibited. Java 2D
is an API for drawing, painting, rendering, and printing
two-dimensional graphics. Drag and drop is another API for dragging
and dropping data through a user interface. It compliments the cut
and paste functionality. The AWT was the original user interface
for first Java release and it is based on the native windows
look-and-feel where systems calls are called to render the user
interface. AWT is thus described as <span class=
"bold"><b>heavyweight</b></span> user interface. Swing is a viable
solution and is built on top of AWT, but the painting (rendering)
of the user interface is done with Java primitives itself. In other
words Java emulates the look-and-feel of the native platform (or
platforms) without making use of the native systems call itself.
All widgets in Swing are available on all platforms that Java runs
whether the native system windows toolkit has this feature or not.
Because Java virtual machine is rendering the user interface, this
mode of emulation is called <span class=
"bold"><b>lightweight</b></span>. The last advantage gives this
technique an edge over other user interface solutions. Swing's
lightweight architecture allows dynamic look-and-feels to be
<span class="bold"><b>hot-swapped</b></span> simultaneously as a
Java application is running.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e40" id="d0e40"></a>Why Swing?</h2>
</div>
<p>Before Swing was conceived all Java user interfaces where
written with the limitations of the AWT, which caused problems of
portability for pre-Swing applications, because the user interface
would be different on one vendor's operating system to another.
Another problem was one vendor's system would have a special widget
that the other system did not have and vice versa. This meant that
AWT is rather lacklustre, because it had to confirm to the most
common denominator of widgets. (Incidentally AWT architecture is
based on the BRIDGE software pattern where there is a Java
component factory and a native component factory for each windows
system.) In contrast Swing provides many more components than AWT.
Additionally there is now a default standard look-and-feel for Java
applications called <span class="emphasis"><em>Metal</em></span>.
So users and developer never need feel out of place wherever they
choose run their programs, because Java Swing programs can emulate
the operating system's native look and feel (provided the necessary
the necessary plugable look and feel implementation has been
written for it).</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e48" id="d0e48"></a>Swing
Components and Packages</h2>
</div>
<p>Swing provides a large set of components from a simple push
button to a complex table component. It has much more functionality
than the original &quot;heavy&quot; AWT. You simply import the necessary Java
Swing package to get started using Swing. If you have the latest
J2SE installed then it is included as standard. Here are the
packages that are most important for this introduction.</p>
<div class="table"><a name="d0e53" id="d0e53"></a>
<p class="title c2">Table 1. Important Java Packages for Swing</p>
<table summary="Important Java Packages for Swing" border="1"
cellspacing="0">
&lt;colgroup&gt;
&lt;col&gt;
&lt;col&gt;&lt;/colgroup&gt;
&lt;thead&gt;
<tr>
<th>Package</th>
<th>Description</th>
</tr>
&lt;/thead&gt;
&lt;tbody&gt;
<tr>
<td><tt class="literal">javax.swing</tt></td>
<td>Contains the basic swingcomponents, default data model &amp;
utility classes</td>
</tr>
<tr>
<td><tt class="literal">javax.swing.border</tt></td>
<td>Contains the classes &amp; interfaces for decorating
borders</td>
</tr>
<tr>
<td><tt class="literal">javax.swing.event</tt></td>
<td>Contains all swing specific event types &amp; borders</td>
</tr>
<tr>
<td><tt class="literal">javax.swing.table</tt></td>
<td>Contains class &amp; interfaces for Swing JTable
components</td>
</tr>
<tr>
<td><tt class="literal">javax.swing.text</tt></td>
<td>Contains class &amp; interfaces for Swing text components</td>
</tr>
<tr>
<td><tt class="literal">javax.swing.tree</tt></td>
<td>Contains class &amp; interfaces for Swing JTree components</td>
</tr>
&lt;/tbody&gt;
</table>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e100" id="d0e100"></a>Design of
Swing</h2>
</div>
<p>The designers of Swing had the clever foresight to use a design
pattern called the MODEL-VIEW-CONTROLLER (also known as MVC) in
their architecture. This pattern solves a well-known user interface
design problem. That is how to separate the presentation of the
application from the business application logic. The business logic
defines how the data is manipulated. In other word the model is
maintaining the state and transaction of the data. Your application
code belongs to the MODEL. The presentation is the responsibility
of the user interface, and here is where Swing involved, it
displays a representation of the data or displays a means of
controlling the data. Therefore Swing provides you, the software
developer, the ready-made CONTROLLER and VIEW. All you have to do
is know how it works. Simple. So the controller is responsible for
handling event-driven input or stimulus that ultimately affects the
model. This is your keyboard, mouse or graphics tablet for
instance. In computer science we call this input &quot;the feel&quot;,
because this is your sensory input. The &quot;view&quot; is responsible for
the presentation of the data that exists in the model. The way
information in the data model is rendered is called &quot;the look&quot;.</p>
<p>The model, the view, the controller are not necessarily simple
objects. They can be many objects in fact. You should think of them
as separate entities that are loosely coupled together to form the
design. The flexibility of the MVC is that each part of the
architecture can be linked &amp; changed with affecting the other
parts. For instance my model might be database table and the view
could be a component that displays that data as a table or a view
that prints the table or a view that draws a pie chart of the data.
The most of important is that the chosen type view does not affect
the model. Likewise the model might be changed or improved
algorithmically without interfering with the view (or views).</p>
<div class="figure"><a name="d0e107" id="d0e107"></a>
<p class="title c2">Figure 1. </p>
<div class="mediaobject"><img src=
"resources/Figure1%20Swing%20MVC.png"></div>
</div>
<p>Swing is an adaptation of the MVC pattern, because it only
provides two and one thirds bits of the whole part. The third
remaining bit is the data model, which Swing defines in the most
part as Java interfaces and/or abstract Java classes. Swing
component, then, are very closely associated to a data model. The
MVC architecture makes it easy to customise, inherit or replace a
component's data model. Swing provides common data models such as a
<tt class="classname">ButtonModel</tt>, <tt class=
"classname">ListModel</tt>, <tt class="classname">Document</tt>,
<tt class="classname">TableModel</tt> and <tt class=
"classname">TreeModel</tt> for instance. A <tt class=
"classname">JButton</tt>, which is a simple push button component,
is associated with a <tt class="classname">ButtonModel</tt>. A
<tt class="classname">JTableModel</tt>, which is a complex table
component, is associated with a <tt class=
"classname">TreeModel</tt>.</p>
<div class="figure"><a name="d0e141" id="d0e141"></a>
<p class="title c2">Figure 2. </p>
<div class="mediaobject"><img src=
"resources/Figure2%20Swing.png"></div>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e146" id="d0e146"></a>Delegation
&amp; PLAF</h2>
</div>
<p>The &quot;look-and-feel&quot; of any Swing application is changeable at
run-time. Swing performs this trick by defining plugable
look-and-feel classes (PLAF). The PLAF emulates the native
application windows LAF. There is a PLAF for Microsoft Windows,
another one for Open Motif, and a generic PLAF called <span class=
"emphasis"><em>Metal</em></span>. How does this work? Swing makes
use of the BRIDGE pattern once again and ABSTRACT FACTORY through a
technique called delegation. Every Swing component pushes the
responsibility of rendering itself to a special class called a
<span class="emphasis"><em>User Interface Delegate</em></span>.
Every PLAF provides versions of the UI delegate that render an
emulation of the target LAF. So in the Windows PLAF there is a UI
delegate that renders a <tt class="classname">JButton</tt>
component in the windows appropriate style. The Motif PLAF has a UI
delegate class that renders the same JButton component in the Open
Motif toolkit style. And that ladies and gentleman is what Swing is
really all about? It is flexible enough to emulate a native and
feel without compromising the quality of professional and
contemporary user interface design. You can really swing it.</p>
<div class="figure"><a name="d0e160" id="d0e160"></a>
<p class="title c2">Figure 3. </p>
<div class="mediaobject"><img src=
"resources/Figure3%20Swing.png"></div>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e165" id="d0e165"></a>Swing Easy to
Start</h2>
</div>
<p>Let us start programming in Swing. If you have programmed with
the AWT, then switching to the new Swing interface is just a step
up the ladder. Most AWT components can be changed into a Swing
component by prefixing the capital letter &quot;J&quot;. For instance an AWT
<tt class="classname">java.awt.Button</tt> becomes a Swing
<tt class="classname">javax.swing.JButton</tt>. Some of the
accessor and mutator methods have changed, but that is what the
JavaDoc is there for!</p>
<p>For this introduction I assume that you have some experience of
AWT and the event delegation model that has been around since the
JDK 1.1. Swing inherits many features from the AWT, but adds many
new ones. You should also be familiar with the
java.event.ActionEvent and <tt class=
"classname">java.event.ActionListener</tt>. Because I am not going
to give you that same all &quot;Hello Java Swing Applet&quot; rubbish, rather
we are going jump straight into a mock up Java application. Our
first simple Swing application is a simple <tt class=
"classname">JFrame</tt> with two <tt class="classname">JList</tt>
components and two <tt class="classname">JButtons</tt>. Initially
the first list is full of data and the second is empty. The first
button &quot;add&quot; allows you add one selected item in the first list to
the other. The second button &quot;remove&quot; allows you remove one
selected item from the second list. This preferences/configuration
design is now so common now in many applications. I first saw it on
the Apple Macintosh Finder, and it has been copied from one
application, one operation system to another that it is you know
what to do with your eyes wide shut.</p>
<p>Here is the code of the first Swing <span class=
"emphasis"><em>prototype</em></span> application:</p>
<pre class="programlisting">
// File: PreferencesApp1.java
import java.util.*; 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;  (1)
public class PreferencesApp1 extends JFrame 
implements ActionListener {
  protected JButton  bt_add,  bt_remove,  bt_quit;
  protected JList  list_availableFont,  list_configFont;
  public PreferencesApp1( String title ){
  super(title);    (2)  
  GraphicsEnvironment lge = 
    GraphicsEnvironment.getLocalGraphicsEnvironment();
  String [] familyNames = lge.getAvailableFontFamilyNames();  (3)
  
  DefaultListModel availableModel = new DefaultListModel();
  for ( int j=0; j&lt;familyNames.length; ++j ) 
    availableModel.addElement( familyNames[j] );  (4)
  DefaultListModel configModel = new DefaultListModel();
  
  Container container = getContentPane();
  container.setLayout( new BorderLayout( 1,1 ) );    (5)
  JLabel label = new JLabel(&quot;Swing Preferences App&quot;);  (6)
  label.setFont( new Font( &quot;Arial&quot;, Font.BOLD, 18 ) );
  label.setForeground( Color.black );
  label.setBackground( Color.yellow );
  label.setOpaque(true);
  container.add( label, BorderLayout.NORTH );
  
  list_availableFont = new JList( availableModel );  (7)
  JScrollPane scroller_availableFont = 
    new JScrollPane( list_availableFont );
  container.add( scroller_availableFont, BorderLayout.WEST );
  list_configFont = new JList( configModel );    (8)
  JScrollPane scroller_configFont = 
    new JScrollPane( list_configFont );
  container.add( scroller_configFont, BorderLayout.EAST );
  Box box = Box.createVerticalBox();      (9)
  container.add( box, BorderLayout.CENTER );
  bt_add = new JButton( &quot;Add &gt;&quot; );
  box.add( Box.createVerticalStrut( 50 ));      (10)
  box.add( bt_add );          (11)
  bt_remove = new JButton( &quot;Remove &lt;&quot; );
  box.add( Box.createVerticalStrut( 5 ));
  box.add( bt_remove );
  bt_quit = new JButton( &quot;Quit&quot; );
  box.add( Box.createVerticalStrut( 25 ));
  box.add( bt_quit );
  bt_quit.addActionListener(this);        (12)
  }
  public void actionPerformed( ActionEvent evt )
  {
  Object src = evt.getSource();        (13)
  if ( src == bt_quit ) {
    System.out.println( &quot;Goodbye.&quot;);
    System.exit(0);
  }
  }
  public static void main( String [] args )
  {
  PreferencesApp1 prefApp = 
    new PreferencesApp1( &quot;Prefences App Example&quot;);  (14)
  prefApp.setSize( new Dimension( 450, 400 ) );
  prefApp.pack();
  prefApp.setVisible( true );
  }
}
</pre>
<div class="orderedlist">
<ol type="1">
<li>
<p>For this first Swing application we import the base Java Swing
API classes (<tt class="literal">javax.swing.*</tt>) and also the
AWT base and event classes (<tt class=
"literal">java.awt.*</tt>).</p>
</li>
<li>
<p>Notice first that the <tt class="classname">PreferencesApp1</tt>
class is subclassed from a Swing <tt class=
"classname">javax.swing.JFrame</tt> class instead of an AWT
<tt class="classname">java.awt.Frame</tt> class. The window frame
title parameter passed on directly to the superclass.</p>
</li>
<li>
<p>Here is a new feature class <tt class=
"classname">java.awt.GraphicsEnvironment</tt> of the Java 2D API to
retrieve all the available font family names from the local
graphics environment.</p>
</li>
<li>
<p>Now we create two list data models for our mini application.
Swing provides a <tt class="classname">java.swing.ListModel</tt>,
which is an interface class. It also provides a default
implementation called <tt class=
"classname">javax.swing.DefaultListModel</tt> that look very
similarly to the <tt class="classname">java.util.Vector</tt> class.
(In fact there is a <tt class="classname">Vector</tt> object inside
of it). We create one <tt class="classname">DefaultListModel</tt>
and fill it with the font family names. We, then, create a second
empty one, which will be the user's customised list.</p>
</li>
<li>
<p>All Swing components have a separate internal layered container
called the <span class="emphasis"><em>Content Pane</em></span>.
Whereas with the AWT you added a <tt class="classname">Button</tt>
component, say, directly to the <tt class="classname">Panel</tt>
component. In Swing you <span class=
"emphasis"><em>cannot</em></span> do this for Swing containers that
are meant to manage other components. So we have to get an object
reference to <tt class="classname">JFrame</tt> content pane
component. Once we have the content pane then we set a new layout
manager <tt class="classname">java.awt.BorderLayout</tt> for
it.</p>
</li>
<li>
<p>Next, we can a <tt class="classname">JLabel</tt> component just
for starters. We set the label's title, the font required, the
foreground and the background colour. We also set the <tt class=
"classname">Jlabel</tt> so that it paints it own background fully
with the <tt class="methodname">setOpaque(true)</tt> method call.
This is because <tt class="classname">JLabels</tt> do not normally
render their backgrounds. (Another example of Swing's flexibility
and lightweight philosophy). We add the new label to the frame's
content pane positioned to the north.</p>
</li>
<li>
<p>We create the first <tt class="classname">javax.swing.JList</tt>
component here and supply it with the <tt class=
"varname">availableModel</tt> default list model object that
contains the list of font family names. Immediately afterwards we
create a swing scrolling pane component <tt class=
"classname">javax.swing.JScrollPane</tt> and supply it with the
<tt class="classname">JList</tt> that we just created. This will
provide a scrollable list UI element. We add the scroll pane to the
content pane to the container's left-hand side.</p>
</li>
<li>
<p>We create the second <tt class="classname">JList</tt> component
here and supply it with the empty configModel default list model
object that we created earlier. We also create another scroll pane
for this <tt class="classname">JList</tt> and add the combination
to the content pane, but this time, to the container's right-hand
side.</p>
</li>
<li>
<p>Now for something especially unique to Swing. We create a
special layout manager component <tt class=
"classname">javax.swing.Box</tt> that vertically lays out it
children. In this <tt class="classname">Box</tt> component we will
add the <tt class="classname">JButtons</tt> &quot;Add&quot;, &quot;Remove&quot;, and
&quot;Quit&quot; to control the application. We add the <tt class=
"classname">Box</tt> centrally to the content pane.</p>
</li>
<li>
<p>Working with the <tt class="classname">Box</tt> we create
<tt class="classname">JButton</tt> and give it a label title, then
we simultaneously create and add a vertical strut of 50 pixels,
which is a special component that keeps a rigid area no matter how
the parent container resizes it. The strut is invisible component
that does no rendering or painting, instead creates the illusion of
space. NB: You can create horizontal struts too.</p>
</li>
<li>
<p>We add the first <tt class="classname">JButton</tt> &quot;Add&quot; to the
<tt class="classname">Box</tt> container. We repeat the exercise
for the remaining two <tt class="classname">JButton</tt>s.</p>
</li>
<li>
<p>Finally we at least register the <tt class=
"classname">PreferenceApp1</tt> as an action listener to one
JButton &quot;quit&quot;, so we can stop the program.</p>
</li>
<li>
<p>This is the action listener method, which only operates on
ActionEvents fired from the &quot;quit&quot; button. It will gracefully
terminate the application.</p>
</li>
<li>
<p>Here is the main program where we create the <tt class=
"classname">PrefencesApp1</tt> object and give it a set size, order
it calculate the geometry with the <tt class=
"methodname">pack()</tt> method call and make it visible to the
display.</p>
</li>
</ol>
</div>
<p>Finally, at the bottom of the next page there is miniature UML
object diagram of some of the Swing and AWT classes. It should be
enough to get you started with Swing and JFC. In the next article I
add more functionality to this prototype. We will look at the list
model in depth and complete action listener so those fonts can be
added and removed from the configuration list. We will look at the
content pane too. Enjoy.</p>
<div class="figure"><a name="d0e359" id="d0e359"></a>
<p class="title c2">Figure 4. Mini UML Object Diagram of Swing</p>
<div class="mediaobject"><img src="/var/uploads/journals/resources/Figure4%20Swing.png"
alt="Mini UML Object Diagram of Swing"></div>
</div>
</div>
<div class="bibliography">
<div class="titlepage">
<h2><a name="d0e365" id="d0e365"></a>Book and
References</h2>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc"><a href=
"http://java.sun.com/products/jfc/" target=
"_top">http://java.sun.com/products/jfc/</a></span> Sun's product
home page of the JFC</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc"><a href=
"http://java.sun.com/products/jfc/whitepaper.html" target=
"_top">http://java.sun.com/products/jfc/whitepaper.html</a></span>
A white paper of the JFC philosophy</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc"><a href=
"http://java.sun.com/products/jfc/tsc/" target=
"_top">http://java.sun.com/products/jfc/tsc/</a></span> The Swing
Connection Page</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc"><a href=
"http://www.manning.com/Robinson/index.html" target=
"_top">http://www.manning.com/Robinson/index.html</a></span> Swing
Book</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc"><a href=
"http://www.algonet.se/~set_lo/java/sbe/" target=
"_top">http://www.algonet.se/~set_lo/java/sbe/</a></span> On line
book Swing mirror in Sweden</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc"><a href=
"http://www2.gol.com/users/tame/swing/examples/%20SwingExamples.html"
target="_top">http://www2.gol.com/users/tame/swing/examples/
SwingExamples.html</a></span> Tamemasu Nobuo's brilliant Swing JFC
examples with great screen shots (intermediate/advanced)</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="bibliomisc"><a href=
"http://www.jguru.com/jguru/faq/faqpage.jsp?name=Swing" target=
"_top">http://www.jguru.com/jguru/faq/faqpage.jsp?name=Swing</a></span>
jGuru excellent frequently asked questions on Swing.</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="citetitle"><i class=
"citetitle">Java 2D Graphics</i></span> by Jonathan Knudsen,
(1-56592-484-3), O'Reilly, 1st Edition May 1999, 355pp</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="citetitle"><i class=
"citetitle">Java Swing</i></span> by Robert Eckstein, Marc Loy
&amp; Dave Wood, (1-56592-455-X), O'Reilly, 1st Edition September
1998, 1255pp</p>
</div>
<div class="bibliomixed">
<p class="bibliomixed"><span class="citetitle"><i class=
"citetitle">Swing</i></span> by Matthew Robinson and Pavel
Vorobiev, (1-8847-7784-8), Manning, December 1999, Softbound,
944pp</p>
</div>
</div>
<div class="footnotes"><br>
<hr class="c3" width="100">
<div class="footnote">
<p><sup>[<a name="ftn.d0e27" href="#d0e27" id=
"ftn.d0e27">1</a>]</sup> Namely Microsoft corporation and Sun Micro
Systems</p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
