Рисование из нескольких классов в основной класс в Java - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь создать простую игру, но у меня возникают проблемы при рисовании из нескольких классов в основном классе.Вот мой код.

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 по какой-то причине не будет.

Под основным классом, если у меня вместо * * StarPanel сначала

mainGameFrame.getContentPane().add(starsPanel);

, он будет рисовать то, что находится под классом HomePlanet, а не то, что подКласс StarPanel.

Это сводит меня с ума, почему я могу заставить одного работать, а не другого.

Пожалуйста, помогите.

1 Ответ

3 голосов
/ 16 марта 2012

На панели содержимого по умолчанию используется BorderLayout. Когда вы добавляете панель на панель контента, вы добавляете ее в центр BorderLayout. Поэтому при добавлении второй панели она заменяет первую в центре макета.

Если вы хотите, чтобы две панели были нарисованы одна поверх другой, у вас нет соответствующей стратегии. Создайте единую панель, которая объединяет рисунки двух панелей, которые у вас есть на данный момент.

...