2012-04-14 2 views
1

Я делаю игру, в которой будут реализованы три игры. Я начал свой код в одном классе, теперь, когда я хочу переместить его в формат MVC, у меня возникают ошибки. Я начал писать весь код в GameView Class, теперь я хочу переместить часть кода из этого класса в класс SView. Проблема в том, что я проиндексировал JFrame в классе GameView, и он не может найти кадр переменной, когда я перемещаю свой код в класс SView. Итак, мне сказали, чтобы он попал в панель, а затем переместил ее, но это просто испортило мою игру.Как реализовать мой код в Java MVC?

ответ

1

Вы должны организовать вещи по-другому. Некоторые вещи, которые следует учитывать:

  • GameView Ваше главное окно? Сделайте так GameView extends JFrame.
  • SView панель? Сделайте так SView extends Panel.

Еще одна вещь, чтобы думать о: SView некоторые панели, которые вы хотите добавить к вашему GameView, но это не ответственность SView добавить себя. Вместо этого, просто инстанцируйте и собрать эти компоненты где-то за пределами обоих этих классов, f.e .:

GameView gameView = new GameView(); 
gameView.add(new SView()); 

Вы можете также GameView добавить new SView() в конструктор кода вместо.

В любом случае, главное, что компонент не должен заботиться о том, чтобы добавить себя к его родительскому объекту, просто создав собственный контент/дочерние элементы.

Удачи.

+0

Я не вижу веских оснований в любом из приведенного выше кода оригинального плаката для класса, расширяющего JFrame или JPanel. –

+0

Что мне делать с последней строкой? Он имеет рамку в параметре. panel.setLocation ((frame.getWidth() - panel.getWidth())/2, 80); –

1

Некоторые предложения:

  • Основной графический интерфейс будет использовать CardLayout, так что вы можете поменять JPanels легко.
  • Основная функция меню выбора игры заключается в замене JPanels, поэтому выбранная игра визуализируется, а затем инициализирует выбранную игру.
  • Работайте над каждой игрой индивидуально. Передайте каждому отдельному игровому классу в сторону игры JPanel, чтобы провести игру. Дайте каждому игровому классу основной метод тестирования, который создаст JFrame, создаст экземпляр игрового класса, поместит JPanel экземпляра в JFrame, инициализирует игру и покажет ее.
  • Как только игра работает сама по себе, попробуйте добавить ее в свой большой графический интерфейс, который может отображать несколько игр.
  • Учитывайте, что каждый класс игры реализует общий интерфейс для общей функциональности. Например, вы можете дать интерфейсу метод initialize(), который будет отменять каждый класс игры.
  • Каждый класс игры должен быть основан на MVC, так что у него есть модель, класс управления (ов) для взаимодействия с моделью и класс представления, который отображает состояние модели на JPanel, как указано выше.
+1

+1 Отличный совет по дизайну; ['MainPanel'] (http://stackoverflow.com/a/3072979/230513) - пример третьей. Вы можете использовать любое количество экземпляров для прототипирования вашего большего графического интерфейса. – trashgod

+0

@trashgod: спасибо. Вот моя ссылка для примера MVC: [MVC_ProgressBarThread] (http://stackoverflow.com/questions/5533497/mvc-progress-bar-threading/5533581#5533581) –

+0

Хорошо [пример] (http://stackoverflow.com/вопросы/5533497/MVC-прогресс-бар резьбонарезной/5533581 # 5533581); Я привел это [здесь] (http://stackoverflow.com/a/3072979/230513) как способ реализации шаблона наблюдателя. Не стесняйтесь что-либо редактировать, поскольку возникает необходимость. – trashgod

Смежные вопросы