java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JComponent --javax.swing.AbstractButton --javax.swing.JMenuItem --javax.swing.JRadioButtonMenuItem
与JCheckBoxMenuItem相同,JRadioButtonItem也是继承JMenuItem,因此JRadioButtonMenuItem也具备JMenuItem的许多特性.而 JRadioButtonMenuItem和JCheckBoxMenuItem一样也是一种特殊的JMenuItem.我们在前面也介绍过JRadioButton组件,而 JRadioButtonMenuItem是专用在MenuItem上.我们来看看JRadioButtonMenuItem的构造方法,如下表:
由一表可以看出JRadioButtonMenuItem的构造方式与JCheckBoxMenuItem构造方式几乎相同,而且和JCheckBoxMenuItem的构造方 式一样都是比JMenuItem的构造方式多了设置选择状况的构造方式,设置选择状态就是决定是否要将构造好的JRadioButtonMenuItem 设置为默认值.我们来看下面这个范例:
import javax.swing.*; import java.awt.event.*; public class JRadioButtonMenuItem1 extends JFrame implements ActionListener { JTextArea theArea = null; public JRadioButtonMenuItem1() { super("JRadioButtonMenuItem1"); theArea = new JTextArea(); theArea.setEditable(false); getContentPane().add(new JScrollPane(theArea)); JMenuBar MBar = new JMenuBar(); MBar.setOpaque(true); JMenu mfile = buildFileMenu(); JMenu mstyle = buildStyleMenu(); MBar.add(mfile); MBar.add(mstyle); setJMenuBar(MBar); }// end of JRadioButtonMenuItem1() public JMenu buildFileMenu() { JMenu thefile = new JMenu("File"); thefile.setMnemonic('F'); JMenuItem newf = new JMenuItem("New", new ImageIcon("icons/new24.gif")); JMenuItem open = new JMenuItem("Open", new ImageIcon("icons/open24.gif")); JMenuItem close = new JMenuItem("Close", new ImageIcon( "icons/close24.gif")); JMenuItem quit = new JMenuItem("Exit", new ImageIcon("icons/exit24.gif")); newf.setMnemonic('N'); open.setMnemonic('O'); close.setMnemonic('L'); quit.setMnemonic('X'); newf.setAccelerator(KeyStroke.getKeyStroke('N', java.awt.Event.CTRL_MASK, false)); open.setAccelerator(KeyStroke.getKeyStroke('O', java.awt.Event.CTRL_MASK, false)); close.setAccelerator(KeyStroke.getKeyStroke('L', java.awt.Event.CTRL_MASK, false)); quit.setAccelerator(KeyStroke.getKeyStroke('X', java.awt.Event.CTRL_MASK, false)); newf.addActionListener(this); open.addActionListener(this); close.addActionListener(this); quit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); thefile.add(newf); thefile.add(open); thefile.add(close); thefile.addSeparator(); thefile.add(quit); return thefile; }// end of buildFileMenu() public JMenu buildStyleMenu() { JMenu style = new JMenu("Style"); style.setMnemonic('S'); JRadioButtonMenuItem Left = new JRadioButtonMenuItem("Left", new ImageIcon("icons/left24.gif")); JRadioButtonMenuItem Center = new JRadioButtonMenuItem("Center", new ImageIcon("icons/center24.gif")); JRadioButtonMenuItem Right = new JRadioButtonMenuItem("Right", new ImageIcon("icons/right24.gif")); JRadioButtonMenuItem Justify = new JRadioButtonMenuItem("Justify", new ImageIcon("icons/justify24.gif")); Left.setMnemonic('L'); Center.setMnemonic('E'); Right.setMnemonic('R'); Justify.setMnemonic('J'); Left.setAccelerator(KeyStroke.getKeyStroke('L', java.awt.Event.SHIFT_MASK, false)); Center.setAccelerator(KeyStroke.getKeyStroke('E', java.awt.Event.SHIFT_MASK, false)); Right.setAccelerator(KeyStroke.getKeyStroke('R', java.awt.Event.SHIFT_MASK, false)); Justify.setAccelerator(KeyStroke.getKeyStroke('J', java.awt.Event.SHIFT_MASK, false)); Left.addActionListener(this); Center.addActionListener(this); Right.addActionListener(this); Justify.addActionListener(this); style.add(Left); style.add(Center); style.add(Right); style.add(Justify); return style; }// end of buildStyleMenu() public void actionPerformed(ActionEvent ae) { try { theArea.append("* action '" + ae.getActionCommand() + "' performed. *\n"); } catch (Exception e) { System.out.println("actionPerformed Exception:" + e); } } public static void main(String[] args) { JFrame F = new JRadioButtonMenuItem1(); F.setSize(400, 200); F.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });// end of addWindowListener F.setVisible(true); } // end of main }// end of class JRadioButtonMenuItem1
在这个范例中我们遇到了与JRadioButton同样的问题,那就是选项的单、复选的问题.一般来说RadioButton组件是用来做单选 的情况时使用,而CheckBox则是多为复选情况时使用.那么我们该怎么来解决这个问题呢?还记得我们介绍JRadioButton时的解决方式 吗?没错,就是要利用ButtonGroup类来处理.我们在JRadioButtonMenuItem1.java的buildStyleMenu()方法中加下下列五行:
ButtonGroup bg=new ButtonGroup(); bg.add(Left); bg.add(Center); bg.add(Right); bg.add(Justify);
运行程序我们可看到加入ButtonGroup后的JRadioButtonMenuItem变成只能被单选的菜单.