为什么以下代码输出的结果只有一个窗口,里面没有内容呢?
求具体的指点,指出我的那一段代码有问题
先谢谢各位了!import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class MyFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
DrawFrame frame=new DrawFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DrawComponent comp=new DrawComponent();
frame.add(comp);
frame.setVisible(true);
//comp.setVisible(true);

}
}); }}
class DrawFrame extends JFrame {
public DrawFrame(){
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
setSize(width,height);
Image img=kit.getImage("icon.jpg");
setIconImage(img);
setTitle("elsfk");
}

}
class DrawComponent extends JComponent{
public void PaintShaps(Graphics g)
{
Graphics2D g2=(Graphics2D)g;
//draw a square
g2.draw(new Rectangle2D.Double(100,100,50,50));
g2.draw(new Rectangle2D.Double(100,150,50,50));
g2.draw(new Rectangle2D.Double(150,150,50,50));
g2.draw(new Rectangle2D.Double(150,200,50,50));
//draw a string
Point2D pointFirst=new Point(100,100);
Point2D pointLast=new Point(150,200);
g2.draw(new Line2D.Double(pointFirst,pointLast));
//draw a rectangle
Rectangle2D rect=new Rectangle2D.Double(300,300,100,80);
g2.draw(rect);
//draw a circle
Ellipse2D cir=new Ellipse2D.Double();
cir.setFrameFromCenter(rect.getCenterX(),rect.getCenterY(),300+100,300+80);
g2.draw(cir);

}

}

解决方案 »

  1.   

    你的意思应该是重写paintComponent函数吧 
      

  2.   

    主要问题在于DrawComponent这个组件的绘制,你自己写的PaintShaps在组件绘制过程当中不会自动调用,自动调用的是paint()方法,也就是其他组件add这个DrawComponent方法的时候自动调用的是paint(Graphics g)方法
    改成下面的代码就好import java.awt.*;
    import java.awt.geom.*;
    import javax.swing.*;
    public class MyFrame {
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable(){
                public void run(){
                    DrawFrame frame=new DrawFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    DrawComponent comp=new DrawComponent();
                    frame.add(comp);
                    frame.setVisible(true);
                    //comp.setVisible(true);            }
            });    }}
    class DrawFrame extends JFrame {
        public DrawFrame(){
            Toolkit kit=Toolkit.getDefaultToolkit();
            Dimension screenSize=kit.getScreenSize();
            int width=screenSize.width;
            int height=screenSize.height;
            setSize(width,height);
            Image img=kit.getImage("icon.jpg");
            setIconImage(img);
            setTitle("elsfk");
        }}
    class DrawComponent extends JComponent{
           @Override
        public void paint(Graphics g) {
            super.paint(g);    //To change body of overridden methods use File | Settings | File Templates.
            Graphics2D g2=(Graphics2D)g;
            //draw a square
            g2.draw(new Rectangle2D.Double(100,100,50,50));
            g2.draw(new Rectangle2D.Double(100,150,50,50));
            g2.draw(new Rectangle2D.Double(150,150,50,50));
            g2.draw(new Rectangle2D.Double(150,200,50,50));
            //draw a string
            Point2D pointFirst=new Point(100,100);
            Point2D pointLast=new Point(150,200);
            g2.draw(new Line2D.Double(pointFirst,pointLast));
            //draw a rectangle
            Rectangle2D rect=new Rectangle2D.Double(300,300,100,80);
            g2.draw(rect);
            //draw a circle
            Ellipse2D cir=new Ellipse2D.Double();
            cir.setFrameFromCenter(rect.getCenterX(),rect.getCenterY(),300+100,300+80);
            g2.draw(cir);
        }
    }
      

  3.   


    import java.awt.*;
    import java.awt.geom.*;
    import javax.swing.*;public class MyFrame {
        public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
    MyDrawFrame frame = new MyDrawFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    DrawComponent comp = new DrawComponent();
    frame.add(comp);
    frame.setVisible(true);
    //comp.setVisible(true);     }
    });    }}class MyDrawFrame extends JFrame {
        public MyDrawFrame() {
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screenSize = kit.getScreenSize();
    int width = screenSize.width;
    int height = screenSize.height;
    setSize(width, height);
    Image img = kit.getImage("icon.jpg");
    setIconImage(img);
    setTitle("elsfk");
        }}class DrawComponent extends JComponent {
        public void paintComponent(Graphics g) {//重写paintComponent方法,
    super.paintComponent(g); //To change body of overridden methods use File | Settings | File Templates.
    Graphics2D g2 = (Graphics2D) g;
    //draw a square
    g2.draw(new Rectangle2D.Double(100, 100, 50, 50));
    g2.draw(new Rectangle2D.Double(100, 150, 50, 50));
    g2.draw(new Rectangle2D.Double(150, 150, 50, 50));
    g2.draw(new Rectangle2D.Double(150, 200, 50, 50));
    //draw a string
    Point2D pointFirst = new Point(100, 100);
    Point2D pointLast = new Point(150, 200);
    g2.draw(new Line2D.Double(pointFirst, pointLast));
    //draw a rectangle
    Rectangle2D rect = new Rectangle2D.Double(300, 300, 100, 80);
    g2.draw(rect);
    //draw a circle
    Ellipse2D cir = new Ellipse2D.Double();
    cir.setFrameFromCenter(rect.getCenterX(), rect.getCenterY(), 300 + 100,
    300 + 80);
    g2.draw(cir);
        }}