我试图创建一个简单的游戏,但是从主类的多个类进行绘制时遇到了麻烦。到目前为止,这是我的代码。

public static void main(String[] args)
{
    JFrame mainGameFrame = new JFrame("Space4X");

    StarsPanel starsPanel = new StarsPanel();
    HomePlanet homePlanet = new HomePlanet();

    mainGameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainGameFrame.setResizable(true);

    mainGameFrame.getContentPane().add(homePlanet);
    mainGameFrame.getContentPane().add(starsPanel);


    mainGameFrame.pack();
    mainGameFrame.setVisible(true);

}

public void HomePlanet()
{
  HomePlanet homePlanet = new HomePlanet();

}

}


这是我的HomePlanet课程,

package space4x;

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

public class HomePlanet extends JPanel
{


public void HomePlanet()
{

}


public void paintComponent (Graphics page)
{
    //Draw planet
    super.paintComponent (page);
    page.setColor(Color.RED);
    page.fillRect(10,10,50,50);

}


}


我还有一个叫做StarsPanel的类,它可以在任意位置绘制星星,并且效果很好,但是由于某种原因,HomePlanet却无法。

在主班下,如果我有

mainGameFrame.getContentPane().add(starsPanel);


首先,它将代替starPanel绘制HomePlanet类下的内容,而不绘制StarPanel类下的内容。

这使我发疯,为什么我可以让一个人去工作而不是另一个人。

请帮忙。

最佳答案

默认情况下,内容窗格使用BorderLayout。将面板添加到内容窗格时,将其添加到BorderLayout的中心。因此,当您添加第二个面板时,它将替换布局中心的第一个面板。

如果您希望将两个面板一一画在另一个上,那么您就没有合适的策略。创建一个单个面板,该面板将您当前拥有的两个面板的绘画结合在一起。

07-24 09:37