Читаем Графические интерфейсы пользователя Java полностью

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

Каждый контейнер верхнего уровня имеет панель содержимого contentPane, которая содержит видимые компоненты контейнера верхнего уровня.

Вы можете дополнительно добавить панель меню в контейнер верхнего уровня.

Панель меню расположена в контейнере верхнего уровня, но вне панели содержимого.

Получить панель содержимого контейнера верхнего уровня можно с помощью метода getContentPane.

Панель содержимого по умолчанию – это простой промежуточный контейнер, который наследуется от JComponent и использует BorderLayout в качестве менеджера компоновки.

Однако можно создать панель JPanel и установить ее как панель содержимого, используя метод setContentPane контейнера верхнего уровня.

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

Устройство контейнера верхнего уровня еще более сложное, чем это кажется на первый взгляд.



Каждый контейнер верхнего уровня использует промежуточный контейнер, называемый корневой панелью root pane.

Корневая панель управляет панелью содержимого и панелью меню вместе с несколькими другими контейнерами.

Здесь слоистая панель layered pane содержит панель меню и панель содержимого и обеспечивает упорядочивание других компонентов по оси Z.

Стеклянная панель glass pane часто используется для перехвата входных событий, проходящих через контейнер верхнего уровня, а также может использоваться для рисования поверх нескольких компонентов.

Здесь показан пример создания пользовательского диалога.



В конструкторе класса используется панель содержимого для создания интерфейса диалога.

Также переопределяется метод createRootPane, который создает корневую панель, для закрытия диалога при нажатии кнопки «Escape».

В этом методе используется метод getKeyStroke класса KeyStroke для установки нажатия клавиши ESCAPE.

Также создается действие AbstractAction, реализующее метод actionPerformed, в котором используются методы setVisible и dispose, чтобы сделать окно невидимым и удалить его.

Таким образом определенные KeyStroke и AbstractAction используются в созданной корневой панели JRootPane.

Метод getInputMap класса JRootPane используется для получения входной карты, когда компонент имеет фокус.

Во входной карте мы устанавливаем нажатие клавиши «ESCAPE».

Мы также получаем карту действия ActionMap, чтобы связать действие и нажатие клавиши.

Glass Pane



Здесь показан пример использования панели Glass Pane для рисования поверх компонентов, содержащихся в панели содержимого.

Пользовательская панель Glass Pane устанавливается для контейнера верхнего уровня методом setGlassPane.

Так как по умолчанию она невидима, для нее нужно вызвать метод setVisible (true).

Панель по умолчанию можно получить методом getGlassPane контейнера верхнего уровня.

Слоистая панель Layered Pane представляет собой контейнер с глубиной, так что перекрывающиеся компоненты могут отображаться один поверх другого.



Каждая корневая панель root pane контейнера верхнего уровня помещает панель меню и панель содержимого в экземпляр слоистой панели JLayeredPane.

Порядок Z слоистой панели обеспечивает такое поведение, как отображение всплывающих меню над другими компонентами.

Слоистая панель может использоваться для размещения компонентов один над другим по оси Z, создавая таким образом 3D эффект глубины.

Панель по умолчанию можно получить методом getLayeredPane контейнера верхнего уровня.

Установить пользовательскую панель для контейнера верхнего уровня можно методом setLayeredPane.

Компоненты добавляются в панель методом add, при этом указывается позиция на оси Z компонента.

По умолчанию слоистая панель не имеет менеджера компоновки, поэтому для размещения компонентов используется метод setBounds.

JInternalFrame

С помощью классов JInternalFrame и JDesktopPane можно создавать многооконные приложения, в которых программа имеет одну большую панель «рабочий стол», которая содержит все остальные окна.




Другие окна могут быть минимизированы и перемещаться в пределах этой панели рабочего стола, но не перемещается за пределы панели.

Кроме того, минимизация панели рабочего стола скрывает все содержащиеся окна.

Класс JDesktopPane расширяет класс JLayeredPane специально для работы с внутренними окнами JInternalFrame.

Объект JDesktopPane представляет собой контейнер, используемый для создания интерфейса с несколькими документами или виртуального рабочего стола.

Вы создаете объекты JInternalFrame и добавляете их в объект JDesktopPane.

Объект JInternalFrame представляет собой легковесный объект, который обеспечивает многие функции нативного или тяжеловесного фрейма, включая перетаскивание, закрытие, минимизирование, изменение размера, отображение заголовка и поддержку строки меню.

Каждое внутреннее окно JInternalFrame содержит корневую панель JRootPane.

При использовании внутренних окон вы должны установить их размер.

Перейти на страницу:

Похожие книги

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT