Using Checkbox Menu Items

Here’s a program using the JCheckBoxMenuItem class. It is similar to the JMenu example, except that each menu item now has a checkmark next to it. We’ve done nothing to make the items mutually exclusive; that comes next. We have, however, reworked the code to use more-portable keyboard accelerators rather than mnemonics. Note that we used M (middle) as the accelerator for the Center option because C is generally reserved for Copy.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class CheckBoxMenuItemExample extends JPanel {
	public JTextPane pane;
	public JMenuBar menuBar;
	public JToolBar toolBar;

	public CheckBoxMenuItemExample() {
		menuBar = new JMenuBar();
		JMenu justifyMenu = new JMenu("Justify");
		ActionListener actionPrinter = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					pane.getStyledDocument()
							.insertString(0, "Action [" + e.getActionCommand() + 
									"] performed!\n", null);
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}
		};
		JCheckBoxMenuItem leftJustify = 
				new JCheckBoxMenuItem("Left", new ImageIcon("left.gif"));
		leftJustify.setHorizontalTextPosition(JMenuItem.RIGHT);
		leftJustify.setAccelerator(KeyStroke.getKeyStroke('L', 
				Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
		leftJustify.addActionListener(actionPrinter);
		JCheckBoxMenuItem rightJustify = 
				new JCheckBoxMenuItem("Right", new ImageIcon("right.gif"));
		rightJustify.setHorizontalTextPosition(JMenuItem.RIGHT);
		rightJustify.setAccelerator(KeyStroke.getKeyStroke('R', 
				Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
		rightJustify.addActionListener(actionPrinter);
		JCheckBoxMenuItem centerJustify = 
				new JCheckBoxMenuItem("Center", new ImageIcon("center.gif"));
		centerJustify.setHorizontalTextPosition(JMenuItem.RIGHT);
		centerJustify.setAccelerator(KeyStroke.getKeyStroke('M', 
				Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
		centerJustify.addActionListener(actionPrinter);
		JCheckBoxMenuItem fullJustify = new JCheckBoxMenuItem("Full", 
				new ImageIcon("full.gif"));
		fullJustify.setHorizontalTextPosition(JMenuItem.RIGHT);
		fullJustify.setAccelerator(KeyStroke.getKeyStroke('F', 
				Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
		fullJustify.addActionListener(actionPrinter);

		justifyMenu.add(leftJustify);
		justifyMenu.add(rightJustify);
		justifyMenu.add(centerJustify);
		justifyMenu.add(fullJustify);

		menuBar.add(justifyMenu);
		menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));

	}

	public static void main(String s[]) {
		CheckBoxMenuItemExample example = new CheckBoxMenuItemExample();
		example.pane = new JTextPane();
		example.pane.setPreferredSize(new Dimension(250, 250));
		example.pane.setBorder(new BevelBorder(BevelBorder.LOWERED));

		JFrame frame = new JFrame("Menu Example");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setJMenuBar(example.menuBar);
		frame.getContentPane().add(example.pane, BorderLayout.CENTER);
		frame.pack();
		frame.setVisible(true);
	}
}