Java 并非所有的JC组件都在喷漆

Java 并非所有的JC组件都在喷漆,java,swing,Java,Swing,我有两个对象扩展JComponent,它们都覆盖paintComponent()。当只有一个或另一个被添加到Jpanel时,它被正确地绘制,但是如果我同时添加这两个,则只显示一个 我添加了这两个元素的init方法如下: public class Applet extends JApplet { long time_interval = 200; // length of time between moves in ms int w = 75; int h = 75; int[][] a = n

我有两个对象扩展JComponent,它们都覆盖paintComponent()。当只有一个或另一个被添加到Jpanel时,它被正确地绘制,但是如果我同时添加这两个,则只显示一个

我添加了这两个元素的init方法如下:

public class Applet extends JApplet {

long time_interval = 200; // length of time between moves in ms
int w = 75;
int h = 75;
int[][] a = new int[w][h]; // creates a 2D array to use as background
Creature test;

public void init() {
    System.out.println("Zachary Powell 1104583");
    resize(750, 850);

    WorldView tv = new WorldView(a);
    // add(applet, BorderLayout.CENTER);

    test = new Creature(100, 30, 1);
    add(tv);
    add(test);

    startTimer();
}
...
然而,电视是不画的

我的生物课:

public class Creature extends JComponent{
    int health;
    boolean dead;
    int xpos, ypos;
    static int size = 10;

    Creature(int h, int y, int x) {
        dead = false;
        health = h;
        ypos = y;
        xpos = x;
    }

    void Update() {
        checkHealth();
    }

    private void checkHealth() {
        if (health <= 0)
            dead = true;
    }

    public void reduceHealth(int amount) {
        health -= amount;
    }

    public void move() {
        if (xpos < 75) {
            xpos++;
        } else {
            xpos = 1;
        }
        reduceHealth(1);
    }

    public void paintComponent(Graphics g) {
        g.setColor(Color.BLUE);
        g.fill3DRect(xpos * size, ypos * size, size, size, true);
    }
}
公共类组件{
国际卫生组织;
布尔死;
int XPO,YPO;
静态整数大小=10;
生物(智力h,智力y,智力x){
死=假;
健康=小时;
ypos=y;
xpos=x;
}
无效更新(){
checkHealth();
}
私有void checkHealth(){

如果(运行状况顶层容器的默认布局为BorderLayout。默认情况下,如果未指定约束,则组件将添加到中心。但是,只能将一个组件添加到中心,因此仅显示最后添加的一个组件

世界观应该在后面,以前景中的生物为中心

然后将世界视图添加到小程序中,并将生物添加到世界视图中


你需要在WorldView上使用适当的布局管理器来获得你想要的布局。

为什么你要创建一个新的
JApplet
,而你的类已经是
JApplet
?是的,至少可以说它很混乱,现在已经清理了@peeskillet,但是仍然是相同的问题1)为了更快地获得更好的帮助,发布一个(最简单的完整和可验证的示例)。2)为什么要编写小程序?如果是由于老师的规范,请参考。3)小程序不应尝试设置自己的大小。啊,好的,但是我应该添加我的JC组件吗?WorldView应该位于以生物为中心的背面foreground@ZacPowell,请参阅其他信息。
public class WorldView extends JComponent {
    static Color[] colors =
            {black, green, blue, red,
                    yellow, magenta, pink, cyan};
    int[][] a;
    int w, h;
    static int size = 10;
    //Create the object with the array give
    public WorldView(int[][] a) {
        this.a = a;
        w = a.length;
        h = a[0].length;
    }

    public void paintComponent(Graphics g) {
        for (int i = 0; i < w; i++) {
            for (int j = 0; j < h; j++) {
                    g.fill3DRect(i * size, j * size,
                            size, size, true);
            }
        }
    }

    public Dimension getPreferredSize() {
        return new Dimension(w * size, h * size);
    }
}