Фрейм является высокоуровневым окном с 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
кодируйте шоу, как создать и установить фрейм.
//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);
Вот некоторые детали о коде:
JFrame
конструктор является конструктором без параметров.EXIT_ON_CLOSE
работа выходит из программы, когда Ваш пользователь закрывает фрейм. Это поведение является подходящим для этой программы, потому что у программы есть только один фрейм, и закрытие фрейма делает программу бесполезной. См. Отвечающие Закрывающие окно События для получения дополнительной информации.
Для фреймов, у которых есть меню, Вы обычно добавляли бы строку меню к фрейму, здесь используя setJMenuBar
метод. См., Как Использовать Меню для деталей.
pack
метод измеряет фрейм так, чтобы все его содержание было в или выше их привилегированных размеров. Альтернатива pack
должен установить тип телосложения явно, вызывая setSize
или setBounds
(который также устанавливает расположение фрейма). Вообще, использование pack
предпочтительно для вызова setSize
, с тех пор pack
листы, которые менеджер по расположению фрейма, отвечающий за тип телосложения, и менеджеров по расположению, способен корректировать к зависимостям от платформы и другим факторам, которые влияют на компонентный размер. Этот пример не устанавливает расположение фрейма, но легко сделать так использование любого setLocationRelativeTo
или setLocation
метод. Например, следующий код центрирует экранный фрейм:
frame.setLocationRelativeTo(null);
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
используется для всех впоследствии создаваемых JFrame
s. Можно переключиться назад на использование художественных оформлений оконной системы, вызывая JFrame.setDefaultLookAndFeelDecorated(false)
. Некоторый взгляд и чувства не могли бы поддерживать художественные оформления окна; в этом случае художественные оформления оконной системы используются.
Полный исходный код для приложения, которое создает фреймы, изображенные выше, находится в FrameDemo2.java
. Помимо показа, как выбрать художественные оформления окна, FrameDemo2 также показывает, как отключить все художественные оформления окна и дает пример расположения окон. Это включает два метода, которые создают Image
объекты, используемые в качестве значков — каждый загружается из файла, и другой красится с нуля.
По умолчанию, когда пользователь закрывает экранный фрейм, фрейм скрывается. Хотя невидимый, фрейм все еще существует, и программа может сделать его видимым снова. Если Вы хотите различное поведение, то Вы должны или зарегистрировать слушателя окна, который обрабатывает закрывающие окно события, или Вы должны определить значение по умолчанию близкое поведение, используя setDefaultCloseOperation
метод. Можно даже сделать обоих.
Параметр setDefaultCloseOperation
должно быть одно из следующих значений, первые три из которых определяются в WindowConstants
JFrame
, JInternalPane
, и JDialog
):
DO_NOTHING_ON_CLOSE
windowClosing
метод.HIDE_ON_CLOSE
(значение по умолчанию для JDialog
и JFrame
)DISPOSE_ON_CLOSE
(значение по умолчанию для JInternalFrame
)EXIT_ON_CLOSE
(определенный в JFrame
System.exit(0)
. Это рекомендуется для приложений только. Если использующийся в пределах апплета, a SecurityException
может быть брошен.DISPOSE_ON_CLOSE
может иметь результаты, подобные EXIT_ON_CLOSE
если только одно окно является экранным. Более точно, когда от последнего визуализуемого окна в пределах виртуальной машины Java (VM) избавляются, VM может завершиться. См.
Операция закрытия значения по умолчанию выполняется после того, как любые слушатели окна обрабатывают закрывающее окно событие. Так, например, предположите, что Вы определяете, что операция закрытия значения по умолчанию должна избавиться от фрейма. Вы также реализуете слушателя окна, который тестирует, является ли фрейм последним видимым и, если так, сохраняет некоторые данные и выходит из приложения. При этих условиях, когда пользователь закрывает фрейм, слушателя окна вызовут сначала. Если это не выйдет из приложения, то операция закрытия значения по умолчанию — избавление от фрейма — будет тогда выполняться.
Для получения дополнительной информации об обработке закрывающих окно событий, см.
Следующие таблицы приводят обычно используемый JFrame
конструкторы и методы. Другие методы, которые Вы могли бы хотеть вызвать, определяются java.awt.Frame
, java.awt.Window
java.awt.Component
JFrame
убывает.
Поскольку каждый JFrame
у объекта есть корневая область, у фреймов есть поддержка того, чтобы вставить ввод и нарисовать поведение перед дочерними элементами фрейма, размещая дочерние элементы в различные "уровни", и для строк меню Swing. Эти темы представляются в Использовании Высокоуровневых Контейнеров и объясняются подробно в том, Как Использовать Корневые Области.
API для того, чтобы использовать фреймы попадает в эти категории:
Метод или Конструктор | Цель |
---|---|
|
Создайте фрейм, который первоначально невидим. String параметр обеспечивает title для фрейма. Чтобы сделать фрейм видимым, вызвать setVisible(true) на этом. |
|
Набор или получает работу, которая происходит, когда пользователь нажимает близкую кнопку на этом фрейме. Возможные варианты:
WindowConstants JFrame реализации. EXIT_ON_CLOSE постоянный определяется в JFrame |
(в Frame ) |
Набор или получает значок, который представляет фрейм. Отметьте, что параметром является javax.swing.ImageIcon (или любой другой javax.swing.Icon реализация). |
(в Frame ) |
Набор или получает фрейм title. |
(в Frame ) |
Набор или добирается, должен ли этот фрейм быть украшен. Работы, только если фрейм еще не является визуализуемым (не был упакован или показан). Обычно используемый с |
статическая пустота setDefaultLookAndFeelDecorated (булев) |
Определите ли впоследствии создаваемый JFrame у s должны быть их художественные оформления Окна (такие как границы, и виджеты для того, чтобы закрыть окно) обеспеченный текущим стилем. Отметьте, что это - только подсказка, поскольку некоторый взгляд и чувства, возможно, не поддерживают эту функцию. |
Метод | Цель |
---|---|
(в Window ) |
Измерьте окно так, чтобы все его содержание было в или выше их привилегированных размеров. |
(в Component ) |
Набор или получает полный размер окна. Целочисленные параметры setSize определите width и height, соответственно. |
(в Component ) |
Набор или получает размер и позицию окна. Для целочисленной версии setBounds , левый верхний угол окна в x, y расположение, определенное первыми двумя параметрами, и имеет width и height, определенный последними двумя параметрами. |
(в Component ) |
Набор или получает расположение левого верхнего угла окна. Параметры являются x и значениями y, соответственно. |
(в Window ) |
Расположите окно так, чтобы оно центрировалось по указанному компоненту. Если параметр null , окно центрируется экранное. Чтобы должным образом центрировать окно, следует вызвать этот метод после того, как размер окна был установлен. |
Метод | Цель |
---|---|
|
Набор или получает область контента фрейма. Область контента содержит видимые компоненты GUI в пределах фрейма. |
|
Создайте, установите, или получите корневую область фрейма. Корневая область управляет внутренней частью фрейма включая область контента, стеклянную область, и так далее. |
|
Набор или заставляет строку меню фрейма управлять рядом меню для фрейма. |
|
Набор или получает область стекла фрейма. Можно использовать стеклянную область, чтобы прервать события от нажатия мыши или краску сверху Вашего GUI программы. |
|
Набор или получает фрейм многоуровневая область. Можно использовать фрейм многоуровневая область, чтобы поместить компоненты сверху или позади других компонентов. |
Все автономные приложения в этом использовании следа JFrame
. Следующая таблица приводит некоторых и говорит Вам, где каждый обсуждается.
Пример | Где Описано | Примечания |
---|---|---|
FrameDemo |
Объясненный Пример | Выводит на экран основной фрейм с одним компонентом. |
FrameDemo2 |
Определение Художественных оформлений Окна | Позволяет Вам создавать фреймы с различными художественными оформлениями окна. |
Framework |
— | Исследование в создании и уничтожении окон, в реализации строки меню, и в выходе из приложения. |
LayeredPaneDemo |
Как Использовать Многоуровневые Области | Иллюстрирует, как использовать многоуровневую область (но не фрейм многоуровневая область). |
GlassPaneDemo |
Стеклянная Область | Иллюстрирует использование области стекла фрейма. |
MenuDemo |
Как Использовать Меню | Шоу, как поместить a JMenuBar в a JFrame . |