Learn how the World class and the Turtle class of the multimedia library implement a practical version of the Model-View-Control programming paradigm. Investigate the differences between placing a turtle in a world and placing a turtle in a picture.

Getting started with a new technology can be daunting. Learn how you can benefit from a Java multimedia library and a lightweight Java IDE named DrJava, which has the ability to interactively evaluate Java code.

Learn how to use the dot product to compute nine different angles of interest that a vector makes with various elements in 3D space, to find six of the infinite set of vectors that are perpendicular to a given vector, and to perform back-face culling of an image.

Learn the fundamentals of the vector dot product in both 2D and 3D. Discover how to update your game-math library to support various aspects of the vector dot product. And lastly, see how to write 2D and 3D programs that use the vector dot product methods in the game-math library.

Learn how to write your first interactive 3D game using the game-math library. You will also see how to write a Java program that simulates flocking behavior such as that exhibited by birds and fish and how to incorporate that behavior in a game.

Learn how to use methods of the Canvas class along with methods of the Graphics class to draw text and lines on the cell phone screen. You will also see how to use anchor point coordinates to control the position of text that is drawn on the screen and how to handle keyPressed events fired by a Canvas object.

Learn how to update the game-math library to provide new capabilities including the addition of graphics and set methods for column matrices, points, vectors, and lines. Also, study sample programs that illustrate the use of the new capabilities and learn how to draw on off-screen images.

Learn how to program an Alert for a MIDlet, add an image to the Alert, add a Gauge to the Alert to act as a progress or activity meter, and how to use a Timer to control when an Alert becomes visible on the screen.

Learn to program MIDlet user interfaces that minimize the MIDlet's memory footprint while the MIDlet is paused making consistent use of the MIDlet class methods to satisfy the life cycle rules of MIDlets.

Learn the fundamentals of user interfaces for MIDlets, how to instantiate user interface components, how to cause them to become visible on the cell phone screen, the difference between a Screen and a Display, and much more.

Learn how the CLDC and the MIDP fit into the grand scheme of things in MIDlet programming. See how to change the behavior of a Java program by replacing the classes in the Java standard library with custom classes of your own design.

Learn how to write a Java programming framework that makes it easy to experiment with MIDlets (Java programs for embedded devices) and the Sun Java Wireless Toolkit for CLDC (Connected Limited Device Configuration).

Understanding rotation and translation individually in Java 3D is not too difficult. When you combine the two, things quickly become very complicated. If you don't understand what you are doing when you combine the two, the chance that you will get it right is probably less than fifty percent. In this lesson, you will learn to get it right the first time.

Understanding the Alpha class is critical to understanding Java 3D animation. The constructors for the Alpha class can require up to ten parameters. Learn about the detailed behavior of objects instantiated from the Alpha class, with particular emphasis on understanding the behavior imparted by each of the ten parameters.

Learn how to use the RotationInterpolator and Alpha classes of the Java 3D API, along with other necessary classes, to write simple animation programs. Also learn the rationale by which those classes are used to write animation programs.

Learn how to master the basics of starting from scratch to create and populate a Java 3D virtual universe, and how to place that universe in a Frame object along with other GUI components using the layout manager of your choice.

Learn how to write programs that use the ConvolveOp class of the Java 2D API to perform two-dimensional image convolution. Also, learn about some of the weaknesses of the ConvolveOp class that result from a lack of options for dealing with convolution output values greater than 255 and less than 0.

Expand the JDOM/SVG graphics library to include gradients, Béziercurves, and elliptical arcs. Learn the significance of the word Scalable in Scalable Vector Graphics (SVG). Learn how to use JDOM to write XHTML output files containing SVG/XML code. Learn how to use JDOM to write Java servlets that deliver XHTML output containing SVG/XML code.

Learn a little about JDOM as an alternative to Sun's JAXP DOM API. Learn
how to create an SVG file using raw JDOM commands. Learn how to write a
Java/JDOM/SVG graphics library to reduce the effort required to create SVG files
using JDOM and Java.

