package cn.javass;import java.awt.*;;public class MyFrame extends Frame { public static void main(String[] args) {
// TODO Auto-generated method stub
       MyFrame myFrame = new MyFrame();
       myFrame.setSize(500, 500);
       myFrame.setLocation(100,100);
       myFrame.setBackground(Color.red);
       
       Panel myPanel = new Panel();
       myPanel.setBackground(Color.black); 
       
       Button myButton =new Button("Test");
       myButton.setBackground(Color.red);
       myPanel.add(myButton);
       myFrame.add(myPanel);
       
      MyCanvas myCanvas = new MyCanvas();
      myCanvas.setBackground(Color.white);
      myFrame.add(myCanvas);
       
       myFrame.setVisible(true);
}

class MyCanvas extends Canvas{ @Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
}


}}
求助大家 这个MyCanvas 写成内部类为什么会错 
我将MyCanvas写成外部类 就对了 这是为什么呢

解决方案 »

  1.   

    public class Canvas extends Componentimplements Accessible
    因为它是public的
      

  2.   

    我贴出来的代码是错误的,是把MyCanvas 放在外部才对
    你的答案 貌似与结果相悖
      

  3.   

    你是在main方法里new的,注意main方法是静态的,静态方法中是不可以new内部类的!!!这才是关键,不信你写个非静态方法试试new内部类,保证没错
      

  4.   


    import java.awt.*;;public class MyFrame extends Frame { class MyCanvas extends Canvas{        @Override
            public void paint(Graphics g) {
                // TODO Auto-generated method stub
                super.paint(g);
            }
            
            
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
           MyFrame myFrame = new MyFrame();
           myFrame.setSize(500, 500);
           myFrame.setLocation(100,100);
           myFrame.setBackground(Color.red);
           
           Panel myPanel = new Panel();
           myPanel.setBackground(Color.black); 
           
           Button myButton =new Button("Test");
           myButton.setBackground(Color.red);
           myPanel.add(myButton);
           myFrame.add(myPanel);
           
          MyCanvas myCanvas = new  MyFrame().new MyCanvas();
          myCanvas.setBackground(Color.white);
          myFrame.add(myCanvas);
           
           myFrame.setVisible(true);
        }
        
    }    
      

  5.   


    import java.awt.*;
    public class MyFrame extends Frame {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    MyFrame myFrame = new MyFrame();
    myFrame.setSize(500, 500);
    myFrame.setLocation(100, 100);
    myFrame.setBackground(Color.red); Panel myPanel = new Panel();
    myPanel.setBackground(Color.black); Button myButton = new Button("Test");
    myButton.setBackground(Color.red);
    myPanel.add(myButton);
    myFrame.add(myPanel); MyCanvas myCanvas = new MyCanvas();
    myCanvas.setBackground(Color.white);
    myFrame.add(myCanvas); myFrame.setVisible(true);
    } static class MyCanvas extends Canvas {

    @Override
    public void paint(Graphics g) {
    // TODO Auto-generated method stub
    super.paint(g);
    }

    }}
    静态方法不能直接调用非静态的。
    这里我把那个内部类该成了静态内部类了。
    楼主记得给分。
      

  6.   

    解释的不对哟,  Button是系统定义的类,也不是静态的。但是Main可以在内部创建和调用
    MyCanvas (extends Canvas) 应该是和Button一个级别的 。硬要说他们都应该定义在类外部。
    但是为什么不能定义在内部呢?