今天写了个程序,主要是用到菜单,不过不知道为什么,点击菜单里的退出后,确没有任何的反应。程序没办法关闭。另外,我想让“难度”菜单变成复选框菜单,但是不会设置,高手帮忙下
我的菜单设计如下所示选择        难度   帮助
开始游戏    简单   帮助
重新开始    中等   关于五子棋
-------     困难
退出  我不知道怎么写才能实现功能,高手们帮忙下!谢谢了
import java.awt.*;
import java.awt.event.*;import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;public class Gobang extends JFrame
{
static Gobang gobang = new Gobang();
static JMenuBar menuBar = new JMenuBar(); //创建菜单条类
    static JMenu menu = new JMenu("选择");  
    static JMenu menu_difficulty = new JMenu("难度"); //英汉互译 difficulty 难度
    static JMenu Menu_About = new JMenu("帮助");      //还未实现
     //选择
    static JMenuItem menuStart = new JMenuItem("开始游戏");   
    static JMenuItem menuReStart = new JMenuItem("重新开始");
    static JMenuItem menuExit = new JMenuItem("退出"); 
     //难度      
   static JMenuItem easy = new JMenuItem("简单");    //创建复选框选项
   static JMenuItem secondary = new JMenuItem("中等");
   static JMenuItem difficulty = new JMenuItem("困难");
     //帮助 
    static JMenuItem help = new JMenuItem("帮助");
    static JMenuItem about = new JMenuItem("关于五子棋");
    
    static PopupMenu pm = new PopupMenu("");  //创建弹出式菜单   //here
    
//    static JMenuItem esay, secondary, difficulty; //设置难度为弹出式菜单
    
public static void main(String args[])
{
gobang.setLayout(null);  //取消页面设置
gobang.setLocation(100, 80);
gobang.setSize(750, 600);

//菜单栏添加
menu.add(menuStart);  //选择菜单添加
menu.add(menuReStart);
menu.addSeparator();  //加一条下划线
menu.add(menuExit); menu_difficulty.add(easy); //难度菜单添加
menu_difficulty.add(secondary);
menu_difficulty.add(difficulty); 

Menu_About.add(help); //关于菜单添加
Menu_About.add(about);

menuBar.add(menu);
menuBar.add(menu_difficulty);
menuBar.add(Menu_About);
gobang.add(menuBar);

gobang.setJMenuBar(menuBar); //设置菜单栏为menuBar,也就是总菜单栏

Container contentPane = gobang.getContentPane();   
        final Panel panel = new Panel();  
gobang.setBackground(new Color(255, 182, 147));
contentPane.setBackground(new Color(255, 182, 147)); 
contentPane.add(panel); 
gobang.setResizable(false);   
        panel.setCursor(new Cursor(Cursor.HAND_CURSOR)); 
gobang.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

gobang.setVisible(true);
}  
public void actionPerformed(ActionEvent e)
{
JMenuItem mi = (JMenuItem)e.getSource(); //取得引发事件的对象 
String miLab = mi.getLabel();            //取得菜单项的文字标题
if(miLab == "关于五子棋" )
{

}
else if(miLab == "帮助" )
{
JOptionPane.showMessageDialog(null, "木有帮助");   //打开不了网页
ProcessBuilder Tomlive  = new ProcessBuilder("iexplore.exe",
"http://hi.csdn.net/space-5376767.html"); 
ProcessBuilder Gobang_skill = new ProcessBuilder("iexplore.exe",
"http://club.topsage.com/thread-799722-1-1.html");
}
else if(miLab == "开始游戏")
{
}
else if(miLab == "重新开始")
{
}
else if(miLab == "退出")
{  
System.exit(0);
}
else if(miLab == "简单")
{
}
else if(miLab == "中等")
{
}
else if(miLab == "困难")
{
}
}  
}     

