CS 241 Lab 1: Clicking on Windows

This first assignment is intended more as a warm-up exercise, to bring you back up to speed on programming from last semester (or perhaps even earlier, for some of you). If you find it especially difficult, see me: it may be that you are mis-interpreting my intent, or that I can help out in some other way.

Note: this is not necessarily a GUI (graphical user interface) assignment! Some students may not have seen GUI code yet. We may enhance the assignment at some point to include graphics, but most GUI systems using actual windows (or panels, etc.) would make this assignment trivial by doing the work for you. However, if you want to do a GUI version, do so by drawing framed rectangles on your own, i.e., not using windows from a library.

The assignment is a little simulation of a windowing system (by default textual): you should imagine some over-lapping rectangles on the screen, representing windows in a modern GUI, on any of which a user might click. When a window (i.e., a rectangle) is clicked on, it would be brought to the front (and all windows re-drawn). In order to simulate the window ordering, we will just write out the names of the windows in order, from top to bottom ... but in a picture form, they might look like one of these (depending on the GUI used):

To get the original window data, you should read the lines of a text file: each line will contain four positive integers representing the upper-left corner (x and y coordinates) and the width and height. These will be followed on the same line by a name (text string) for the window (you might want to trim the string to eliminate stray spaces from the beginning and end).

Your program should proceed as follows:

Of course, some windows might remain completely obscured, and thus not selectable, or even visible. Oh well.

Regarding implementation:

I will release some sample input data files in the next few days, but you should develop your own for testing.

PS: when and if we do modify the program to use some real graphics, you would want it to be as easy as possible to "upgrade" your code to work in that new environment. The use of objects, classes and other standard Java techniques should help here, but you should think consciously about this issue as you design your program (and in general when you design any program). Building programs that are robust in the face of such changes is a difficult skill to learn, but one that you should definitely begin to cultivate now.

Some hints and samples!

Finally, here are some hints about program design and some sample data and output.

Note! When demoing your program, it will be helpful to know which windows are where in your own data, so please document this somehow: a quick sketch with a few numbers will do … but you should probably have these from designing your data anyway!