След: Создание GUI С JFC/Swing
Урок: Используя Компоненты Swing
Раздел: Как Использовать Различные Компоненты
Как Сделать Фреймы (Главные окна)
Домашняя страница > Создание GUI С JFC/Swing > Используя Компоненты Swing

Как Сделать Фреймы (Главные окна)

Фрейм является высокоуровневым окном с title и границей. Размер фрейма включает любую область, определяемую для границы. Размерности пограничной области могут быть получены, используя getInsets метод. Так как пограничная область включается в полный размер фрейма, граница эффективно затеняет часть фрейма, ограничивая область, доступную для рендеринга и/или отображения субкомпонентов к прямоугольнику, у которого есть верхнее левое угловое расположение (insets.left, insets.top), и имеет размер width - (insets.left + insets.right) height - (insets.top + insets.bottom).

Фрейм, реализованный как экземпляр JFrame class, окно, которое имеет художественные оформления, такие как граница, title, и поддерживает компоненты кнопки, которые закрывают или представляют окно в виде значка. Приложения с GUI обычно включают по крайней мере один фрейм. Апплеты иногда используют фреймы, также.

Чтобы сделать окно, которое зависит от другого окна — исчезновение, когда другое окно представляется в виде значка, например — используют a dialog вместо frame.. Чтобы сделать окно, которое появляется в пределах другого окна, используйте внутреннюю рамку.

Создание и Показ Фреймов

Вот изображение чрезвычайно простого окна, создаваемого FrameDemo демонстрационное приложение. Можно найти исходный код в FrameDemo.java. Можно работать, FrameDemo (загрузите JDK 6 или позже).

Очень скучный фрейм

Следующий FrameDemo кодируйте шоу, как создать и установить фрейм.


//1. Create the frame.
JFrame frame = new JFrame("FrameDemo");

//2. Optional: What happens when the frame closes?
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//3. Create components and put them in the frame.
//...create emptyLabel...
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

//4. Size the frame.
frame.pack();

//5. Show it.
frame.setVisible(true);

Вот некоторые детали о коде:

  1. Первая строка кода создает фрейм, используя конструктора, который позволяет Вам устанавливать фрейм title. Другой часто используемый JFrame конструктор является конструктором без параметров.
  2. Затем код определяет то, что происходит, когда Ваш пользователь закрывает фрейм. EXIT_ON_CLOSE работа выходит из программы, когда Ваш пользователь закрывает фрейм. Это поведение является подходящим для этой программы, потому что у программы есть только один фрейм, и закрытие фрейма делает программу бесполезной.

    См. Отвечающие Закрывающие окно События для получения дополнительной информации.

  3. Следующий бит кода добавляет пустую метку к области контента фрейма. Если Вы не уже знакомы с областями контента и как добавить компоненты к ним, пожалуйста, считайте Добавляющие Компоненты в Область Контента.

    Для фреймов, у которых есть меню, Вы обычно добавляли бы строку меню к фрейму, здесь используя setJMenuBar метод. См., Как Использовать Меню для деталей.

  4. pack метод измеряет фрейм так, чтобы все его содержание было в или выше их привилегированных размеров. Альтернатива pack должен установить тип телосложения явно, вызывая setSize или setBounds (который также устанавливает расположение фрейма). Вообще, использование pack предпочтительно для вызова setSize, с тех пор pack листы, которые менеджер по расположению фрейма, отвечающий за тип телосложения, и менеджеров по расположению, способен корректировать к зависимостям от платформы и другим факторам, которые влияют на компонентный размер.

    Этот пример не устанавливает расположение фрейма, но легко сделать так использование любого setLocationRelativeTo или setLocation метод. Например, следующий код центрирует экранный фрейм:

    frame.setLocationRelativeTo(null);
    
  5. Вызов setVisible(true) заставляет фрейм казаться экранным. Иногда Вы могли бы видеть show метод, используемый вместо этого. Эти два использования эквивалентны, но мы используем setVisible(true) для пользы непротиворечивости.

Определение Художественных оформлений Окна