Learn how to use the LookupOp image-filtering class from the Java 2D
API, along with the Random class from the java.util package to
write a pair of easy-to-use programs to scramble and unscramble images in a
reasonably secure fashion.

Learn to write a method that deals with the escape sequences required for the quotation marks that surround attribute values in XML and a method that makes it possible to create a general node in the DOM tree being used to represent an SVG graphic.

Learn how to write servlets to
produce SVG code that will be rendered in graphic form by an SVG-compatible
browser. Also see how write your own SVG graphics library to eliminate or at
least alleviate the requirement to write raw XML code or raw JAXP DOM code,
making it possible for you to produce SVG output simply by making Java method
calls.

Learn how to control the layout of a GWT Ajax web application using HTML
layout capabilities, the capabilities of the layout classes in the GWT API, and
a combination of the two. Also learn more essential aspects of the
creation and deployment of GWT Ajax web applications.

Look into the image-filtering classes of the Java 2D API. Also learn how to write a framework program that makes it easy to use those image-filtering classes to modify the pixels in an image and to display the modified image.

Learn about a new image processing framework that provides the ability to perform two sequential processes on an image, to display the modified images resulting from each process(in addition to the original image) and to write the modified images into output files in JPEG
format.

Learn how to use the forward two-dimensional Discrete Cosine Transform
(2D-DCT) to compute and display the wave-number spectrum of an image. Also see how to apply the inverse 2D-DCT to the spectral data to reconstruct and
display a replica of the original image.

Use this interactive workbench to gain a better understanding of the behavior of digital recursive filters. Then learn how to write the code to do recursive filtering as well as to evaluate recursive filters using a workbench-style program.

ThinWire makes it as easy to develop rich web applications as it is to write
standalone Java applications. Just compile your standalone Java application using Sun's javac compiler with the three ThinWire JAR files at the beginning of the classpath and it will be turned into a web application.

Learn how to create and manually deploy four sample web applications
(two are Ajax applications) in a jakarta-tomcat-5.0.27 application
server.
Also learn something about two competing Ajax web
application development technologies. Both are based on Java source
code, but each takes a different approach to the creation of
the web application.

Creating scenes that appear to be three-dimensional on a flat two-dimensional screen is all about creating optical illusions. There are many important aspects to creating these optical illusions in 3D programming, not the least of which is lighting and illumination.

Learn how to use the Full-Screen Exclusive Mode API to write programs
that take over the entire screen. Also learn how to use active rendering as opposed to passive rendering to
eliminate the overhead associated with passive rendering.

Learn how to write a Java program that illustrates lossless data compression according to the Lempel-Ziv Compression Algorithm commonly known as LZ77. Also learn about the characteristics of the algorithm that result in data compression.

Learn how and why image convolution works by examining the changes to the
wave-number spectrum produced by image convolution. Also learn how to
write the code for a general purpose image-convolution class in Java.

Learn how to write a Java program that will run in a scheduled, unattended, automated fashion to download Email messages from one POP3 server and to forward those messages to another Email server. Such a program is particularly useful for consolidating all of your Email messages onto a single Email server.

Learn how to write an adaptive whitening filter program in Java. Also
learn how to use the whitening filter to extract wide-band signal that is
corrupted by one or more components of narrow-band noise.

Learn how to write a program that can be used to upload legacy Email messages
from local Mbox
files to an Email server. Such a program is particularly useful for
persons who would like to upload their collection of legacy Email messages onto
Email servers such as the Gmail server.

Learn how to write a Java program that will download Email messages from one
POP3 server and forward those messages to another Email account when the
original server refuses to forward messages. Such a program is particularly useful for consolidating all of your Email messages onto a single Email server.

Learn how to write Java code to hide a secret message in an image so that there is no visual indication that the image contains the message. Also learn how to write the code to extract the
hidden message from the image and to reconstruct it into a readable form.

