我想把frame容器上的都顯示,為什麼只顯示我最後add的?
import java.awt.geom.Point2D;
import java.awt.geom.Line2D;
import java.awt.geom.Ellipse2D;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JComponent;
public class P5_11
{
public static void main(String args[])
{
JFrame frame = new JFrame();
frame.setTitle("P5_11");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
        LetterH letterH = new LetterH();
LetterE letterE = new LetterE();
LetterL letterL = new LetterL();
LetterO letterO = new LetterO();
frame.add(letterH);
        frame.add(letterE);
        frame.add(letterL);
frame.add(letterO);
        frame.setVisible(true);
}
}
class LetterH extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
Point2D.Double p1 = new Point2D.Double(60,100);
Point2D.Double p2 = new Point2D.Double(60,200);
Point2D.Double p3 = new Point2D.Double(110,100);
Point2D.Double p4 = new Point2D.Double(110,200);
Point2D.Double p5 = new Point2D.Double(60,150);
Point2D.Double p6 = new Point2D.Double(110,150);
Line2D.Double l1 = new Line2D.Double(p1,p2);
Line2D.Double l2 = new Line2D.Double(p3,p4);
Line2D.Double l3 = new Line2D.Double(p5,p6);
        g2.draw(l1);
g2.draw(l2);
g2.draw(l3);

}
}
class LetterE extends JComponent
{
public void paintComponent(Graphics g)
{
    Graphics2D g2 = (Graphics2D)g;
Point2D.Double p1 = new Point2D.Double(130,100);
Point2D.Double p2 = new Point2D.Double(130,200);
Point2D.Double p3 = new Point2D.Double(180,100);
Point2D.Double p4 = new Point2D.Double(130,150);
Point2D.Double p5 = new Point2D.Double(180,150);
Point2D.Double p6 = new Point2D.Double(180,200);
Line2D.Double l1 = new Line2D.Double(p1,p2);
Line2D.Double l2 = new Line2D.Double(p1,p3);
Line2D.Double l3 = new Line2D.Double(p4,p5);
Line2D.Double l4 = new Line2D.Double(p2,p6);
g2.draw(l1);
g2.draw(l2);
g2.draw(l3);
g2.draw(l4);
}
}
class LetterL extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
Point2D.Double p1 = new Point2D.Double(210,100);
Point2D.Double p2 = new Point2D.Double(210,200);
Point2D.Double p3 = new Point2D.Double(260,200);
Line2D.Double l1 = new Line2D.Double(p1,p2);
Line2D.Double l2 = new Line2D.Double(p2,p3);
Point2D.Double p4 = new Point2D.Double(280,100);
Point2D.Double p5 = new Point2D.Double(280,200);
Point2D.Double p6 = new Point2D.Double(330,200);
Line2D.Double l3 = new Line2D.Double(p4,p5);
Line2D.Double l4 = new Line2D.Double(p5,p6);
g2.draw(l1);
g2.draw(l2);
     }
}
class LetterO extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
    Ellipse2D.Double e1 = new Ellipse2D.Double(350,100,70,90);
g2.draw(e1);
}
}

解决方案 »

  1.   

    JFrame的add应该只是加compenent组件类的吧,而jbutton等应该是加在compenent或者jpanel等组件上去的
      

  2.   

    fram怎么能直接添加控件呢? 要放到默认容器中.才能显示出来
    去学习下布局.
      

  3.   

    我add的是compenent組件類呀?怎麼會是控件呢?
      

  4.   

    你一个component是一层一层覆盖的,所以你要设大小的.
    main方法改成这个样子:public static void main(String args[])
    {
    JFrame frame = new JFrame();
    frame.setTitle("P5_11");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500,500);
    LetterO letterO = new LetterO();
    letterO.setSize(500,500);
    frame.add(letterO);

    LetterL letterL = new LetterL();
    letterL.setSize(340, 500);
    frame.add(letterL);

    LetterE letterE = new LetterE();
    letterE.setSize(190, 500);
    frame.add(letterE);

            LetterH letterH = new LetterH();
            letterH.setSize(120, 500);
    frame.add(letterH);
            
            frame.setVisible(true);
    }另外LetterL类的paintComponent方法少了两句:
    g2.draw(l3);
    g2.draw(l4);看看效果吧.