我使用以下代码向java applet添加标签。这些行位于paint(Graphics g)方法中:
ImageIcon icon = new ImageIcon(s);
JLabel myLabel = new JLabel(icon);
add(myLabel);
当我调用add(myLabel)时,屏幕被清除,我之前绘制的所有内容都消失了。 为什么呢?
答案 0 :(得分:4)
这些行在paint(Graphics g)方法中:
您绝不应该在paint()方法中向GUI添加组件。
另外,如果你需要进行自定义绘画,你应该重写paintComponent()而不是paint()。
我建议你阅读Swing tutorial。有部分内容:
可以帮助你。
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);
}