我添加 的控件怎么显示不了,请帮我看看这段程序吧:

freshman 2002-05-07 05:33:35
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?
}

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

}

}
}
...全文
57 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CFree 2002-05-07
  • 打赏
  • 举报
回复
一场误会啦,xioyoo(xioyoo)你别介意.
CFree 2002-05-07
  • 打赏
  • 举报
回复
谢谢,我加分给你!
肖尧19 2002-05-07
  • 打赏
  • 举报
回复
不用另开帖了。:)

当程序在运行时动态添加组件的时候。如果只调用repaint();不能保证Container包含的组件被正确重绘,这种情况只需要调用revalidate();可以说这是Swing的一个BUG,因为revalidate()是后来才补充的方法!甚至情况严重的时候,revalidate()还是不能解决问题,建议在revalidate();再repaint()一次,不过这种情况我没遇到过。

另外revalidate是JComponent的方法。那么组件是Component就无法调用revalidate()了。解决方法是先调用validate();再调用repaint();

先调用validate();再调用repaint()这种方法大部分情况也适用于SWING,你可以是你的代码试试这种方法,也应该行
肖尧19 2002-05-07
  • 打赏
  • 举报
回复
如果想多次添加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();
}

}

}
}
freshman 2002-05-07
  • 打赏
  • 举报
回复
xioyoo(xioyoo)大虾啊,我快要昏掉了
我原来用的是repaint,现在又多了个revalidate,还有什么invalidate,可以帮我讲讲它们的区别吗?
老规矩,另开帖50分好吗,谢谢!
肖尧19 2002-05-07
  • 打赏
  • 举报
回复
/*
*<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();
}

}

}
}
肖尧19 2002-05-07
  • 打赏
  • 举报
回复
/*
*<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();
}

}

}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