解决方案 »

  1.   

    你没有给菜单项添加监听器,当然没反应了。而且,你的Gobang没有继承ActionListener,所以你的actionPerformed方法也是无效的。另外,你在actionPerformed中用==比较菜单的文本是不是某个值,这显然是不会相等的,==比较的是两个引用是否引用同一个对象,而不是比较两个引用所有指向的对象的内容,应该改为eqauls。
    下面是我修改后的程序,注意看其中的一些注释。import java.awt.*;
    import java.awt.event.*;import javax.swing.ButtonGroup;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JRadioButtonMenuItem;public class Gobang extends JFrame implements ActionListener
    {
        static Gobang gobang = new Gobang();
        static JMenuBar menuBar = new JMenuBar(); //创建菜单条类
        static JMenu menu = new JMenu("选择");
        static JMenu menu_difficulty = new JMenu("难度"); //英汉互译 difficulty 难度
        static JMenu Menu_About = new JMenu("帮助");      //还未实现
                //选择
        static JMenuItem menuStart = new JMenuItem("开始游戏");
        static JMenuItem menuReStart = new JMenuItem("重新开始");
        static JMenuItem menuExit = new JMenuItem("退出");
                //难度
       static JRadioButtonMenuItem easy = new JRadioButtonMenuItem("简单");    //创建复选框选项
       static JRadioButtonMenuItem secondary = new JRadioButtonMenuItem("中等");
       static JRadioButtonMenuItem difficulty = new JRadioButtonMenuItem("困难");
                //帮助
        static JMenuItem help = new JMenuItem("帮助");
        static JMenuItem about = new JMenuItem("关于五子棋");    static PopupMenu pm = new PopupMenu("");  //创建弹出式菜单   //here//    static JMenuItem esay, secondary, difficulty; //设置难度为弹出式菜单    public static void main(String args[])
        {
            gobang.setLayout(null);  //取消页面设置
            gobang.setLocation(100, 80);
            gobang.setSize(750, 600);
            //给菜单项注册监听器
            menuExit.addActionListener(gobang);
            //.......
            //其他的组件我就不添加了,你自己添加吧
            //对于三个难度的JRadioButtonMenuItem,需要添加ButtonGroup以使得只能选中三个之一
            //说明一下,用JCheckBoxMenuItem不合适,不应用是复选,难度当然应该是单选
            ButtonGroup bg=new ButtonGroup();
            bg.add(easy);
            bg.add(secondary);
            bg.add(difficulty);
            //菜单栏添加
            menu.add(menuStart);  //选择菜单添加
            menu.add(menuReStart);
            menu.addSeparator();  //加一条下划线
            menu.add(menuExit);        menu_difficulty.add(easy); //难度菜单添加
            menu_difficulty.add(secondary);
            menu_difficulty.add(difficulty);        Menu_About.add(help); //关于菜单添加
            Menu_About.add(about);        menuBar.add(menu);
            menuBar.add(menu_difficulty);
            menuBar.add(Menu_About);
            gobang.add(menuBar);        gobang.setJMenuBar(menuBar); //设置菜单栏为menuBar,也就是总菜单栏        Container contentPane = gobang.getContentPane();
            final Panel panel = new Panel();
            gobang.setBackground(new Color(255, 182, 147));
            contentPane.setBackground(new Color(255, 182, 147));
            contentPane.add(panel);
            gobang.setResizable(false);
            panel.setCursor(new Cursor(Cursor.HAND_CURSOR));
            gobang.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        gobang.setVisible(true);
        }
        public void actionPerformed(ActionEvent e)
        {
            JMenuItem mi = (JMenuItem)e.getSource(); //取得引发事件的对象
            String miLab = mi.getLabel();            //取得菜单项的文字标题
            if(miLab.equals("关于五子棋") )
            {        }
            else if(miLab.equals("帮助") )
            {
                JOptionPane.showMessageDialog(null, "木有帮助");   //打开不了网页
                ProcessBuilder Tomlive  = new ProcessBuilder("iexplore.exe",
                                            "http://hi.csdn.net/space-5376767.html");
                ProcessBuilder Gobang_skill = new ProcessBuilder("iexplore.exe",
                        "http://club.topsage.com/thread-799722-1-1.html");
            }
            else if(miLab.equals("开始游戏"))
            {
            }
            else if(miLab.equals("重新开始"))
            {
            }
            else if(miLab.equals("退出"))
            {
                System.exit(0);
            }
            else if(miLab.equals("简单"))
            {
            }
            else if(miLab.equals("中等"))
            {
            }
            else if(miLab.equals("困难"))
            {
            }
        }
    }
      

  2.   

    另外,说一下你程序的结构,你所有的组件全是static的,这样是不太好的。假设你的这个窗口类需要同时打开多个,你这样就会出问题。下面也是一个菜单程序,所有组件都是非静态成员变量。import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    /**
     * 2011-6-7 16:45:55
     * @author Administrator
     */
    public class TJMenu {
        JFrame frame;
        Container contentPane;
        JMenuBar menuBar;
        JMenu fileMenu,editMenu,helpMenu;
        JMenuItem fmOpen,fmClose,fmNew;
        JMenuItem emUndo,emCut,emCopy,emFind;
        JLabel label;
        public TJMenu(){
            frame=new JFrame("菜单测试");
            contentPane=frame.getContentPane();
            setMenu();
            contentPane.add(menuBar,BorderLayout.NORTH);
            label=new JLabel("没有操作");
            label.setHorizontalAlignment(JLabel.CENTER);
            label.setPreferredSize(new Dimension(400,400));
            contentPane.add(label,BorderLayout.CENTER);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
        public void setMenu(){
            menuBar=new JMenuBar();
            fileMenu=new JMenu("文件(F)");
            fileMenu.setMnemonic('f');
            editMenu=new JMenu("编辑(E)");
            editMenu.setMnemonic('e');
            helpMenu=new JMenu("帮助(H)");
            helpMenu.setMnemonic('h');
            menuBar.add(fileMenu);
            menuBar.add(editMenu);
            menuBar.add(helpMenu);
            fmOpen=new JMenuItem("打开(o)", 'o');
            fmOpen.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    label.setText("打开");
                }
            });
            fmOpen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
            fmClose=new JMenuItem("关闭(c)",'c');
            fmClose.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    label.setText("关闭");
                }
            });
            fmNew=new JMenuItem("新建(n)",'n');
            fmNew.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    label.setText("新建");
                }
            });
            fileMenu.add(fmOpen);
            fileMenu.add(fmNew);
            fileMenu.add(fmClose);
            emFind=new JMenuItem("查找(F)",'f');
            emFind.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    label.setText("查找");
                }
            });
            emCut=new JMenuItem("剪切(T)",'t');
            emCut.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    label.setText("剪切");
                }
            });
            emCopy=new JMenuItem("复制(C)",'c');
            emCopy.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    label.setText("复制");
                }
            });
            editMenu.add(emFind);
            editMenu.add(emCopy);
            editMenu.add(emCut);
        }
        public static void main(String args[]){
            new TJMenu();
        }
    }
      

  3.   

    其实我看JAVA不到1个星期的!所以很多不会
    谢谢大家