import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.Timer;
public class CountingSheep extends JApplet
{
private Image sheepImage;
private Image backgroundImage;
private GameBoard gameBoard;
private scoreBoard scoreBoard;
public void init()
{
loadImages();
gameBoard = new GameBoard(sheepImage, backgroundImage);
scoreBoard = new scoreBoard();
getContentPane().add(gameBoard);
getContentPane().add(scoreBoard);
}
public void loadImages()
{
sheepImage = getImage(getDocumentBase(), "sheep.png");
backgroundImage = getImage(getDocumentBase(), "bg.jpg");
}
}
只有将
GameBoard
类添加到JApplet
时,程序才能正常工作,但是,当我尝试添加ScoreBoard
类时,两个Panel
类都不会显示在Applet上。我猜这已经到定位了吗?有任何想法吗?编辑:回到以前的问题气垫船,并发现这是由于contentPane的布局和组件的添加顺序。
最佳答案
一些建议:
不要使用JApplet的paint方法,因为这是一个顶层窗口,不应直接在其上绘制。而是绘制JPanel或其他JComponent的paintComponent(Graphics g)
方法,然后将该JPanel添加到JApplet的contentPane中。
与他关于超级调用的建议类似,此方法中的第一个方法调用应该是super.paintComponent(g);
,它将刷新JPanel的图形。
闪烁是直接通过JApplet的绘制方法从您的图形中产生的。如果您按照我的建议进行操作,则将利用Swing的双缓冲功能。
由于这是一个Swing应用程序,因此应避免使用KeyListeners,而应使用Key Bindings。
不要通过调用`getGraphics()获取组件的Graphics对象。获得的Graphics对象将是短暂的,因此在进行任何重新绘制后将不会持久。
您上面发布的代码让我有些困惑。您打算如何处理?您已经向JApplet添加了组件,这些组件应该处理它们自己的图形,然后还要在JApplet上绘画。您到底想实现哪种行为?