General Information


Professor: Brad Vander Zanden

TA: Tiger Jaser


Required : Developing User Interfaces, Dan R. Olsen, Jr.

Optional :

Other Java Resources

Java Documentation

Sun provides an excellent set of class and method descriptions for Java at I tend to answer all my questions by going to this web-site rather than going to a book.

The Java 2 Platform API Specification link is particularly useful for finding out about various Java classes. The tutorial links are also good sources of example code.

Course Prerequisites

The course prerequisites are CS302, CS360, and some knowledge of object oriented programming. The course will cover some aspects of the Java language but for the most part you will be expected to pick up Java on your own from a reference text. You are expected to have some previous experience with object oriented programming, either with C++, Java, or some other object oriented language. In particular, I will assume that you understand classes, inheritance, methods, constructors and destructors, and virtual functions. You are free to use your own version of Java for testing your programs but ultimately your program must run on the Java virtual machine installed on the hydra and cetus machines, which is Java 1.5.0.

Topics To Be Covered

The course will be a survey of tools and techniques for constructing highly interactive, graphical user interfaces. The course is oriented toward programming rather than towards usability or graphic design. However, some usability and graphic design topics will be discussed, especially early in the course. The course is also oriented toward the creation of applications involving custom, programmer defined objects and behaviors. In other words, the course will be oriented towards enterprise computing. Emphasis will be on five major areas:

  1. Object Oriented Programming: Throughout the course we will discuss design idioms, frequently called design patterns, for creating graphical interfaces using object oriented programming. Design patterns are general solutions to recurring design problems that arise in programming applications.

  2. Display Management: When the user manipulates objects in a user interface, both the interface and the application typically provide various types of pictorial feedback. This feedback may "damage" various areas of the screen, and may require that the graphical objects that inhabit these areas be redrawn. We will discuss efficient algorithms for incrementally detecting and updating damaged areas of the display.

  3. Event Handling: GUIs have a user-centered model of computing rather than a program-centered model. You are used to writing programs that have a single thread of control and that determine when they receive input from the user and when they provide output to the user. In contrast, GUIs can have multiple threads of control and the user decides when to provide input. When the user provides input, it is typically via an "event" that then triggers an action procedure. This action procedure becomes the current thread of control. It is imperative that the action procedure provide output as soon as possible because users become impatient if they either do not see an immediate response to their action. We will discuss event programming and how events are handled in Java. We will discuss models and algorithms for handling input, especially the concept of interaction techniques (combinations of graphics and behaviors that are reused in many interfaces).

  4. Animation: Animation is frequently used to provide an illusion of smooth movement in an interface and we will discuss how animation is achieved in Java using timers and threads.

  5. Multi-User Applications: Many user interfaces support user collaboration across the internet. We will describe general principles for implementing multi-user applications, and examine Java's socket and remote method invocation (RMI) interfaces.

  6. Scripting Languages: Scripting languages are often used to rapidly prototype interfaces or to rapidly create one-time applications. We will provide a brief introduction to scripting languages and focus on one in particular, which will be selected later in the course.


Programming Assignments

There will be a number of programming assignments throughout the semester to give you familiarity with the algorithms and languages presented in class. Undergraduate students will be allowed to work on certain labs in pairs of two. If you do pair up, you must work in the same pair on all labs on which I permit pairwork.