По умолчанию художественные оформления окна предоставляются собственной оконной системой. Однако, можно запросить, чтобы стиль обеспечил художественные оформления для фрейма. Можно также определить, что у фрейма нет никаких художественных оформлений окна вообще, функция, которая может быть использована самостоятельно, или обеспечить Ваши собственные художественные оформления, или с полноэкранным монопольным режимом.

Помимо определения, кто обеспечивает художественные оформления окна, можно также определить, какой значок используется, чтобы представить окно. Точно то, как этот значок используется, зависит от оконной системы или стили, который обеспечивает художественные оформления окна. Если оконная система поддерживает минимизацию, то значок используется, чтобы представить минимизированное окно. Большинство оконных систем или взгляда и чувств также выводят на экран значок в художественных оформлениях окна. Типичный размер значка 16x16, пиксели, но некоторые оконные системы используют другие размеры.

Следующие снимки показывают три фрейма, которые идентичны за исключением их художественных оформлений окна. Как можно сказать появлением кнопки в каждом фрейме, все три используют стиль Java. Первые художественные оформления использования, обеспеченные оконной системой, которые, оказывается, Microsoft Windows, но могли как легко быть любой другой системой, выполняющей платформу Java. Вторые и третьи художественные оформления окна использования обеспечили стилем Java. Третий фрейм использует художественные оформления окна стили Java, но имеет пользовательский значок.

Фрейм с художественными оформлениями, обеспеченными оконной системой Фрейм с художественными оформлениями, обеспеченными стилем Фрейм с пользовательским значком
Художественные оформления окна обеспечили стилем Художественные оформления окна обеспечили оконной системой Пользовательский значок; художественные оформления окна обеспечили стилем

Вот пример создания фрейма с пользовательским значком и с художественными оформлениями окна, обеспеченными стилем:

//Ask for window decorations provided by the look and feel.
JFrame.setDefaultLookAndFeelDecorated(true);

//Create the frame.
JFrame frame = new JFrame("A window");

//Set the frame icon to an image loaded from a file.
frame.setIconImage(new ImageIcon(imgURL).getImage());

Поскольку предыдущий фрагмент кода подразумевает, следует вызвать setDefaultLookAndFeelDecorated метод прежде, чем создать фрейм, на художественные оформления которого Вы хотите влиять. Значение Вы устанавливаете с setDefaultLookAndFeelDecorated используется для всех впоследствии создаваемых JFrames. Можно переключиться назад на использование художественных оформлений оконной системы, вызывая JFrame.setDefaultLookAndFeelDecorated(false). Некоторый взгляд и чувства не могли бы поддерживать художественные оформления окна; в этом случае художественные оформления оконной системы используются.

Полный исходный код для приложения, которое создает фреймы, изображенные выше, находится в FrameDemo2.java. Помимо показа, как выбрать художественные оформления окна, FrameDemo2 также показывает, как отключить все художественные оформления окна и дает пример расположения окон. Это включает два метода, которые создают Image объекты, используемые в качестве значков — каждый загружается из файла, и другой красится с нуля.


Попробуйте это:: 
  1. Нажмите кнопку Launch, чтобы работать, Демонстрационный пример Фрейма, использующий Сеть Java™, Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.Запускает пример FrameDemo2

  2. Переведите в рабочее состояние два окна, обоих со стилем, обеспеченным художественные оформления, но с различными значками.
    Стиль Java выводит на экран значки в своих художественных оформлениях окна. В зависимости от Вашей оконной системы значок может использоваться в другом месте, чтобы представить окно, особенно когда окно минимизируется.
  3. Переведите одно или более окон в рабочее состояние с художественными оформлениями оконной системы.
    См., обрабатывает ли Ваша оконная система эти значки по-другому.
  4. Переведите одно или более окон в рабочее состояние без художественных оформлений окна.
    Игра с различными типами окон, чтобы видеть, как художественные оформления окна, оконная система, и значки фрейма взаимодействуют.

Отвечание на Закрывающие окно События

По умолчанию, когда пользователь закрывает экранный фрейм, фрейм скрывается. Хотя невидимый, фрейм все еще существует, и программа может сделать его видимым снова. Если Вы хотите различное поведение, то Вы должны или зарегистрировать слушателя окна, который обрабатывает закрывающие окно события, или Вы должны определить значение по умолчанию близкое поведение, используя setDefaultCloseOperation метод. Можно даже сделать обоих.