Examine the code for a Java class that can be used to perform forward and
inverse 2D Fourier transforms on 3D surfaces in the space domain. Also learn how the 2D Fourier transform behaves for a variety of different sample surfaces in the space domain.

Learn to write Java programs that use convolution (flat filters and
Gaussian filters) to smooth or blur an image. Also learn how to write jpg
files containing specialized images that are useful for testing image-processing programs.

Learn how the space domain and the wavenumber domain in two-dimensional analysis are analogous to the time domain and the frequency domain in one-dimensional analysis. You will also see some practical examples showing how 2D Fourier transforms
and wavenumber spectra can be useful in solving engineering problems involving
antenna arrays.

Learn how to implement a digital signature scheme with message recovery,
whereby the signature can be verified without knowledge of the original message that was
signed. With this scheme, signature verification also produces a copy of the original message.

Learn to write a Java program to control color intensity, apply color filtering, and apply color inversion to an image. Learn to relate the colors to points on a color wheel and points in a color cube.

Learn how to write a Java class that uses color to plot 3D surfaces in six different formats and a wide range of sizes. The class is extremely easy to use. You can incorporate the 3D plotting capability into your own programs by inserting a single statement into your programs.

Examine the code that causes a Window to gain the
focus and respond to the keyboard even if that
Window contains no focusable components. Also examine the code that causes
a program to use
extended Window state to determine that the user has maximized a Window.

Learn how to cause a Window to gain the focus and respond to the keyboard even if that Window contains no focusable components. You will also see how to cause a program to use extended Window state to determine that the user has maximized a Window.

Learn how to perform matched filtering in Java. See how matched filtering often makes it possible to detect properly designed signals in noisy environments where simple frequency filtering alone cannot do the job.

With today's concerns about security, learn how to write Java code to implement the SHA-1 algorithm and how to produce message digests using that code. Understand how to use Sun's MessageDigest class to produce message digests for both the SHA-1 and MD5 algorithms.

The processing of a key event by the focus owner is not necessarily the end of the road for that event. Learn how to cause a chain of post processors to spring into action and to perform additional processing on the event before it finally dies.

Delve into the general philosophy of public key cryptography.
Work through sample programs that illustrate various aspects of public key cryptography through the use of the RSA algorithm as implemented using Java.

Discover how to control the contrast and brightness of an image by
controlling the distribution of the color pixels. Baldwin provides and explains a Java program that can be used to experiment interactively with image contrast and brightness.

Jump into the world of forward and inverse Fourier
transforms using both DFT and FFT algorithms. You will also find the implementation of frequency filtering by modifying the complex spectrum in the frequency domain and transforming the modified complex spectrum back into the time domain.

Baldwin shows you how to download, install, and prepare a MySQL database as a localhost server on a Windows platform for use with JDBC. He then shows you how to write JDBC programs to administer the database server and to manipulate data stored on the MySQL database server.

Baldwin shows you how to modify an image by modifying the pixels
belonging to that image. He also provides a driver program that makes it easy to modify the pixels in an image and to display the modified image.

Learn how to use multiple square-bracket notation for indexing nested tuples. Also see how to use the membership operation, packing a deeply-nested tuple, printing a deeply-nested tuple, and obtaining the length of a nested tuple.

Baldwin provides source code for each of
the separate programs in the BigDog series of programs, along with a brief
description of each program. He also explains how to set up your
computer to use these programs.

See how to write a Java program that mimics an XSLT transformation for converting an XML file into a text file. Once you have a library of Java methods that emulate XSLT elements, it is no more difficult to write a Java program to transform an XML document than it is to write an XSL stylesheet to transform the same document.

With a couple of mouse clicks and less
than one minute of extra effort each time you check your email, you can
almost guarantee that your email data will never become contaminated by
an email-borne virus.

