public void makeMenus() {

		JMenuItem mi;		// used in various spots

		JMenuBar mb = new JMenuBar();
		parentFrame.setJMenuBar(mb);

		ResourceBundle b = ResourceBundle.getBundle("Menu");

		JMenu fm = mkMenu(b, "file");
		fm.add(mi = mkMenuItem(b, "file", "open"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String fileName = null;
				
				if (model.getFileName() != null) {
					model.openFile((String)null);
					return;
				}
				
				if (chooser == null) {
					chooser =  new JFileChooser();
				}
				
				int returnVal = chooser.showOpenDialog(parentFrame);
				if (returnVal == JFileChooser.APPROVE_OPTION) {
                        File file = chooser.getSelectedFile();
                        fileName = file.getPath();
				}
				model.openFile(fileName);
				parentFrame.pack();	// fit to new size
			}
		});
		fm.add(mi = mkMenuItem(b, "file", "new"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String fileName = JOptionPane.showInputDialog(parentFrame, "FileName");
				model.newFile(fileName);
			}
		});
		fm.add(mi = mkMenuItem(b, "file", "save"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model.saveFile(null);
			}
		});
		fm.add(mi = mkMenuItem(b, "file", "close"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model.closeFile();
			}
		});
		fm.addSeparator();

		/** Inner class for printing */
		class PrintListener implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				printJob = Toolkit.getDefaultToolkit().getPrintJob(
					parentFrame, "Print CrossWord", null);
				if (printJob /* still */ == null)
					return;
				Graphics g = printJob.getGraphics();
				if (g == null)
					throw new IllegalArgumentException(
						"pjob.getGraphics() gave me a null!");
				model.doPrint(g);
				g.dispose();
				printJob.end();
			}
		}
		// Print
		fm.add(mi = mkMenuItem(b, "file", "print"));
		mi.addActionListener(new PrintListener());

		fm.addSeparator();

		fm.add(mi = mkMenuItem(b, "file", "exit"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model.exit(0);
			}
		});
		mb.add(fm);

		
		// Edit Menu
		JMenu em = mkMenu(b, "edit");
		em.add(mi = mkMenuItem(b, "edit", "copy"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model.copySelection();
				parentFrame.repaint();
			}
		});
		em.add(mi = mkMenuItem(b, "edit", "paste"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model.pasteSelection();
			}
		});
		em.add(mi = mkMenuItem(b, "edit", "clear"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model.clearSelection();
			}
		});
		mb.add(em);
		
		addAdditionalMenus(mb);

		JMenu hm = mkMenu(b,  "help");
		hm.add(mi = mkMenuItem(b, "help", "topics"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Window jh = new SimpleHelp("CW-Edit", "??");
				UtilGUI.centre(jh);
				jh.setVisible(true);
			}
		});
		hm.addSeparator();
		hm.add(mi = mkMenuItem(b, "help", "about"));
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				showAboutPane();
			}
		});
		mb.add(hm);					// until setHelpMenu gets implemented!
		// mb.setHelpMenu(hm);		// needed for portability (Motif, etc.).
	}