我试了一下,可能是不能在运行期间再往frame加panel了,
所以你那个panel没加上去,你其实可以先把它加上去呀,

解决方案 »

  1.   

    1.看一下关于布局管理器。
    f.setLayout(new FlowLayout());
    你的Frame用的是FlowLayout,当你添加sp时,它是以默认尺寸,顺序加入到了父容器中
    2.在panel上画图,应该重载paint()方法。
      

  2.   

    你把sp加到Frame上之后,用Draw绘制了直线,但是这个actionPerformed执行之后,会触发Frame调用repaint(), 再触发sp调用repaint(), 就清空了你绘制的直线。所以你把Draw方法换成paint, 调用的时候直接repaint()试试。
      

  3.   

    楼上的说得对,光重载一个draw()是不行的,还要写paint()(其实主要是要重载repaint()的行为,缺省repaint()调用paint(),所以要重载paint())
      

  4.   

    把draw()改成paint(),再把sp.draw(g)改成sp.repaint()编译运行,发现还是不行啊,并且发现这两句
    System.out.println(g);// 测试语句,可打印出;
    System.out.println(l1+","+l2+","+l3+","+l4);// 测试语句,可打印出
    没有执行,也就是说repaint没有触发paint(),是怎么回事啊?
      

  5.   

    to:asdmonster(asd) 
    我照得的方法做了还是不行啊
    有哪位做好了请帖出源代码啊
      

  6.   

    是不是g.setColor(Color.XXX)
    设置一个颜色
      

  7.   

    import java.awt.*;
    import java.awt.event.*;
    import java.lang.*;class SubPanel extends Panel
    {
    int l1,l2,l3,l4;
    public SubPanel(int l1,int l2,int l3,int l4)
    {
        this.l1=l1;
        this.l2=l2;
        this.l3=l3;
        this.l4=l4;
    }

    public void paint(Graphics g)
    {

            System.out.println(g);// ???嬪丆壜懪報弌丟
            System.out.println(l1+","+l2+","+l3+","+l4);// ???嬪丆壜懪報弌丟
            g.drawRect(l1,l2,l3,l4);
            System.out.println("1111");

    }
    }
    public class draw implements ActionListener
    {
    int i1, i2,i3,i4; Frame f=new Frame("drawing");
    TextField tf1=new TextField(5);
    TextField tf2=new TextField(5);
    TextField tf3=new TextField(5);
    TextField tf4=new TextField(5);
    Button b=new Button("変夋");
    SubPanel sp;
    public draw()
    {
                      // 这里修改了一下
    Panel top = new Panel();
    top.add(tf1);
    top.add(tf2);
    top.add(tf3);
    top.add(tf4);
    top.add(b);

    f.setLayout(new BorderLayout());
    f.add(top, BorderLayout.NORTH);
    //f.add(sp = new 
    //f.pack(); b.addActionListener(this);
    //f.setLayout(new FlowLayout());
    f.setSize(400,500);
    f.setBackground(new Color(89,145,145));
    f.setForeground(new Color(0,0,255));
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {System.exit(0);}
    });
    }
    public void actionPerformed(ActionEvent e)
    {
            
    i1=Integer.parseInt(tf1.getText());
    i2=Integer.parseInt(tf2.getText());
    i3=Integer.parseInt(tf3.getText());
    i4=Integer.parseInt(tf4.getText());
    sp=new  SubPanel(i1,i2,i3,i4);
    System.out.print(i1+" "+i2+" "+i3+" "+i4);// ???嬪丆//壜懪報弌丟

    f.add(sp, BorderLayout.CENTER);
    f.doLayout();
                       // 调用doLayout重新布局,否则sp的宽高都是0

    f.repaint();
    sp.repaint();
    System.out.println("222");// ???嬪丆壜懪報弌丟
    }
    public static void main(String args[])
    {
    draw d=new draw();
    System.out.println("555");// ???嬪丆壜懪報弌丟
    }

    }