This is the first in a series of online tutorial lessons designed to teach you how to program using the Python scripting language. There is something for just about everyone here. Beginners start at the beginning, and experienced programmers jump in further on.

There is a lot you can do with JAXP and XSLT. Baldwin shows you how to use XSL Transformations, how to create and use an identity Transformer object to display a DOM tree on the screen, how to write an output XML file, and more.

Baldwin shows you how to (a) use JAXP, DOM, and an input XML file to
create a Document object that represents the XML file, (b) recursively
traverse the DOM tree, getting information about each node in the tree
along the way, and (c) use the information about the nodes to create a
new XML file that represents the Document object.

Baldwin explains the use of instance initializers, static initializers
in conjunction with constructors, and the initialization of ordinary instance
variables. He explains and demonstrates the order in which they are executed.

Baldwin explains the concept of a class and its objects from the viewpoint of a user-defined type. He contrasts user-defined types with primitive types, explains what is commonly meant by type in type-sensitive languages, and explains the similarity between variables and objects.

Baldwin shows you how to create, play, and save synthetic sounds, making use
of the features of the java.nio package to help with the byte manipulations.
Seven different sample sounds are provided and explained.

Baldwin shows you how to control the focusability of individual components at
runtime, how to query for the currently focused Component, the default Focus
Traversal Policy for Swing, and how to use the OS look and feel with Swing.

Baldwin shows you how to write more robust audio programs by using the
getAudioFileTypes method of the AudioSystem class to limit the file-type choices
presented to the user. This eliminates the possibility that the user will
select a file type that is not supported by the system.

Baldwin shows you how to use the Java Sound API to capture audio data from a
microphone and how to save that data in a ByteArrayOutputStream object. He
also shows you how to identify the mixers available on your system, and how to
specify a particular mixer for use in the acquisition of audio data from the
microphone.

In this tutorial, Baldwin shows you how to create records consisting of mixed primitive types, how to manipulate those records under program control, and how to transfer those records between the computer's memory and a physical disk file.

Baldwin shows you how to use the FileChannel class, along with view objects of classes such as DoubleBuffer, to transfer data of all primitive types (other than boolean) between the computer's memory and a physical disk file.

With the release of JavaTM 2 SDK, Standard Edition Version 1.4 you can now write logic into your programs to analyze and make decisions on the basis of stack trace information. You can also encapsulate that information into objects. Richard Baldwin shows you how here.

Are you prepared to take full advantage of the new features of Java version 1.4.0? Do you work with the ByteBuffer class? Richard Baldwin explains the ByteBuffer class, which is fundamental to many of the new features in Java version 1.4.0.

Richard Baldwin discusses various details regarding array objects in Java, including: members of an array object, interfaces implemented by array objects, Class objects and array objects, and the classes named Array and Arrays.

The newly released version 1.4 of Java 2 provides new features and improved performance in the areas of buffer management, scalable network and file I/O, character-set support, and regular-expression matching. The Buffer class is fundamental to many of these new features.

Discover the programming details involved in the use of array objects. Richard Baldwin presents three ways to emulate traditional two-dimensional rectangular arrays, and also shows how to create and use ragged arrays.

Within Java static members can be useful in some situations; however, the overuse of static members can lead to problems similar to those experienced in languages that support global variables and global functions.

According to Baldwin, if you don't understand the Java interface, you
don't understand Java. There is very little, if anything useful that can be done using Java without understanding and using the Java interface.

Baldwin discusses the use of the Object class as a completely generic
type for storing references to objects of subclass types, and explains
how that results in a very useful form of runtime polymorphism.

According to Baldwin, with runtime polymorphism, the selection of a
method for execution is based on the actual type of object whose reference
is stored in a reference variable, and not on the type of the reference
variable on which the method is invoked.

Baldwin teaches you about assignment compatibility, type conversion, and casting for both primitive and reference types. He also teaches you about the relationship between reference types, method invocations, and the location in the class hierarchy where a method is defined.

