public Ded()
    {
        super(windowTitle);

        SwingUtil.assignJFrameImplicitPaneNames(this);

        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        this.addWindowListener(this);

        this.setSize(800,600);

        // Load the Window icon if we haven't already.
        synchronized (Ded.class) {
            if (windowIcon16 == null) {
                // For now, this requires that I'm running it out of
                // the build tree.  My plan is to add the ability to
                // package everything in a JAR.
                try {
                    URL url = Ded.class.getResource("/ded/ui/boxarrow16.png");
                    if (url != null) {
                        windowIcon16 = new ImageIcon(url);
                    }
                    else {
                        // Try loading from the file system, which is
                        // needed when running from Eclipse.
                        windowIcon16 = new ImageIcon("src/ded/ui/boxarrow16.png");
                    }

                    url = Ded.class.getResource("/ded/ui/boxarrow32.png");
                    if (url != null) {
                        windowIcon32 = new ImageIcon(url);
                    }
                    else {
                        windowIcon32 = new ImageIcon("src/ded/ui/boxarrow32.png");
                    }
                }
                catch (Exception e) {
                    // This is never called; it seems that ImageIcon just
                    // silently does nothing when it can't load the file.
                    System.out.println("could not load icon: "+e.getMessage());
                }
            }
        }

        if (windowIcon16 != null) {
            ArrayList<Image> icons = new ArrayList<Image>();
            icons.add(windowIcon16.getImage());
            icons.add(windowIcon32.getImage());
            this.setIconImages(icons);
        }

        // Use a bitmap font packaged with 'ded' itself.  (After many
        // attempts, I was unable to find a portable alternative.)
        InputStream in = null;
        try {
            String fname = "resources/helvR12sm.bdf.gz";

            // First try loading it from the JAR file.
            URL url = Ded.class.getResource("/"+fname);
            if (url != null) {
                in = url.openStream();
            }
            else {
                // Then try loading from file system.
                // (Maybe getResource already tries this?)
                in = new FileInputStream(fname);
            }
            in = new GZIPInputStream(in);
            this.diagramBitmapFont = new BitmapFont(new BDFParser(in));
        }
        catch (Exception e) {
            System.err.println("cannot load bitmap font resource: "+e);
            System.exit(2);
        }
        finally {
            if (in != null) {
                try {
                    in.close();
                }
                catch (IOException e) {/*don't care*/}
            }
        }

        this.diagramController = new DiagramController(this);
        this.diagramController.setName("diagramController");
        this.diagramController.setOpaque(true);
        this.setContentPane(this.diagramController);

        this.buildMenuBar();
    }