/*
*<Applet code=LabelText width=300 height=300>
*</Applet>
*/
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
public class LabelText extends JApplet {
JPanel jp=new JPanel();
JL jlObj=new JL("click me");
JL jladd=new JL("new label");
String str;

public void init() {
getContentPane().add(jp);
jp.add(jlObj);
}
class JL extends JLabel 
{
JL(String constr)
{
setText(constr);
addMouseListener(new PanelMouseProcess());
}
public void addLabel()
{
jp.add(jladd);// 怎么才能显示jladd?
jp.revalidate();
}

class PanelMouseProcess extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
addLabel();
}

}

}
}

解决方案 »

  1.   

    /*
    *<Applet code=LabelText width=300 height=300>
    *</Applet>
    */
    import java.awt.*;
    import java.applet.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class LabelText extends JApplet {
    JPanel jp=new JPanel();
    JL jlObj=new JL("click me");
    JL jladd=new JL("new label");
    String str;

    public void init() {
    getContentPane().add(jp);
    jp.add(jlObj);
    }
    class JL extends JLabel 
    {
    JL(String constr)
    {
    setText(constr);
    addMouseListener(new PanelMouseProcess());
    }
    public void addLabel()
    {
    jp.add(jladd);// 怎么才能显示jladd?
    jp.revalidate();
    }

    class PanelMouseProcess extends MouseAdapter
    {
    public void mouseClicked(MouseEvent e)
    {
    addLabel();
    }

    }

    }
    }
      

  2.   

    xioyoo(xioyoo)大虾啊,我快要昏掉了
    我原来用的是repaint,现在又多了个revalidate,还有什么invalidate,可以帮我讲讲它们的区别吗?
    老规矩,另开帖50分好吗,谢谢!
      

  3.   

    如果想多次添加JLabel的话:
    /*
    *<Applet code=LabelText width=300 height=300>
    *</Applet>
    */
    import java.awt.*;
    import java.applet.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class LabelText extends JApplet {
    JPanel jp=new JPanel();
    JL jlObj=new JL("click me");

    String str;

    public void init() {
    jp.setLayout(new FlowLayout());
    getContentPane().add(jp);
    jp.add(jlObj);
    }
    class JL extends JLabel 
    {
    JL(String constr)
    {
    setText(constr);
    addMouseListener(new PanelMouseProcess());
    }
    public void addLabel()
    {
    JL jladd=new JL("new label");
    jp.add(jladd);// 怎么才能显示jladd?
    jp.revalidate();
    }

    class PanelMouseProcess extends MouseAdapter
    {
    public void mouseClicked(MouseEvent e)
    {
    addLabel();
    }

    }

    }
    }
      

  4.   

    不用另开帖了。:)当程序在运行时动态添加组件的时候。如果只调用repaint();不能保证Container包含的组件被正确重绘,这种情况只需要调用revalidate();可以说这是Swing的一个BUG,因为revalidate()是后来才补充的方法!甚至情况严重的时候,revalidate()还是不能解决问题,建议在revalidate();再repaint()一次,不过这种情况我没遇到过。另外revalidate是JComponent的方法。那么组件是Component就无法调用revalidate()了。解决方法是先调用validate();再调用repaint();先调用validate();再调用repaint()这种方法大部分情况也适用于SWING,你可以是你的代码试试这种方法,也应该行
      

  5.   

    一场误会啦,xioyoo(xioyoo)你别介意.