Baldwin shows you how to extend an existing class to create a new class. The new class is the blueprint for a new type. This is the mechanism for class inheritance in Java. Inheritance provides a formal mechanism for code reuse.

In this lesson, Baldwin concentrates on a discussion of the Java class. He shows you how to write a very simple program that simulates the manufacture and use of the car radio discussed in an earlier lesson.

Baldwin wraps up his series of lessons on animation. He has shown you how to use Java to write programs that produce smooth animation of the sprite animation and frame animation varieties. It's time for you to take that knowledge and do something fun with it. And don't forget, Java programming can be fun.

Baldwin shows you how to achieve frame animation in Java. He accomplishes this by showing you how to upgrade the sprite animation program from the earlier lessons into a new program that provides both sprite animation and frame animation.

Baldwin completes his sprite-animation program. Along the way,
he explains the methods of the Sprite class, including the following features:
establishing the initial position of the sprite, determining the location
of the sprite, determining the speed and direction of the sprite, updating
the sprite's position, implementing some randomness in the sprite's motion,
bouncing off the walls, drawing the sprite, and detecting collisions with
other sprites.

In his continuing series on sprite animation, Baldwin explains the behavior of each of the methods of his SpriteManager class. This includes the following features: finding an empty location for each new sprite, updating sprite positions, drawing the new scene during each animation cycle, and managing collisions between sprites.

Baldwin shows you how to override the update method of the Component
class to improve the animation quality of the program over what would normally be achieved using the default version of the update method. In the process, he shows you how to eliminate the flashing that often accompanies efforts to use the default version of the update method for animation purposes. He also shows you how to get and use an offscreen drawing context to accomplish double buffering in the drawing process.

Baldwin explains the behavior of the run method of the animation thread
as well as the makeSprite method of the controlling class. He provides
a preview of the SpriteManager class and the Sprite class. He discusses
the repaint, update, and paint methods of the Component class, and discusses
the timer loop used in this program. He also suggests an alternative
approach that makes use of a Timer object to fire Action events.
Finally, he recaps the previous three lessons in the series.

Baldwin explains the behavior of the run method of the animation thread
as well as the makeSprite method of the controlling class. He provides
a preview of the SpriteManager class and the Sprite class. He discusses
the repaint, update, and paint methods of the Component class, and discusses
the timer loop used in this program. He also suggests an alternative
approach that makes use of a Timer object to fire Action events.
Finally, he recaps the previous three lessons in the series.

In this lesson, Baldwin discusses the unusual nature of the getter methods
for the width and height properties of an Image object. He introduces
and briefly discusses the concept of an ImageObserver object in conjunction
with the getWidth and getHeight methods of an Image object. He shows
you how to set the size of a Frame to be the same as the size of a background
image in the Frame. He discusses the use of an object of the controlling class as an animation thread.

Baldwin shows you how to instantiate and use a MediaTracker object to
track the loading status of Image objects. He shows you how to use
the getImage method of the Toolkit class to create Image objects from GIF
files, how to register those Image objects on a MediaTracker object, and
how to use the waitForID method of the MediaTracker object to force the
program to block and wait until the images in a group are successfully
loaded, or until a loading error occurs.

Programming in Java doesn't have to be dull and boring. In fact,
it's possible to have a lot of fun while programming in Java. This is the first lesson in a miniseries that will concentrate on having fun while programming in Java.

Baldwin shows you how to use the more-complex version of the toArray method declared in the Collection interface. He discusses issues regarding the type of the array and the types of the objects referred to by the elements in the collection. He also discusses issues regarding the relative sizes of the array and the collection, among other things.

Baldwin shows you how to use a Comparator created by the reverseOrder method of the Collections class to sort a list into reverse natural order. He also shows you how to use the reverse method of the Collections class to reverse the order of the elements in a list.

