【问题标题】:JApplet setBackground not workingJApplet setBackground 不工作
【发布时间】:2025-12-01 03:25:02
【问题描述】:

我想知道为什么 setBackground() 方法实际上并没有使背景变黑。我觉得这与实现 JApplet 而不是 Applet 的类有关,但我无法弄清楚具体细节。这真的让我很烦。任何帮助表示赞赏!

import javax.swing.*;
import java.awt.*;

public class Rocket extends JApplet
{
    private final int APPLET_WIDTH = 200;
    private final int APPLET_HEIGHT = 200;

    private int[] xRocket = {100, 120, 120, 130, 130, 70, 70, 80, 80};
    private int[] yRocket = {15, 40, 115, 125, 150, 150, 125, 115, 40};

    private int[] xWindow = {95, 105, 110, 90};
    private int[] yWindow = {45, 45, 70, 70};

    private int[] xFlame = {70, 70, 75, 80, 90, 100, 110, 115, 120, 130, 130};
    private int[] yFlame = {155, 170, 165, 190, 170, 175, 160, 185, 160, 175, 155};

    public void init ()
    {
        setBackground (Color.black);
        setSize (APPLET_WIDTH, APPLET_HEIGHT);
    }

    public void paint (Graphics page)
    {
        page.setColor (Color.cyan);
        page.fillPolygon (xRocket, yRocket, xRocket.length);

        page.setColor (Color.gray);
        page.fillPolygon (xWindow, yWindow, xWindow.length);

        page.setColor (Color.red);
        page.drawPolyline (xFlame, yFlame, xFlame.length);
    }
} 

【问题讨论】:

  • private final int APPLET_WIDTH = 200; applet 的大小在加载它的 HTML 中设置。不要试图在代码中强制设置大小。

标签: java swing graphics japplet setbackground


【解决方案1】:

ContentPane而不是父小程序组件上设置颜色

getContentPane().setBackground(Color.BLACK);

旁白:

用于 Swing 中的自定义绘画覆盖 paintComponent 而不是 paintJApplet 不是JComponent 的子类,因此需要一个基于此的新组件来执行此操作。确保调用super.paintComponent(g)

【讨论】:

  • 谢谢!我现在有一个新问题。我按照您的指示进行操作,现在 Applet 生成了一个黑页。由于“找不到符号”错误,方法 super.paintComponent(g) 未编译。这是什么原因?
  • 如上所述,JApplet 没有扩展 JComponent,因此您需要创建一个扩展 JComponent 的新类。如果这不是问题,请将新代码附加到您的问题中。