С JInternalFrame
class можно вывести на экран a JFrame
- как окно в пределах другого окна. Обычно, Вы добавляете внутренние рамки к настольной области. Настольная область, поочередно, могла бы использоваться в качестве области контента a JFrame
. Настольная область является экземпляром JDesktopPane
JLayeredPane
это добавило API для того, чтобы управлять многократными внутренними рамками наложения.
Следует рассмотреть тщательно, базировать ли GUI Вашей программы вокруг фреймов или внутренних рамок. Переключение от внутренних рамок до фреймов или наоборот является не обязательно простой задачей. Экспериментируя и с фреймами и с внутренними рамками, можно понять компромиссы, включенные в выбор того по другому.
Вот изображение приложения, у которого есть две внутренних рамки (один из которых представляется в виде значка) в регулярном фрейме:
MyInternalFrame
class, который является пользовательским подклассом JInternalFrame
.Следующий код, взятый от InternalFrameDemo.java
, создает рабочий стол и внутренние рамки в предыдущем примере.
...//In the constructor of InternalFrameDemo, a JFrame subclass: desktop = new JDesktopPane(); createFrame(); //Create first window setContentPane(desktop); ... //Make dragging a little faster but perhaps uglier. desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); ... protected void createFrame() { MyInternalFrame frame = new MyInternalFrame(); frame.setVisible(true); desktop.add(frame); try { frame.setSelected(true); } catch (java.beans.PropertyVetoException e) {} } ...//In the constructor of MyInternalFrame, a JInternalFrame subclass: static int openFrameCount = 0; static final int xOffset = 30, yOffset = 30; public MyInternalFrame() { super("Document #" + (++openFrameCount), true, //resizable true, //closable true, //maximizable true);//iconifiable //...Create the GUI and put it in the window... //...Then set the window size or call pack... ... //Set the window's location. setLocation(xOffset*openFrameCount, yOffset*openFrameCount); }
Код для того, чтобы использовать внутренние рамки подобен разными способами коду для того, чтобы использовать регулярные фреймы Swing. Поскольку у внутренних рамок есть корневые области, устанавливая GUI для a JInternalFrame
очень подобно установке GUI для a JFrame
. JInternalFrame
также обеспечивает другой API, такой как pack
, это делает это подобным JFrame
.
Так же, как для регулярного фрейма, следует вызвать setVisible(true)
или show()
на внутренней рамке, чтобы вывести на экран это. Внутренняя рамка не появляется, пока Вы явно не делаете ее видимой.
Внутренние рамки не являются окнами или высокоуровневыми контейнерами, однако, который делает их отличающимися от фреймов. Например, следует добавить внутреннюю рамку к контейнеру (обычно a JDesktopPane
); внутренняя рамка не может быть корнем иерархии включения. Кроме того, внутренние рамки не генерируют события окна. Вместо этого пользовательские действия, которые заставили бы фрейм запускать события окна, заставляют внутреннюю рамку запускать события внутренней рамки.
Поскольку внутренние рамки реализуются с независимым от платформы кодом, они добавляют некоторые опции, которые фреймы не могут дать Вам. Одна такая функция - то, что внутренние рамки дают Вам больше контроля своим состоянием и возможностями, чем фреймы. Вы можете programatically представлять в виде значка или максимизировать внутреннюю рамку. Можно также определить, какой значок входит в панель title внутренней рамки. Можно даже определить, есть ли у внутренней рамки художественные оформления окна, чтобы поддерживать изменение размеров, представление в виде значка, закрытие, и максимизацию.
Другая функция - то, что внутренние рамки разрабатываются, чтобы работать в пределах настольных областей. JInternalFrame
API содержит методы такой как moveToFront
та работа, только если контейнер внутренней рамки является многоуровневой областью, такой как a JDesktopPane
.
Если Вы создали какое-либо использование программ JFrame
и другие компоненты Swing, тогда Вы уже знаете много о том, как использовать внутренние рамки. Следующий список суммирует правила для того, чтобы использовать внутренние рамки. Для дополнительной информации см., Как Сделать Фреймы и Класс JComponent.
setSize
, pack
, или setBounds
.setLocation
или setBounds
метод, чтобы определить верхнюю левую точку внутренней рамки, относительно ее контейнера.JFrame
ситуация. См. Добавляющие Компоненты к Области Контента для деталей.JOptionPane
или JInternalFrame
, нет JDialog
.JOptionPane
showInternalXxxDialog
методы, как описано в том, Как Сделать Диалоговые окна.JDesktopPane
), внутренняя рамка не будет появляться.show
или setVisible
на внутренних рамках.setVisible(true)
или show()
сделать их видимыми.Когда у рабочего стола есть много внутренних рамок, пользователь мог бы заметить, что перемещение их кажется медленным. Перетаскивание схемы является одним способом избежать этой проблемы. С перетаскиванием схемы только схема внутренней рамки красится в текущей позиции мыши в то время как то, что внутренняя рамка была перетащенной. Внутренности внутренней рамки не перекрашиваются в новой позиции до перетаскивания остановок. Поведение значения по умолчанию (названный живым перетаскиванием) к репозиции, и перекрасьте некоторых или всю внутреннюю рамку непрерывно, в то время как это перемещается; это может быть медленным, если у рабочего стола есть много внутренних рамок.
Используйте JDesktopPane
метод setDragMode
*, чтобы определить перетаскивание схемы. Например:
desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
Следующие таблицы приводят обычно используемый JInternalFrame
конструкторы и методы, так же как несколько методов это JDesktopPane
обеспечивает. Помимо API, перечисленного в этом разделе, JInternalFrame
наследовал полезный API от его суперклассов, JComponent
, Component
, и Container
. См. Класс JComponent для списков методов от тех классов.
Как JInternalFrame
, JDesktopPane
убывает от JComponent
, и таким образом обеспечивает методы, описанные в Классе JComponent. Поскольку JDesktopPane
расширяется JLayeredPane
, это также поддерживает методы, описанные в Многоуровневом API Области.
API для того, чтобы использовать внутренние рамки попадает в эти категории:
Конструктор или Метод | Цель |
---|---|
JInternalFrame () |
Создайте a JInternalFrame экземпляр. Первый параметр определяет title (если любой), чтобы быть выведенным на экран внутренней рамкой. Остальная часть параметров определяет, должна ли внутренняя рамка содержать художественные оформления, разрешающие пользователю изменять размеры, закрывать, максимизировать, и представлять внутреннюю рамку в виде значка (определенный в том порядке). Значение по умолчанию для каждого булева параметра false , что означает, что работа не позволяется. |
|
Создайте a JInternalFrame это моделирует диалоговое окно. См., Как Сделать Диалоговые окна для деталей. |
Метод | Цель |
---|---|
|
Набор или получает область контента внутренней рамки, которая обычно содержит весь GUI внутренней рамки, за исключением художественных оформлений окна и строки меню. |
|
Набор или получает строку меню внутренней рамки. |
|
Набор или получает многоуровневую область внутренней рамки. |
Метод | Цель |
---|---|
|
Сделайте внутреннюю рамку видимой (если true ) или невидимый (если false ). Следует вызвать setVisible(true) на каждом JInternalFrame прежде, чем добавить это к его контейнеру. (Наследованный от Component ). |
|
Измерьте внутреннюю рамку так, чтобы ее компоненты были в их привилегированных размерах. |
|
Установите позицию внутренней рамки. (Наследованный от Component ). |
|
Явно установите размер и расположение внутренней рамки. (Наследованный от Component ). |
|
Явно установите размер внутренней рамки. (Наследованный от Component ). |
Метод | Цель |
---|---|
|
Набор или получает то, что делает внутренняя рамка, когда пользователь пытается "закрыть" внутреннюю рамку. Значение по умолчанию DISPOSE_ON_CLOSE . Другие возможные значения DO_NOTHING_ON_CLOSE и HIDE_ON_CLOSE См. Отвечающие Закрывающие окно События для деталей. |
|
Добавьте или удалите слушателя внутренней рамки (JInternalFrame 's эквивалентный из слушателя окна). См., Как Записать Слушателю Внутренней рамки для получения дополнительной информации. |
|
Если родитель внутренней рамки является многоуровневой областью, такой как настольная область, перемещает внутреннюю рамку в переднюю сторону или назад (соответственно) ее уровня. |
|
Набор или добирается, закрывается ли внутренняя рамка в настоящий момент. Параметр setClosed должен быть true . Вновь открывая закрытую внутреннюю рамку, Вы делаете это видимым и добавляете это к контейнеру (обычно настольная область, Вы первоначально добавили это к). |
|
Представьте в виде значка или deiconify внутренняя рамка, или определите, представляется ли это в настоящий момент в виде значка. |
|
Максимизируйте или восстановите внутреннюю рамку, или определите, максимизируется ли она. |
|
Набор или добирается, является ли внутренняя рамка в настоящий момент "выбранной" (активированной) внутренней рамкой. |
Метод | Цель |
---|---|
|
Набор или вывел на экран значок в панели title внутренней рамки (обычно в верхнем левом углу). |
|
Набор или добирается, может ли пользователь закрыть внутреннюю рамку. |
|
Набор или добирается, может ли внутренняя рамка быть представлена в виде значка. |
|
Набор или добирается, может ли пользователь максимизировать эту внутреннюю рамку. |
|
Набор или добирается, может ли внутренняя рамка быть изменена. |
|
Набор или получает окно title. |
Конструктор или Метод | Цель |
---|---|
|
Создает новый экземпляр JDesktopPane . |
|
Возвраты все JInternalFrame объекты, которые содержит рабочий стол. |
|
Возвраты все JInternalFrame объекты, которые содержит рабочий стол, которые находятся в указанном уровне. См., Как Использовать Многоуровневые Области для информации об уровнях. |
|
Набор или получает перетащить режим, используемый для внутренних рамок в этом рабочем столе. Целое число может быть также JDesktopPane.LIVE_DRAG_MODE или JDesktopPane.OUTLINE_DRAG_MODE . Значение по умолчанию для стили Java живо - перетаскивают режим. |
Следующие примеры используют внутренние рамки. Поскольку внутренние рамки подобны регулярным фреймам, следует также смотреть на Примеры то Использование Фреймы.
Пример | Где Описано | Примечания |
---|---|---|
MyInternalFrame |
Эта страница. | Реализует внутреннюю рамку, которая появляется при смещении к ранее создаваемой внутренней рамке. |
InternalFrameDemo |
Эта страница. | Позволяет Вам создавать внутренние рамки (экземпляры MyInternalFrame ) это входит в приложение JDesktopPane . |
InternalFrameEventDemo |
Как Записать Слушателю Внутренней рамки | Демонстрирует, как прислушиваться к событиям внутренней рамки. Также демонстрирует, как располагать внутренние рамки в пределах настольной области. |