Mandelbrot Madness JAVA!

Version 3.1 -- Technical Information

[Return to README]

MMJ! File Listing

Below is a listing of all the files using in Mandelbrot Madness JAVA! and the purpose they serve:

These classes form the backbone of MMJ! Mandel.class is the primary program file and the one you will run to start the program. The MandelObject class represents the actual Mandelbrot or Julia set parameters and does the actual grunt work of calculating and drawing the Mandelbrot and Julia images. The MandelView classes represent the individual image windows, while MandelViewCanvas is a Canvas object that draws the represented MandelObject. WindowManager helps the program keep track of all open windows. MFrame forms the base class of many of the other classes. All files with a dollar sign ("$") in their names are anonymous classes, which are used (in this case) during the file opening/saving processes.
These classes implement the command line functionality of MMJ! QMandel handles the batch mode, while MMJ2to1 is the conversion utility. Note that QMandel cannot be run by itself, while MMJ2to1 can (although this is discouraged). See the command line documentation for more information.
These classes help to abstract the reading and writing of .MMJ and .PAL files. Putting this code into these classes helped reduce repeated code in several places, making my life easier.
These classes help to abstract the conversions between the .MMJ and .MOB file formats.
These classes manage color palettes in MMJ! Palette.class is an abstract class from which the others are derived. UserPalette.class is used to create custom color scale palettes or when loading a palette from a file.
These classes represent the various dialog boxes you see throughout MMJ! Of all of these, PaletteSelectDialog is unique, since it does not derive from the Java Dialog class, but from MFrame above. (Long story.)
mandel.ico A Windows icon file, just because.
Files needed to run MMJ! from within a Web browser. MmjBtn.class is a small applet that presents a button, that when clicked will launch MMJ! The HTML file simply contains the applet. Also included is WebMmjBtn.class, which can be used to place MMJ! on your personal web page. Please see the FAQ for information about using this file.
These classes are part of the PaletteBuilder helper application that comes with MMJ! While PaletteBuilder uses some of classes listed above, these are the ones used exclusively by this application. (If you don't want to use PaletteBuilder, these files can be safely deleted.)
These classes are part of the GIFEncoder package created by Adam Doppelt. They allow MMJ! to write images in the GIF format.
User documentation (which you're reading right now!). While you can do without these, I wouldn't suggest it unless you know this program really well...


Supported File Types

Mandelbrot Madness JAVA! supports three different file types for saving and retrieving data. The file types and how they are used are described below.

GIF files
The GIF (Graphic Interchange Format) format is a graphics file format first developed by CompuServe in 1987. GIF files support image compression and transparency, which have made it pretty much the de facto image format on the Web. GIF files are highly portable and viewers and editors are available for virtually ever platform imaginable. MMJ! uses GIF files to store the rendered image in a graphical format. MMJ! cannot open GIF files; it can only save them.

MMJ! uses GIFEncoder written by Adam Doppelt. GIFEncoder saves GIF files in the older GIF87 format, which should be viewable by almost any GIF viewer/editor.

Please read the GIF disclaimer concerning the Unisys GIF patent.

PAL files
PAL files store color palette information. MMJ! uses the JASC-PAL file format developed by Jasc Software ( and used in their popular Paint Shop Pro image editing software. I used the JASC-PAL format because it is simple to read and create, since it is merely a text file. Note that other programs may use this extension (such as the Microsoft PAL format), but MMJ! does not read these files. It will only read JASC-PAL files. You can create your own PAL files using the PaletteBuilder helper application. MMJ! can only read 16- and 256-color palettes.

MMJ files
MMJ files are an application-specific text file that stores parameter information for creating MMJ! images. Using MMJ files, you can store the exact parameters required to generate a given image and, combined with using a PAL file, you can store custom palette information as well. A MMJ and PAL file combination uses far less space than the corresponding GIF file, and can be read by MMJ! on any platform. If you want to show a friend a certain image you created, let them zoom in from that point, and save bandwidth sending it to them, this is the way to go!

It should be noted that the MMJ file format has changed between 2.x and 3.x. This was necessary to support zooming in Julia set images. These two file versions are not compatible. Version 3.x of MMJ! can read both versions of the file, but cannot write the 2.x version. Similarly, MMJ! 2.x cannot read a 3.x parameter file. A conversion utility is included as part of MMJ! You can learn more about this utility in the command line utilities section.

MOB files
MOB files are new as of version 3.1. A MOB file is a compressed binary file that contains both the parameter information of the .MMJ file and the palette information of the .PAL file. They can only be read by versions 3.1 and above of MMJ! Because of the ton of information surrounding them, its information is kept in another section, which we call the Introduction to the MOB File Format.


Known Bugs

Unfortunately, even the best of programs have "bugs." (It's just that the best of 'em don't have as many!) Here are a few of the known bugs in MMJ! that I am working on fixing. Please do not report these; I already know about them. If you find what you think is a bug, follow these actions:

  1. Check this list for known bugs first. If you can't find it here...
  2. Check the FAQ to make sure what you found is really a bug and not a quirk of Java that has no workaround. If you can't find your problem there...
  3. Mail me at and give me the following information:

I can't guarantee that I can fix all problems, especially since I don't have access to all the platforms and VMs that you can run MMJ! on. However, I will certainly try. Now, as promised, here's that bug list:

For general knowledge, if you have problems with the context (pop-up) menu, this is a bug in Java, not in MMJ! Refer to the FAQ for more information on this.


The MMJ! Wish List

The "Wish List" is a list of additional features I'd like to implement in the near future for MMJ! Some are things that I would love to have (once I figure out how to do them); others are things I would have put in here, but I didn't have time or would have had to redesign the program from the ground up to include. Anyway, here's some things to look for in MMJ! v3.1 (or 4.0, or 2000...):


[Return to README]

© Copyright 1999, Jeffrey T. Darlington. All rights reserved.