Baldwin shows you how to extract the contents of a collection into an array, and how to use a Comparator object to sort the contents of the array into reverse natural order. He also shows you how to sort the contents of the array into natural order without the use of a Comparator object.

Baldwin discusses and illustrates the use of the
Comparator interface. The sorting order established by a Comparator may be different or may be the same as the natural order. A Comparator can be used to establish a sorting order for objects that don't have a natural ordering. The use of a Comparator is an alternative to the implementation of the Comparable interface.

Baldwin shows you why the elements stored in a TreeSet collection need to be references to objects instantiated from a class that implements the Comparable interface, and briefly discusses an alternative approach using the Comparator interface.

A Set object cannot contain duplicate elements, but a List object can contain duplicate elements. Ordered collections
are not the same as sorted collections. Specialized stipulations are placed on interfaces as you progress down the interface inheritance hierarchy of the Java Collections Framework.

The Java Collections Framework defines six core interfaces, in two distinct trees. Learn the inheritance structure and the purpose of those interfaces. Learn how the interfaces declare polymorphic methods that apply to implementations of the interfaces and learn about the optional methods of the Collection interface.

Baldwin explains some of the details surrounding the use of a Java collection
for creating data structures. He also discusses the interfaces and
the concrete implementations in the Java Collections Framework.

Baldwin introduces you to the Java Collections Framework. Once
you learn how to use the framework, it is unlikely that you will need to
reinvent common data structures, search algorithms, or sorting algorithms
again, because those capabilities are neatly packaged within the framework.

Baldwin presents a sample enterprise bean program
that you can use to hone your skills in the deployment of EJBs into the J2EE server. This bean makes use of helper classes, requiring you to take that into account in the deployment process.

True or false? Friendly or package access applies to all classes in the current working directory that are not declared to be public, private, or protected? Show off your smarts or learn a thing or two in our quiz series.

Baldwin discusses the use of J2EE as a middle-tier server in a multi-tier environment. He explains some of the benefits of the multi-tier environment in general, and the use of J2EE in particular. He discusses the general concept of a container, describes the services provided by the EJB container, and discusses how the EJB container fits into the grand scheme of things in J2EE.

Baldwin shows you how to write and run a client application that exercises the Enterprise Bean that was deployed into the J2EE server in previous lessons. Along the way, he provides a very brief primer on JNDI.

Richard Baldwin continues his lesson on parsing XML documents with this, part 5 of six parts. In this lesson, Richard shows the effects of running the XML4J parser against a sample XML file which contains an error.

Richard Baldwin introduces the concept of event-driven programming using a very simple example. This is presented as a prelude to upcoming articles that will cover how to use a SAX parser with event-driven programming to parse and process XML documents.

In this lesson, Richard Baldwin expands on his previous lesson about event-driven programming. Using a simple applet that toggles a button's color, Richard shows you the java code involved in a simplistic event-driven application.

In the previous lesson, Baldwin introduced you to a very useful program that displays information about any Java component, including inheritance, interfaces, properties, events, and methods. In this lesson, he explains how the GUI for this program is set up using JFrame, JPanel, JTextArea, JScrollPane, JTextField, JButton, and JLabel components.

Baldwin introduces a very useful program that displays information about any Java component, including inheritance, interfaces, properties, events, and methods. You can expand the program to provide even more information if you wish to do so.

Baldwin shows you how to use the New Enterprise Bean Wizard to package your Enterprise Bean in its jar file. While not conceptually difficult, it is tedious, involving approximately ten separate operations that must be performed in the correct order.

Baldwin shows you how to use custom methods that provide the functionality of glue and struts. One of the methods produces an elastic spacer component with an upper limit on how far the component will stretch. Another method provides the functionality of

In a previous article, Richard Baldwin used the xsl:for-each processing element to loop through an XML file, extracting data from that file. In this article, Richard shows how to perform a conditional test on data values to decide whether or not to insert that piece of data into an output table. Along the way, he shows you how to cause an XML data value that would otherwise be treated as a string to be treated as a numeric value for testing purposes.

