那个“开始”按钮点了没有任何反应,但是把if里面的内容单独拿出来又可以画出图形,放在actionPerformed里面就不行了,希望大家能帮忙看一下出什么问题了……

解决方案 »

  1.   

    …………忘贴代码了不好意思
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;public  class snake extends JFrame implements ActionListener{

    JFrame f=new JFrame("GreedSnake"); JPanel jp=new JPanel();//定义一个上层布局面板
    JPanel jp1=new JPanel();//定义一个下层布局面板


    //创建三个游戏进度按钮
    JButton k=new JButton("开始");
    JButton z=new JButton("暂停");
    JButton j=new JButton("结束");
    //创建3个单选按钮
        JRadioButton n1=new JRadioButton("初级");
    JRadioButton n2=new JRadioButton("中级");
    JRadioButton n3=new JRadioButton("高级");
    ButtonGroup bg=new ButtonGroup();//定义一个按钮组,将单选项添加到按钮组中——n.add(nx)
    //创建帮助按钮
    JButton h=new JButton("帮助");
    //创建文本区域
    JTextArea ta=new JTextArea("注意:",3,39);
    snake(){
    f.setLayout(new BorderLayout());

    f.add(jp,BorderLayout.NORTH);

    //for test




    //帮助按钮
    h.addActionListener(this);//注册监听器
    jp.add(h);



    //难度选择
       JPanel p1=new JPanel();//定义一个难度选择面板
       p1.setLayout(new FlowLayout());
       
       p1.setBorder(BorderFactory.createTitledBorder("难度选择"));

       bg.add(n1);//将单选选项加入按钮组
       bg.add(n2);
       bg.add(n3);

       p1.add(n1);//单选选项加入布局管理器——难度面板
       p1.add(n2);
       p1.add(n3);
       
       jp.add(p1);
    //状态显示栏
                JPanel p3=new JPanel();//定义一个游戏进度面板
                p3.setBorder(BorderFactory.createTitledBorder("提示"));//设置文本区名

    p3.setLayout(new FlowLayout());

    ta.setForeground(Color.red);//设置文本区内容颜色
    ta.setLineWrap(true);//设置文本区自动换行

    JScrollPane sp=new JScrollPane (ta,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);//创建一个带滚动条的面板

    p3.add(sp);//将文本区添加到滚动面板中 jp.add(p3); //游戏开始、结束


    k.addActionListener(this);//开始按钮注册监听器

    JPanel p2=new JPanel();//定义一个游戏进度面板
    p2.setLayout(new FlowLayout());

    jp1.add(k);
    jp1.add(z);
    p2.add(j);

    f.add(p2,BorderLayout.SOUTH);


    //游戏界面框架
    f.setBounds(10,10,900,600);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //事件监听器
    public void actionPerformed(ActionEvent e){
    //帮助按钮的事件监听器
    if(e.getSource()==h){//获取事件源

    JDialog help=new JDialog();//创建帮助一个对话框

    help.setTitle("帮助");
    help.setSize(550,150);//给帮助对话框设置大小
    help.setModal(true);//设置为模态化对话框

    help.add(new helpPanel());//将帮助画板文字加入帮助对话框

    help.setVisible(true);//设置帮助对话框为可见
    }

    //开始按钮的事件监听器
    else if(e.getSource()==k){            JDialog k=new JDialog();//创建帮助一个对话框

    k.setTitle("开始");

    }

    }

    //运行
    public static void main(String args[]){
    new snake();
    }
    }//游戏规则画板
    class helpPanel extends JPanel{
    public void paintComponent(Graphics g){

    super.paintComponent(g);

    g.setFont(new Font("Serif",Font.PLAIN+Font.BOLD,16));
    g.drawString("游戏规则:", 1, 15);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——玩家通过键盘控制蛇在游戏区中运动 ", 1, 30);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——当蛇头碰到软件提供的食物或者宝物时,得分并增加蛇身长度一个单位", 1, 45);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——当蛇头碰到蛇身或墙壁时,如果没有相应的宝物则游戏结束", 1, 60);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——游戏设定两种宝物,一种为穿身宝物,另一种为穿墙宝物", 1, 75);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——记分规则:吃掉一个食物或者宝物加100分", 1, 90);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——晋级规则:累计得2000分自动进入下一个级别", 1,105);
    }

    }
    //初始贪吃蛇
    class snakePanel extends JPanel{
    private boolean raised=true;
    public void paintComponent(Graphics g){
    super.paintComponent(g);

    g.draw3DRect(getWidth()/2,getHeight()/2,9,9, raised);
    g.fill3DRect(getWidth()/2,getHeight()/2,9,9, raised);
    }
    }
      

  2.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;public  class snake extends JFrame implements ActionListener{

    JFrame f=new JFrame("GreedSnake"); JPanel jp=new JPanel();//定义一个上层布局面板
    JPanel jp1=new JPanel();//定义一个下层布局面板


    //创建三个游戏进度按钮
    JButton k=new JButton("开始");
    JButton z=new JButton("暂停");
    JButton j=new JButton("结束");
    //创建3个单选按钮
        JRadioButton n1=new JRadioButton("初级");
    JRadioButton n2=new JRadioButton("中级");
    JRadioButton n3=new JRadioButton("高级");
    ButtonGroup bg=new ButtonGroup();//定义一个按钮组,将单选项添加到按钮组中——n.add(nx)
    //创建帮助按钮
    JButton h=new JButton("帮助");
    //创建文本区域
    JTextArea ta=new JTextArea("注意:",3,39);
    snake(){
    f.setLayout(new BorderLayout());

    f.add(jp,BorderLayout.NORTH);

    //for test




    //帮助按钮
    h.addActionListener(this);//注册监听器
    jp.add(h);



    //难度选择
       JPanel p1=new JPanel();//定义一个难度选择面板
       p1.setLayout(new FlowLayout());
       
       p1.setBorder(BorderFactory.createTitledBorder("难度选择"));

       bg.add(n1);//将单选选项加入按钮组
       bg.add(n2);
       bg.add(n3);

       p1.add(n1);//单选选项加入布局管理器——难度面板
       p1.add(n2);
       p1.add(n3);
       
       jp.add(p1);
    //状态显示栏
                JPanel p3=new JPanel();//定义一个游戏进度面板
                p3.setBorder(BorderFactory.createTitledBorder("提示"));//设置文本区名

    p3.setLayout(new FlowLayout());

    ta.setForeground(Color.red);//设置文本区内容颜色
    ta.setLineWrap(true);//设置文本区自动换行

    JScrollPane sp=new JScrollPane (ta,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);//创建一个带滚动条的面板

    p3.add(sp);//将文本区添加到滚动面板中 jp.add(p3); //游戏开始、结束


    k.addActionListener(this);//开始按钮注册监听器

    JPanel p2=new JPanel();//定义一个游戏进度面板
    p2.setLayout(new FlowLayout());

    p2.add(k);
    p2.add(z);
    p2.add(j);

    f.add(p2,BorderLayout.SOUTH);


    //游戏界面框架
    f.setBounds(10,10,900,600);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //事件监听器
    public void actionPerformed(ActionEvent e){
    //帮助按钮的事件监听器
    if(e.getSource()==h){//获取事件源

    JDialog help=new JDialog();//创建帮助一个对话框

    help.setTitle("帮助");
    help.setSize(550,150);//给帮助对话框设置大小
    help.setModal(true);//设置为模态化对话框

    help.add(new helpPanel());//将帮助画板文字加入帮助对话框

    help.setVisible(true);//设置帮助对话框为可见
    }

    //开始按钮的事件监听器
    else if(e.getSource()==k){
    f.add(new snakePanel());

    }

    }

    //运行
    public static void main(String args[]){
    new snake();
    }
    }//游戏规则画板
    class helpPanel extends JPanel{
    public void paintComponent(Graphics g){

    super.paintComponent(g);

    g.setFont(new Font("Serif",Font.PLAIN+Font.BOLD,16));
    g.drawString("游戏规则:", 1, 15);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——玩家通过键盘控制蛇在游戏区中运动 ", 1, 30);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——当蛇头碰到软件提供的食物或者宝物时,得分并增加蛇身长度一个单位", 1, 45);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——当蛇头碰到蛇身或墙壁时,如果没有相应的宝物则游戏结束", 1, 60);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——游戏设定两种宝物,一种为穿身宝物,另一种为穿墙宝物", 1, 75);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——记分规则:吃掉一个食物或者宝物加100分", 1, 90);

    g.setFont(new Font("Serif",Font.PLAIN,14));
    g.drawString("——晋级规则:累计得2000分自动进入下一个级别", 1,105);
    }

    }
    //初始贪吃蛇
    class snakePanel extends JPanel{
    private boolean raised=true;
    public void paintComponent(Graphics g){
    super.paintComponent(g);

    g.draw3DRect(getWidth()/2,getHeight()/2,9,9, raised);
    g.fill3DRect(getWidth()/2,getHeight()/2,9,9, raised);
    }
    }
    发错了………………是这个