Параметр setDefaultCloseOperation должно быть одно из следующих значений, первые три из которых определяются в WindowConstants интерфейс (реализованный JFrame, JInternalPane, и JDialog):

DO_NOTHING_ON_CLOSE
Ничего не делайте, когда пользователь запрашивает, чтобы окно закрылось. Вместо этого программа должна, вероятно, использовать слушателя окна, который выполняет некоторое другое действие в windowClosing метод.
HIDE_ON_CLOSE (значение по умолчанию для JDialog и JFrame)
Скройте окно, когда пользователь закрывает его. Это удаляет окно из экрана, но листов это визуализуемый.
DISPOSE_ON_CLOSE (значение по умолчанию для JInternalFrame)
Скройтесь и избавьтесь от окна, когда пользователь закрывает его. Это удаляет окно из экрана и освобождает любые ресурсы, используемые этим.
EXIT_ON_CLOSE (определенный в JFrame class)
Выйдите из приложения, используя System.exit(0). Это рекомендуется для приложений только. Если использующийся в пределах апплета, a SecurityException может быть брошен.


Отметьте: 

DISPOSE_ON_CLOSE может иметь результаты, подобные EXIT_ON_CLOSE если только одно окно является экранным. Более точно, когда от последнего визуализуемого окна в пределах виртуальной машины Java (VM) избавляются, VM может завершиться. См., что AWT Распараллеливает Проблемы для деталей.


Операция закрытия значения по умолчанию выполняется после того, как любые слушатели окна обрабатывают закрывающее окно событие. Так, например, предположите, что Вы определяете, что операция закрытия значения по умолчанию должна избавиться от фрейма. Вы также реализуете слушателя окна, который тестирует, является ли фрейм последним видимым и, если так, сохраняет некоторые данные и выходит из приложения. При этих условиях, когда пользователь закрывает фрейм, слушателя окна вызовут сначала. Если это не выйдет из приложения, то операция закрытия значения по умолчанию — избавление от фрейма — будет тогда выполняться.

Для получения дополнительной информации об обработке закрывающих окно событий, см., Как Записать Слушателям Окна. Помимо обработки закрывающих окно событий, слушатели окна могут также реагировать на другие изменения статуса окна, такие как iconification и активация.

API Фрейма

Следующие таблицы приводят обычно используемый JFrame конструкторы и методы. Другие методы, которые Вы могли бы хотеть вызвать, определяются java.awt.Frame, java.awt.Window, и java.awt.Component классы те, от который JFrame убывает.

Поскольку каждый JFrame у объекта есть корневая область, у фреймов есть поддержка того, чтобы вставить ввод и нарисовать поведение перед дочерними элементами фрейма, размещая дочерние элементы в различные "уровни", и для строк меню Swing. Эти темы представляются в Использовании Высокоуровневых Контейнеров и объясняются подробно в том, Как Использовать Корневые Области.

API для того, чтобы использовать фреймы попадает в эти категории:

Создание и Установка Фрейма
Метод или Конструктор Цель
JFrame ()
JFrame (Строка)
Создайте фрейм, который первоначально невидим. String параметр обеспечивает title для фрейма. Чтобы сделать фрейм видимым, вызвать setVisible(true) на этом.
освободите setDefaultCloseOperation (интервал)
интервал getDefaultCloseOperation ()
Набор или получает работу, которая происходит, когда пользователь нажимает близкую кнопку на этом фрейме. Возможные варианты:
  • DO_NOTHING_ON_CLOSE
  • HIDE_ON_CLOSE
  • DISPOSE_ON_CLOSE
  • EXIT_ON_CLOSE