When using J2EE, enterprise beans must be added to a J2EE application prior to deployment. Baldwin shows you how to create a new J2EE application. Along the way, he shows you how to operate the J2EE server and provides a first look at the deployment tool GUI.

Baldwin develops three convenience methods that provide the functionality of glue and struts. These can be used as alternatives to the factory methods of the Box class used for similar purposes. They differ from the factory methods in several important respects. One of the methods makes it possible to produce an elastic spacer component (glue) with an upper limit on how far the component will stretch. Another method returns a reference to an object that provides the functionality of glue and struts in a single object.

In this lesson, Baldwin begins walking you through the detailed steps necessary to deploy a simple Enterprise Bean in the J2EE server. You'll learn about jar files and ear files, the deployment descriptor, J2EE applications, and the three steps required for deployment of an Enterprise Bean in the J2EE server.

Rather than using glue and struts produced by the factory methods illustrated in earlier lessons, this program uses invisible spacer components of Baldwin's own design that behave similarly to glue and struts but provide more capability.

Baldwin shows you how to write a simple bean class, write the home and remote interfaces, and write and use a batch file to control the compilation process. He also discusses the life-cycle of a bean and the callback methods that the bean uses to monitor it, as well as session context, bean creation, and the EJB package.

Here's the first lesson in a miniseries intended to get you up and running with Enterprise JavaBeans very quickly. We list the specific steps required to get a bean up and running, as well as the purpose and goal of EJBs.

This lesson will refresh your memory on how to use a Box container with its default BoxLayout manager. It will also show you how to place components on the horizontal axis and how to insert glue and struts between components.

This lesson continues the discussion of J2EE and the need for standardization in multi-tier systems. It presents J2EE as the answer to the need for standardization. And it provides a simple example of the need for transaction processing involving a savings account and a checking account.

This lesson shows you how to use a Box container with its default BoxLayout manager. It shows you how to place components on the horizontal axis, and how to establish their vertical positions relative to one another by setting the alignmentY property value.

This lesson introduces you to the Box container and the BoxLayout manager and discusses a number of characteristics of each. Screen shots are provided that illustrate the behavior of the BoxLayout manager.

The factory methods of the BorderFactory class can be used to produce Border objects that are shared, and therefore can be more memory-efficient than their counterparts instantiated using the new operator. You can specify the highlight and shadow colors f

Swing compound borders allow you to combine two different border styles into a single border. Swing Border objects, including compound borders, can be nested to produce very complex borders. This lesson illustrates the use of nested compound borders.

This lesson continues the discussion of the CompoundBorder class as a way to combine border styles to produce a new border style. This lesson discusses and illustrates the use of LineBorder, MatteBorder, and TitledBorder, each combined with EmptyBorder.

We introduce the CompoundBorder class as a way to combine two border styles to produce a new border style. One of the two borders serves as an inside border. The other serves as an outside border. Any two Border objects can be combined, and either can be

This lesson shows you how to use the border property to place fancy borders on Swing components. Four different standard borders have been discussed so far: EtchedBorder, BevelBorder RAISED, BevelBorder LOWERED, and EmptyBorder.

This series of tutorial lessons examines the properties of the JComponent class that are inherited by many Swing components. This lesson introduces the border property and shows how it can be used to enhance the appearance of many Swing components.

Swing components are JavaBean Components. One of the most important things that we can do to understand Swing is to learn about the properties, events, and methods that Swing components exhibit. Many are inherited from the class named JComponent and its superclasses. These properties, events, and methods apply to Swing components as a group. Learning about the inherited properties, events, and methods, makes it possible to learn a great deal about most Swing components without having to consider them individually.

Learn how to create a simple Shape object with the GeneralPath class, and how to extract information from, and replicate that object using the getPathIterator() method and the PathIterator object that the method returns.