JApplet意外地表现出来

Joh*_*hnW 2 java swing awt japplet

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

除了将GameBoard类添加到该类之外,该程序正常工作JApplet,但是,当我尝试添加ScoreBoard该类时,这两个Panel类都不会显示在Applet上.我猜这现在归结为定位?有任何想法吗?

编辑:回到之前提出的问题Hovercraft,发现它是由于contentPane的布局和添加组件的顺序.

Hov*_*els 5

一些建议:

  • 不要在JApplet的paint方法中绘制,因为它是顶级窗口,不应直接绘制.而是绘制paintComponent(Graphics g)JPanel或其他JComponent的方法,然后将该JPanel添加到JApplet的contentPane.
  • 与他关于超级调用的建议类似,此方法中的第一个方法调用应该是super.paintComponent(g);刷新JPanel图形的方法.
  • 闪烁直接来自您在JApplet的绘画方法中的绘图.如果你按照我的建议去做,你将利用Swing使用双缓冲.
  • 由于这是一个Swing应用程序,因此应避免使用KeyListeners,而应使用Key Bindings.
  • 不要通过调用`getGraphics()来获取组件的Graphics对象.获得的Graphics对象将是短暂的,因此在重新绘制后不会持久存在.

您上面发布的代码对我来说有些困惑.你想用它做什么?您已经向JApplet添加了组件,这些组件应该处理它们自己的图形,然后您也在JApplet上绘制.你想要达到什么样的行为?

  • 恭喜您成为AABHC(Applet Answer Badge Holder's Club)的会员!这是一个非常新的俱乐部,因为在我们两个人之前,它不是一个"俱乐部".顺便说一句 - "长期建立"的传统要求新成员在我们的月度会议上购买第一轮.星期五晚上在"红狮"见.;) (2认同)