Java Code:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;

public class MenuDemo extends JFrame {

  public static final String FontNames[] = { "Serif", "SansSerif", "Courier" };

  protected Font fontArray[];

  protected JMenuItem[] menus;

  protected JCheckBoxMenuItem boldMenuItem;

  protected JCheckBoxMenuItem italicMenuItem;

  protected JFileChooser fileChooser;

  public MenuDemo() {
    super("Basic text editor");
    setSize(450, 350);

    fontArray = new Font[FontNames.length];
    for (int i = 0; i < FontNames.length; i++)
      fontArray[i] = new Font(FontNames[i], Font.PLAIN, 12);

    JMenuBar menuBar = createMenuBar();
    setJMenuBar(menuBar);

    fileChooser = new JFileChooser();
    fileChooser.setCurrentDirectory(new File("."));

    WindowListener exitEvent = new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    };
    addWindowListener(exitEvent);

    updateMonitor();
    setVisible(true);
  }

  protected JMenuBar createMenuBar() {
    final JMenuBar menuBar = new JMenuBar();

    JMenu menuFile = new JMenu("File");
    menuFile.setMnemonic('f');

    JMenuItem menuItem = new JMenuItem("New");
    menuItem.setIcon(new ImageIcon("file_new.gif"));
    menuItem.setMnemonic('n');
    ActionListener lst = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.out.println("New");
      }
    };
    menuItem.addActionListener(lst);
    menuFile.add(menuItem);

    menuItem = new JMenuItem("Open...");
    menuItem.setIcon(new ImageIcon("file_open.gif"));
    menuItem.setMnemonic('o');
    lst = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        MenuDemo.this.repaint();
        if (fileChooser.showOpenDialog(MenuDemo.this) != JFileChooser.APPROVE_OPTION)
          return;
        System.out.println(fileChooser.getSelectedFile());
      }
    };
    menuItem.addActionListener(lst);
    menuFile.add(menuItem);

    menuItem = new JMenuItem("Save...");
    menuItem.setIcon(new ImageIcon("file_save.gif"));
    menuItem.setMnemonic('s');
    lst = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.out.println("Save...");
      }
    };
    menuItem.addActionListener(lst);
    menuFile.add(menuItem);

    menuFile.addSeparator();

    menuItem = new JMenuItem("Exit");
    menuItem.setMnemonic('x');
    lst = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    };
    menuItem.addActionListener(lst);
    menuFile.add(menuItem);
    menuBar.add(menuFile);

    ActionListener fontListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        updateMonitor();
      }
    };

    JMenu mFont = new JMenu("Font");
    mFont.setMnemonic('o');

    ButtonGroup group = new ButtonGroup();
    menus = new JMenuItem[FontNames.length];
    for (int i = 0; i < FontNames.length; i++) {
      int m = i + 1;
      menus[i] = new JRadioButtonMenuItem(m + " " + FontNames[i]);
      boolean selected = (i == 0);
      menus[i].setSelected(selected);
      menus[i].setMnemonic('1' + i);
      menus[i].setFont(fontArray[i]);
      menus[i].addActionListener(fontListener);
      group.add(menus[i]);
      mFont.add(menus[i]);
    }

    mFont.addSeparator();

    boldMenuItem = new JCheckBoxMenuItem("Bold");
    boldMenuItem.setMnemonic('b');
    Font fn = fontArray[1].deriveFont(Font.BOLD);
    boldMenuItem.setFont(fn);
    boldMenuItem.setSelected(false);
    boldMenuItem.addActionListener(fontListener);
    mFont.add(boldMenuItem);

    italicMenuItem = new JCheckBoxMenuItem("Italic");
    italicMenuItem.setMnemonic('i');
    fn = fontArray[1].deriveFont(Font.ITALIC);
    italicMenuItem.setFont(fn);
    italicMenuItem.setSelected(false);
    italicMenuItem.addActionListener(fontListener);
    mFont.add(italicMenuItem);

    menuBar.add(mFont);

    return menuBar;
  }

  protected void updateMonitor() {
    int index = -1;
    for (int k = 0; k < menus.length; k++) {
      if (menus[k].isSelected()) {
        index = k;
        break;
      }
    }
    if (index == -1)
      return;

    if (index == 2) // Courier
    {
      boldMenuItem.setSelected(false);
      boldMenuItem.setEnabled(false);
      italicMenuItem.setSelected(false);
      italicMenuItem.setEnabled(false);
    } else {
      boldMenuItem.setEnabled(true);
      italicMenuItem.setEnabled(true);
    }

    int style = Font.PLAIN;
    if (boldMenuItem.isSelected())
      style |= Font.BOLD;
    if (italicMenuItem.isSelected())
      style |= Font.ITALIC;
  }

  public static void main(String argv[]) {
    new MenuDemo();
  }
}