2013-07-15 1 views
3

Я всегда задавался вопросом, как я могу сделать программу с несколькими JFrames. Я имею в виду, что я просто хочу, чтобы один класс обрабатывал все графические интерфейсы и прочее, но как я могу эффективно это сделать? Многие учебники говорят, что мы создаем JFrame, наследуя JFrame. Но что, если я хочу много кадров?Создание нескольких кадров в одной программе

Ex: Название Применение в одном кадре с некоторыми вариантами меню является один кадр Основное работает приложение один кадр Как и в игре.

Но я не уверен, что я отношусь к JPanel? Я полностью озадачен 2. Я просто хочу одну движущуюся рамку, но в основном меняется содержимое кадра. Когда я нажимаю кнопку «СТАРТ», он изменится на стиль игры в кадре.

+2

См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/a/9554657/418556) –

+0

* «В большинстве учебных пособий мы говорим, что мы сделайте JFrame наследующим от JFrame. Но что, если я хочу много кадров? »* Не расширяйте кадры или другие контейнеры верхнего уровня. Вместо этого создайте & используйте экземпляр одного. Я боюсь, что вы нашли неправильные учебники. Я рекомендую [Java Tutorial: Создание графического интерфейса с JFC/Swing] (http://docs.oracle.com/javase/tutorial/uiswing/). –

+0

@AndrewThompson благодарит за первую ссылку. Действительно полезно! О расширении от JFrame, я знаю, что в некоторых случаях я должен просто создавать экземпляры JFrame, отдельные кадры получают отдельные экземпляры; но я почему-то думаю, что есть лучший способ, чем делать это – krato

ответ

9

Вы ищете JFrame с CardLayout. Некоторый фон:

A JFrame - физическое окно. Он поставляется с заголовком и тремя кнопками: сворачивает, максимизирует и закрывает. Подумайте об этом как о кадре.

A JPanel является «владельцем контента». Как правило, вы помещаете свои другие компоненты (кнопки, анимации, что угодно) на JPanel, а затем удаляете JPanel в JFrame. Используя наш пример с рамкой, JPanel будет фотобумагой, которую вы положили в рамку с картинками. Другими компонентами тогда будет фактическое содержимое самого изображения, а то, что у вас есть в конце, - это приятное изображение ... или в вашем случае приложение.

Установка JFrame для использования CardLayout по существу позволяет вам иметь несколько JPanels внутри одного и того же JFrame одновременно, пока отображается только по одному. Итак, для вашего приложения у вас будет (по крайней мере) два JPanels: один для меню и один для игры. Когда приложение запускается, вы показываете MenuPanel. Когда пользователь нажимает «начать», вы переключаетесь на GamePanel. MenuPanel будет помещен в фоновом режиме и будет недоступен, пока вы снова не вызовете его на передний план.

Если, с другой стороны, вы создаете несколько JFrames, у вас будет два или более физически отдельных окна, которые можно обрабатывать индивидуально.На самом деле это может быть классно для разработки игр. Хотя для создания и привязки графического интерфейса для второго окна требуется больше времени, вы можете использовать это окно в настройках игры в реальном времени (скорость стрельбы, сила пули, скорость игрока и т. Д.)

1

Я думаю, что вы после этого является Card Layout:

CardLayout объект является менеджер компоновки для контейнера. Он обрабатывает каждый компонент в контейнере в качестве карты. Только одна карта видна на времени, и контейнер действует как стопка карт. Первый компонент , добавленный в объект CardLayout, является видимым компонентом, когда сначала отображается контейнер.

Вы можете увидеть, как он используется here.

Этот менеджер компоновки позволяет вам управлять ситуациями, когда ваш фрейм необходимо обмениваться различными функциями. Например, в вашем случае у вас может быть функциональность для обработки настроек , а другая - для самой игры .

Затем вы можете использовать диспетчер для переключения между этими конкретными элементами.

0

вы также можете использовать Desktopane() и InternalFrame() для нескольких кадров. Внутренний кадр очень похож на Jframe, но ему нужно установитьVisible (true) или show() каждый раз.

0

Какая бы IDE вы используете, вы можете создать несколько JFrames в одном пакете и иметь отдельные коды для каждого из них.

Если вы хотите связать каждый фрейм, вам придется создавать экземпляры из каждого JFrame. например, если при нажатии на кнопку, мы должны вызвать новый кадр (который мы уже создали)

NewJFrame1 frame1=new NewJFrame1(); 

frame1.setVisible(true); 

, то вы можете решить, что с вашей текущей JFrame. например: (Скрыть, закрыть)

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

  • Нет связанных вопросов^_^