将Jlabel添加到java applet

时间:2011-12-18 17:20:59

标签: java applet jlabel

我使用以下代码向java applet添加标签。这些行位于paint(Graphics g)方法中:

ImageIcon icon = new ImageIcon(s);
JLabel myLabel = new JLabel(icon);
add(myLabel);

当我调用add(myLabel)时,屏幕被清除,我之前绘制的所有内容都消失了。 为什么呢?

2 个答案:

答案 0 :(得分:4)

  

这些行在paint(Graphics g)方法中:

您绝不应该在paint()方法中向GUI添加组件。

另外,如果你需要进行自定义绘画,你应该重写paintComponent()而不是paint()。

我建议你阅读Swing tutorial。有部分内容:

  1. 如何使用标签
  2. 执行自定义绘画
  3. 可以帮助你。

    Using Layout Managers上还有一个部分。我不知道它是什么免费设计,但我怀疑你应该使用它。

答案 1 :(得分:0)

只是添加@camickr所说的内容。

永远不要在paint方法上添加组件。每次绘制组件时,都会执行以下代码

ImageIcon icon = new ImageIcon(s);
JLabel myLabel = new JLabel(icon);
add(myLabel);

这样,您可以100%确定在某些时候内存不足,因为每次绘制组件时都要添加新的JLabel。您应该在创建父组件时添加标签。 如果您想在应用程序中添加动画,我建议您加载这些图像,并将它们放在List中,您可以使用paintComponent方法进行访问。

List<JLabel> images = new ArrayList<JLabel>();
// populate images when the application needs them...
// ...
@Override
public void paintComponent(Graphics g){
   // get the image your want to draw
   JLabel imageToDraw = images.get(imageIndex);
}