//代码片段,是用我说的笨方法,milev1\2\3已定义,是CheckboxMenuItem对象,不相关代码已经省略
public void itemStateChanged(ItemEvent e)
{
          if(e.getSource()==milev1)
     {
      milev2.setState(false);
      milev3.setState(false);
     }
  else
    if(e.getSource()==milev2)
     {
       milev1.setState(false);
       milev3.setState(false);
     }
else
{   
  milev1.setState(false);
  milev2.setState(false);
 }
  }
//其他办法?

解决方案 »

  1.   

    在swing中,
    JRadioButton[] jrb=new JRadioButton[3];
    ButtonGroup group=new ButtonGroup();      //实现单选
    for(int i=0;i<3;i++){
       jrb[i]=new JRadioButton();
       group.add(jrb[i]);
    }
    这样就可以实现单选功能了.
      

  2.   

    用ButtonGroup  private ButtonGroup buttonGroup1 = new ButtonGroup();
      private JCheckBox jCheckBox1 = new JCheckBox();
      private JCheckBox jCheckBox2 = new JCheckBox();
          jCheckBox1.setSelected(true);
        jCheckBox1.setText("jCheckBox1");
        jCheckBox2.setText("jCheckBox2");
        this.getContentPane().add(jCheckBox1, null);
        this.getContentPane().add(jCheckBox2, null);
         buttonGroup1.add(jCheckBox1);
         buttonGroup1.add(jCheckBox2);*******************************************************
      

  3.   

    多谢楼上几位,我终于盼到有人回复了。呵呵!~~
    我对swing不熟悉,查了一下,你们说的JRadioButton好象都是单选按钮,
    JCheckBox是复选框,可以通过分组实现单选(多选一)。但我想做的是“菜单”里的单选菜单项。
    1、用swt能实现吗?
    2、如果用swing应该是JCheckBoxMenuItem类,怎么做?
       
    类似于:
     ---------——
    |  √ 简单   |
    |     中等   |
    |     复杂   |
    ————————
    使这三个菜单项,用户只能选中一个。
      

  4.   

    sorry,上面有包名打字错误,改错,并补充。
    使复选菜单项实现单选。
    1、能用awt (CheckBoxMenuItem)吗?如何做?
    2、如果用swing应该是JCheckBoxMenuItem类吧,怎么做?
      

  5.   


    ******************************************************
    先定义:
    private JMenuBar menuBar = new JMenuBar();
      private JMenu Menu = new JMenu();
     private JCheckBoxMenuItem radioBtnItem1 = new JCheckBoxMenuItem();
       private JCheckBoxMenuItem radioBtnItem2 = new JCheckBoxMenuItem();
        private JCheckBoxMenuItem radioBtnItem3 = new JCheckBoxMenuItem();接着设置 
    Menu.setText("file");
        radioBtnItem1.setText("简单");
         radioBtnItem2.setText("中等");
          radioBtnItem3.setText("复杂");
    menuBar.add(Menu);
        Menu.add(radioBtnItem1);
        Menu.add(radioBtnItem2);
         Menu.add(radioBtnItem3);********************************************************可以揭帖了,呵呵。
      

  6.   

    to: mengxianwei007(斩不断&lt;==&gt;理还乱) 
         谢谢你来!但是。。你的代码还是多选。you look:
    import javax.swing.*;
    public class  G 
    {
             private JFrame f;      
    private JMenuBar menuBar;
    private JMenu menu;
    private JCheckBoxMenuItem radioBtnItem1;
             private JCheckBoxMenuItem radioBtnItem2;
             private JCheckBoxMenuItem radioBtnItem3;
    public G()
    {
               f=new JFrame("Test");
      menuBar = new JMenuBar();
               menu = new JMenu();
       radioBtnItem1 = new JCheckBoxMenuItem();
                radioBtnItem2 = new JCheckBoxMenuItem();
                radioBtnItem3 = new JCheckBoxMenuItem();
              menu.setText("file");
                radioBtnItem1.setText("简单");
                radioBtnItem2.setText("中等");
                radioBtnItem3.setText("复杂");
              menuBar.add(menu);
              menu.add(radioBtnItem1);
              menu.add(radioBtnItem2);
              menu.add(radioBtnItem3);
     f.setJMenuBar(menuBar);////////    
     f.setSize(200,300);
     f.show();
           
    }

    public static void main(String[] args) 
    {
        G g=new G();
    }

    }//:(  三个都可以选上啊!我要单选。
      

  7.   

    to  MisSelf(异地伊) :
       你的想法就和我在一楼写的代码思想一样了。可以解决。但总觉得不正宗,呵呵。总感觉有个什么类可以完成吧。
      

  8.   

    揭帖吧。呵呵。
    **********************************************package override;import javax.swing.*;
    import java.awt.event.*;
    public class  G extends JFrame
    {
    //         private JFrame f;
      private JMenuBar menuBar=new JMenuBar();
      private JMenu menu;
      private JCheckBoxMenuItem radioBtnItem1;
      private JCheckBoxMenuItem radioBtnItem2;
      private JCheckBoxMenuItem radioBtnItem3;
      private JMenu jMenu1 = new JMenu();  public G()
      {
    //           f=new JFrame("Test");//      this.setSize(200,300);
    //       this.show();
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }  }  public static void main(String[] args)
      {
        G g=new G();
        g.setSize(400,300);
        g.setVisible(true);
      }
      private void jbInit() throws Exception {
        menuBar = new JMenuBar();
        menu = new JMenu();
        radioBtnItem1 = new JCheckBoxMenuItem();
        radioBtnItem2 = new JCheckBoxMenuItem();
        radioBtnItem3 = new JCheckBoxMenuItem();
        menu.setText("file");
        menuBar.add(menu);
        menu.add(radioBtnItem1);
        menu.add(radioBtnItem2);
        menu.add(radioBtnItem3);
        this.setJMenuBar(menuBar);////////
        radioBtnItem1.setText("简单");    radioBtnItem1.addItemListener(new java.awt.event.ItemListener() {
          public void itemStateChanged(ItemEvent e) {
            radioBtnItem1_itemStateChanged(e);
          }
        });
        radioBtnItem2.setText("中等");
        radioBtnItem2.addItemListener(new java.awt.event.ItemListener() {
          public void itemStateChanged(ItemEvent e) {
            radioBtnItem2_itemStateChanged(e);
          }
        });
        radioBtnItem3.setText("复杂");
        radioBtnItem3.addItemListener(new java.awt.event.ItemListener() {
          public void itemStateChanged(ItemEvent e) {
            radioBtnItem3_itemStateChanged(e);
          }
        });  }  void radioBtnItem1_itemStateChanged(ItemEvent e) {
        if(radioBtnItem1.isSelected()==true){
          radioBtnItem2.setSelected(false);
          radioBtnItem3.setSelected(false);
        }  }  void radioBtnItem2_itemStateChanged(ItemEvent e) {
        if(radioBtnItem2.isSelected()==true){
          radioBtnItem1.setSelected(false);
          radioBtnItem3.setSelected(false);
        }
      }  void radioBtnItem3_itemStateChanged(ItemEvent e) {
        if(radioBtnItem3.isSelected()==true){
          radioBtnItem1.setSelected(false);
          radioBtnItem2.setSelected(false);
        }
      }}
      

  9.   

    你把第一行package override;//注释掉,就可以运行了。我这边测试已经通过了。
      

  10.   

    呵呵,发快了。发完才发现你已经把代码贴上了。
    晕啊,你的办法和我一楼说的不也一样嘛。嘿嘿(真的谢谢你,别走啊,继续)
    1、为什么有jbInit这个方法继承Exception类。
    2、radioBtnItem1.addItemListener(new java.awt.event.ItemListener() {
          public void itemStateChanged(ItemEvent e) {
            radioBtnItem1_itemStateChanged(e);
          }
        });
        三段这样的代码我不懂。
        事件处理里radioBtnItem1_itemStateChanged(e);是什么意思?
      

  11.   

    1、这个是比较正规的写法,在add component 的时候能够捕获exception。
    2、radioBtnItem1.addItemListener(new java.awt.event.ItemListener() {
          public void itemStateChanged(ItemEvent e) {
            radioBtnItem1_itemStateChanged(e);
          }
        });
    是给每一个radioBtnItem都加一个listenser,来触发这个事件。 没有什么不好理解的呀。***************************************************************************你有msn么?我加你。**********************************可以揭帖了,呵呵。