Первые три константы определяются в WindowConstants интерфейс, который JFrame реализации. EXIT_ON_CLOSE постоянный определяется в JFrame class.
освободите setIconImage (Изображение)
Отобразите getIconImage ()
Frame)
Набор или получает значок, который представляет фрейм. Отметьте, что параметром является java.awt. Объект изображения, не a javax.swing.ImageIcon (или любой другой javax.swing.Icon реализация).
освободите setTitle (Строка)
Представьте getTitle в виде строки ()
Frame)
Набор или получает фрейм title.
освободите (булев) setUndecorated
булев isUndecorated ()
Frame)
Набор или добирается, должен ли этот фрейм быть украшен. Работы, только если фрейм еще не является визуализуемым (не был упакован или показан). Обычно используемый с полноэкранным монопольным режимом или включать пользовательским художественным оформлениям окна.
статическая пустота setDefaultLookAndFeelDecorated (булев)
статический булев isDefaultLookAndFeelDecorated ()
Определите ли впоследствии создаваемый JFrameу s должны быть их художественные оформления Окна (такие как границы, и виджеты для того, чтобы закрыть окно) обеспеченный текущим стилем. Отметьте, что это - только подсказка, поскольку некоторый взгляд и чувства, возможно, не поддерживают эту функцию.
Установка Размера окна и Расположения
Метод Цель
освободите пакет ()
Window)
Измерьте окно так, чтобы все его содержание было в или выше их привилегированных размеров.
освободите setSize (интервал, интервал)
освободите setSize (Размерность)
Размерность getSize ()
Component)
Набор или получает полный размер окна. Целочисленные параметры setSize определите width и height, соответственно.
освободите setBounds (интервал, интервал, интервал, интервал)
освободите setBounds (Прямоугольник)
Прямоугольник getBounds ()
Component)
Набор или получает размер и позицию окна. Для целочисленной версии setBounds, левый верхний угол окна в x, y расположение, определенное первыми двумя параметрами, и имеет width и height, определенный последними двумя параметрами.
освободите setLocation (интервал, интервал)
Укажите на getLocation ()
Component)
Набор или получает расположение левого верхнего угла окна. Параметры являются x и значениями y, соответственно.
освободите setLocationRelativeTo (Компонент)
Window)
Расположите окно так, чтобы оно центрировалось по указанному компоненту. Если параметр null, окно центрируется экранное. Чтобы должным образом центрировать окно, следует вызвать этот метод после того, как размер окна был установлен.
Методы, Связанные с Корневой Областью
Метод Цель
освободите setContentPane (Контейнер)
Контейнер getContentPane ()
Набор или получает область контента фрейма. Область контента содержит видимые компоненты GUI в пределах фрейма.
JRootPane createRootPane ()
освободите setRootPane (JRootPane)
JRootPane getRootPane ()
Создайте, установите, или получите корневую область фрейма. Корневая область управляет внутренней частью фрейма включая область контента, стеклянную область, и так далее.
освободите setJMenuBar (JMenuBar)
JMenuBar getJMenuBar ()
Набор или заставляет строку меню фрейма управлять рядом меню для фрейма.
освободите setGlassPane (Компонент)
Компонент getGlassPane ()
Набор или получает область стекла фрейма. Можно использовать стеклянную область, чтобы прервать события от нажатия мыши или краску сверху Вашего GUI программы.
освободите setLayeredPane (JLayeredPane)
JLayeredPane getLayeredPane ()
Набор или получает фрейм многоуровневая область. Можно использовать фрейм многоуровневая область, чтобы поместить компоненты сверху или позади других компонентов.

Примеры то Использование Фреймы

Все автономные приложения в этом использовании следа JFrame. Следующая таблица приводит некоторых и говорит Вам, где каждый обсуждается.

Пример Где Описано Примечания
FrameDemo Объясненный Пример Выводит на экран основной фрейм с одним компонентом.
FrameDemo2 Определение Художественных оформлений Окна Позволяет Вам создавать фреймы с различными художественными оформлениями окна.
Framework Исследование в создании и уничтожении окон, в реализации строки меню, и в выходе из приложения.
LayeredPaneDemo Как Использовать Многоуровневые Области Иллюстрирует, как использовать многоуровневую область (но не фрейм многоуровневая область).
GlassPaneDemo Стеклянная Область Иллюстрирует использование области стекла фрейма.
MenuDemo Как Использовать Меню Шоу, как поместить a JMenuBar в a JFrame.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать Отформатированные Текстовые поля
Следующая страница: Как Использовать Внутренние рамки