gpt4 book ai didi

java - JApplet 行为异常

转载 作者:行者123 更新时间:2023-11-30 05:53:06 25 4
gpt4 key购买 nike

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 上。我猜这是现在归结为定位?有什么想法吗?

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

最佳答案

一些建议:

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

您在上面发布的代码让我有些困惑。你想用它做什么?您已将组件添加到 JApplet,这些组件应该处理它们自己的图形,然后您也在 JApplet 上绘制。您到底想实现什么样的行为?

关于java - JApplet 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com