Главная страница
Навигация по странице:

  • На заметку Более содержательное описание библиотеки Swing можно найти в моей книге Swing: руководство для начинающих перевод который на русский язык вышел в И. Д. “Вильямс" в году.

  • 9 5 4 Часть III. Разработка программного обеспечения с использованием Java

  • Компоненты библиотеки Swing

  • 9 5 Библиотека Swing поддерживает подключаемый внешний вид

  • 9 5 7 Компоненты

  • JPasswordField JPopupMenu JProgressBar JRadioButton JRadi oBut t

  • 9 5 Часть III. Разработка программного обеспечения с использованием Java

  • Панели контейнеров верхнего уровня

  • Ijavax.swing.plaf.basic Ij a v a x .s w i n g .text j a v a x .sw i n g .border javax.swing.plaf.metal j a v a x .s w i n g .t e x t .html

  • Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция


    Скачать 25.04 Mb.
    НазваниеС. Н. Тригуб Перевод с английского и редакция
    АнкорJava. Полное руководство. 8-е издание.pdf
    Дата28.02.2017
    Размер25.04 Mb.
    Формат файлаpdf
    Имя файлаJava. Полное руководство. 8-е издание.pdf
    ТипДокументы
    #3236
    страница85 из 90
    1   ...   82   83   84   85   86   87   88   89   90
    ГЛАВА
    Введение в библиотеку В части II настоящей книги вы могли видеть, как с помощью классов библиотеки
    AWT можно создавать пользовательские интерфейсы. Несмотря на то что библиотека AWT по-прежнему является важной частью Java, ее набор компонентов применяется для создания графических пользовательских интерфейсов уже не так широко. Сегодня многие программисты пользуются для этой цели классами библиотеки
    Swing. Библиотека Swing — это набор классов, которые предлагают более мощные и гибкие компоненты GUI, чем библиотека AWT. Вообще говоря, современный графический пользовательский интерфейс Java построен на основе библиотеки Рассмотрению библиотеки Swing посвящено две главы. Здесь вы ознакомитесь с основами библиотеки Swing. Начнем с описания ее основных концепций. Затем будет представлена общая форма программы на базе библиотеки Swing, включая приложения и аплеты. В конце главы объясним, как с помощью библиотеки Swing можно делать рисунки. В следующей главе будет рассмотрено несколько наиболее часто используемых компонентов библиотеки Swing. Важно понять, что количество классов и интерфейсов в пакетах Swing довольно большое и что каждый из них просто невозможно рассмотреть в этой книге. (Вообще говоря, чтобы полностью рассказать о библиотеке Swing, потребуется отдельная книга) И все же в этих двух главах вы сможете узнать о библиотеке Swing самое главное.
    На заметку Более содержательное описание библиотеки Swing можно найти в моей книге Swing: руководство для начинающих перевод который на русский язык вышел в И. Д. “Вильямс" в году.
    Истоки библиотеки Вначале существования языка Java классов библиотеки Swing не было вообще. Причиной разработки классов библиотеки Swing было слабое место в исходной подсистеме GUI Java — библиотеке AWT. Библиотека AWT определяет базовый набор элементов управления, окон и диалоговых окон, которые поддерживают пригодный к использованию, но ограниченный в возможностях графический интерфейс. Одной из причин ограниченности библиотеки AWT является то, что она преобразует свои визуальные компоненты в независящие от платформы соответствующие им эквиваленты, которые называются равноправными компонентами Это означает, что внешний вид компонента определяется платформой, а не закладывается в Java. Поскольку компоненты библиотеки AWT используют “машинно­
    зависимые” ресурсы кода, они называются тяжеловесными.
    Использование “машинно-зависимых” равноправных компонентов порождает некоторые проблемы. Во-первых, в связи с различиями, существующими между опера

    9 5 4 Часть III. Разработка программного обеспечения с использованием Java
    ционными системами, компонент может выглядеть или даже вести себя по-разному на различных платформах. Такая изменчивость шла вразрез с философией Java: написано однажды, работает везде. Во-вторых, внешний вид каждого компонента был фиксированным (так как все зависело от платформы, и это нельзя было изменить по крайней мере, делалось это с трудом. В-третьих, применение тяжеловесных компонентов влекло за собой появление новых ограничений. К примеру, тяжеловесный компонент всегда имеет прямоугольные очертания и является непрозрачным.
    Вскоре после появления первоначальной версии Java стало очевидным, что ограничения, присущие библиотеке AWT, были настолько серьезными, что нужно было найти лучший подход. В итоге появились классы Swing как часть набора библиотек классов Java Foundation Classes (JFC). В 1997 году они были включены в Java 1.1 в виде отдельной библиотеки. А начиная с версии Java 1.2 классы Swing (а также все остальное, что входило в состав набора JFC) стали полностью интегрированными в Классы библиотеки Swing построены на основе библиотеки Прежде чем продолжить, необходимо сделать одно важное замечание хотя библиотека Swing снимает некоторые ограничения, присущие библиотеке AWT, она не заменяет библиотеку AWT. Наоборот, классы библиотеки Swing построены на основе библиотеки AWT. Вот почему библиотека AWT до сих пор является важной частью языка Java. Кроме того, библиотека Swing использует тот же механизм обработки событий, что и библиотека AWT. Таким образом, перед использованием библиотеки Swing нужно разобраться стем, как работает библиотека
    AWT. (О библиотеке AWT речь велась в главах 24 и 25. Обработке событий быда посвящена глава Две ключевые особенности библиотеки Как только что было сказано, классы библиотеки Swing были созданы для того, чтобы устранить ограничения, присущие библиотеке AWT. Этого удалось достичь благодаря двум ключевым особенностям облегченным компонентами подключаемому внешнему виду. Вместе они предлагают элегантное и простоев использовании решение проблем библиотеки AWT. Именно эти две особенности и определяют суть библиотеки Swing. О каждой из них поговорим прямо сейчас.
    Компоненты библиотеки Swing являются облегченными

    За некоторыми исключениями, компоненты библиотеки Swing являются облегченными. Это означает, что они написаны исключительно на языке Java и не преобразуются в равноправные компоненты, специфические для данной платформы. Следовательно, облегченные компоненты являются более эффективными и гибкими. Более того, поскольку облегченные компоненты не преобразуются в равноправные “машинно-зависимые” компоненты, внешний вид каждого компонента определяется классами библиотеки Swing, а не базовой операционной системой. Это означает, что каждый компонент будет работать одинаково на всех платформах
    Глава 30. Введение в библиотеку Swing
    9 5 Библиотека Swing поддерживает подключаемый внешний вид
    Библиотека Swing поддерживает принцип подключаемого внешнего вида (Pluggable
    Look And Feel — PLAF). Поскольку каждый компонент библиотеки Swing визуали­
    зируется кодом Java, а не “машинно-зависимыми” равноправными компонентами, внешний вид компонента находится под контролем библиотеки Swing. Это говорит о том, что внешний вид можно отделить от логики компонента, что и делается в библиотеке Swing. В этом есть и свое преимущество так можно изменить способ визуализации компонента, не затрагивая какой-либо из его остальных аспектов. Другими словами, можно подключить новый внешний вид любого заданного компонента, не создавая при этом каких-либо побочных эффектов в коде, использующем данный компонент. Более того, можно определить наборы внешних видов, которые будут представлять разные стили пользовательского графического интерфейса. Чтобы использовать определенный стиль, нужно просто подключить его внешний вид. Как только это будет сделано, все компоненты автоматически будут визуализироваться с помощью этого стиля.
    Возможность подключаемого внешнего вида имеет несколько важных преимуществ. Например, вы можете задать параметры, которые будут одинаковыми для всех платформ. И наоборот, можно задать внешний вид, специфичный для определенной платформы. Например, если вызнаете, что приложение будет работать только в среде Windows, можно определить внешний вид для Windows. Можно также разработать и специальный внешний вид. И наконец, внешний вид можно динамически изменять вовремя работы приложения 7 предлагает такие внешние виды, как metal, Motif и Nimbus, которые доступны всем пользователям библиотеки Swing. Внешний вид metal (металлический) также называется внешним видом Он не зависит от платформы и доступен во всех средах, в которых работает Java. Кроме того, он еще и выбирается по умолчанию. В среде Windows можно использовать внешние виды Windows и Windows Classic. В этой книге используется внешний вид metal, поскольку он не зависит от платформы.
    Архитектура В общем случае визуальный компонент определяется тремя отдельными аспек­
    тами:
    • как компонент выглядит вовремя его визуализации на экране;
    • как компонент взаимодействует с пользователем;
    • информацией о состоянии компонента.
    Независимо оттого, какая архитектура используется для реализации компонента, она должна неявно включать эти три аспекта. Вот уже несколько лет свою исключительную эффективность доказала архитектура “моделъ-представление-
    коншроллер” (Model-View-Controller — Успех архитектуры MVC объясняется тем, что каждый элемент дизайна соответствует некоторому аспекту компонента. Исходя из терминологии MVC, модель соответствует информации о состоянии, связанной с компонентом. Например, в случае флажка модель содержит поле, которое показывает, установлен ли флажок. Представление определяет, как компонент отображается на экране, включая любые аспекты представления, зависящие от текущего состояния модели. Контроллер определяет, как компонент будет реагировать на действия пользовате­

    9 5 6 Часть III. Разработка программного обеспечения с использованием ля. Например, когда пользователь щелкает на флажке, контроллер реагирует изменением модели, чтобы отразить выбор пользователя (отметка флажка или снятие отметки. Это впоследствии приводит к обновлению представления. Разделяя компонент на модель, представление и контроллер, можно изменять конкретную реализацию любого из этих аспектов, не затрагивая остальные. Например, различные реализации представлений могут визуализировать один и тот же компонент разными способами, однако это не будет влиять на модель или контроллер.
    Хотя архитектура MVC и принципы, заложенные в ее основе, выглядят концептуально, высокий уровень разделения между представлением и контроллером не дает никаких преимуществ компонентам библиотеки Swing. Наоборот, библиотека Swing использует модифицированную версию MVC, которая объединяет представление и контроллер в один логический объект, называемый делегатом пользовательского интерфейса (UI delegate). В связи с этим подход, применяемый в библиотеке Swing, называется или архитектурой “модель-делегат” (Model-Delegate), или архитектурой разделяемая модель (Separable Model). Поэтому, несмотря на то что архитектура компонентов библиотеки Swing основана на MVC, она не использует ее классическую реализацию.
    Подключаемый внешний вид в библиотеке Swing возможен благодаря архитектуре “модель-делегат”. Поскольку представление и контроллер отделены от модели, внешний вид можно изменять, не влияя на способ использования компонента внутри программы. И наоборот, можно настроить модель, не влияя на способ отображения компонента на экране или реакцию на действия пользователя.
    Для поддержания архитектуры “модель-делегат” большинство компонентов библиотеки Swing содержит два объекта. Один из них представляет модель, а другой — делегата пользовательского интерфейса. Модели определяются интерфейсами. Например, модель кнопки определяется интерфейсом. Делегаты пользовательского интерфейса являются классами, унаследованными от
    ComponentUI. Например, делегатом пользовательского интерфейса кнопки является
    ButtonUI. Как правило, ваши программы не будут взаимодействовать напрямую с делегатами пользовательского интерфейса.
    Компоненты и контейнеры
    Графический пользовательский интерфейс библиотеки Swing состоит из двух ключевых элементов компонентов и контейнеров Однако это в основном концептуальное разделение, так как все контейнеры тоже являются компонентами. Различие между этими двумя элементами кроется в их назначении компонент представляет собой независимый визуальный элемент управления вроде кнопки или ползунка, а контейнер вмещает группу компонентов. Таким образом, контейнер является особым типом компонента и предназначен для содержания других компонентов. Более того, чтобы можно было отобразить компонент, он должен находиться внутри контейнера. Так, во всех пользовательских графических интерфейсах библиотеки Swing имеется как минимум один контейнер. Поскольку контейнеры являются компонентами, контейнер может содержать другие контейнеры . Благодаря этому принципу библиотека
    Swing может определить иерархию вместимости, на вершине которой должен находиться контейнер верхнего уровня.

    А теперь давайте поближе познакомимся с компонентами и контейнерами
    Глава 30. Введение в библиотеку Swing
    9 5 7
    Компоненты
    В общем случае компоненты библиотеки Swing происходят от класса С omponen Исключением является четыре контейнера верхнего уровня, о которых речь пойдет в следующем разделе) Класс
    JComponent предлагает функциональные возможности, общие для всех компонентов. Например, класс
    JComponent поддерживает подключаемый внешний вид. Класс
    JComponent наследует классы библиотеки AWT
    Container и
    Component. Следовательно, компонент библиотеки Swing основан на компоненте библиотеки AWT и совместим с ним.
    Все компоненты библиотеки Swing представлены классами, определенными в пакете j avax.
    swing. Ниже перечислены имена классов компонентов библиотеки Swing (включая компоненты, используемые в качестве контейнеров

    em
    JColorChooser
    JComboBox
    JComponent
    JDesktopPane
    JDialog
    JEditorPane
    JFileChooser
    JFormattedTextField
    JFrame
    JlnternalFrame
    JLabel
    JLayer
    JLayeredPane
    JList
    JMenu
    JMenuBar
    JMenuItem
    JOptionPane
    JPanel
    JPasswordField
    JPopupMenu
    JProgressBar
    JRadioButton
    JRadi
    oBut
    t
    onMenu11 Обратите внимание на то, что все классы компонентов начинаются с буквы
    J. Например, классом для метки является
    JLabel, классом для кнопки —
    JButton, классом для ползунка —
    JScrollBar.
    Контейнеры
    В библиотеке Swing определены два типа контейнеров. Первый тип—это контейнеры верхнего уровня. К ним относятся контейнеры классов г,
    JApplet,
    JWindow и
    JDialog. Классы этих контейнеров не являются наследниками класса
    JComponent. Однако они наследуют классы библиотеки AWT
    Component и
    Container. В отличие от остальных компонентов библиотеки Swing, которые являются облегченными, компоненты верхнего уровня являются тяжеловесными. Поэтому в библиотеке компонентов библиотеки Swing они представляют собой частный случай.
    Судя по названию, контейнер верхнего уровня должен находиться на вершине иерархии контейнеров. Контейнер верхнего уровня не содержится нив каком другом контейнере. Более того, каждая иерархия вместимости должна начинаться с контейнера верхнего уровня. Таким контейнером в приложениях чаще всего является класс
    JFrame. В аплетах чаще всего используется класс Вторым типом контейнеров, которые поддерживает библиотеку Swing, являются облегченные контейнеры. Они наследуются от класса
    JComponent. Примером облегченного контейнера является класс
    J
    Panel, который является контейнером общего назначения. Облегченные контейнеры часто используются для организации и управления группами связанных компонентов, поскольку облегченный контейнер может находиться внутри другого контейнера. Следовательно, вы можете применять облег­

    9 5 Часть III. Разработка программного обеспечения с использованием Java
    ченные контейнеры наподобие класса
    J
    Panel для создания подгрупп связанных элементов управления, содержащихся внутри внешнего контейнера.
    Панели контейнеров верхнего уровня
    Каждый контейнер верхнего уровня определяет набор панелей (рапе. Вверху иерархии находится экземпляр класса
    JRootPane. Класс
    JRootPane
    — это облегченный контейнер, предназначенный для управления остальными панелями. Он также помогает управлять необязательной полосой меню. Панели, содержащие корневую панель, называются “стеклянной”панелью (glass рапе, панелью содержимого (content рапе) и многослойной панелью (layered рапе).
    “Стеклянная” панель является панелью верхнего уровня. Она находится над всеми панелями и покрывает каждую из них. По умолчанию эта панель является прозрачным экземпляром класса
    JPanel. Стеклянная панель позволяет управлять событиями мыши, влияющими навесь контейнера не на отдельный элемент управления, или, к примеру, рисовать поверх любого другого компонента. В большинстве случаев вам ненужно будет использовать стеклянную панель напрямую, однако если она вам понадобится, то искать ее нужно именно здесь.
    Многослойная панель является экземпляром класса
    JLayeredPane. Она позволяет задать определенную глубину размещения компонентов. Значение, соответствующее этой глубине, определяет, какой компонент перекрывает собой другой компонент. (В связи с этим многослойные панели позволяют задавать упорядоченность компонентов по координате Z, хотя это не всегда бывает необходимо) Многослойная панель содержит панель содержимого и (необязательно) полосу меню.
    Несмотря на то что стеклянная и многослойная панели являются неотъемлемыми частями контейнера верхнего уровня и служат для разных целей, большая часть того, что они предлагают, скрыта от пользователей. Ваше приложение будет работать чаще всего с панелью содержимого, поскольку именно на нее выбудете добавлять визуальные компоненты. Другими словами, добавляя компонент например, кнопку) в контейнер верхнего уровня, вы добавляете его в панель содержимого. По умолчанию панель содержимого является непрозрачным экземпляром класса Пакеты библиотеки Библиотека Swing — это очень большая подсистема, в которой задействовано большое количество пакетов. Вот пакеты, определенные библиотекой Swing на момент написания этой книги a v a x .swing

    Ijavax.swing.plaf.basic
    Ij a v a x .s w i n g .text
    j a v a x .sw i n g .border
    javax.swing.plaf.metal
    j a v a x .s w i n g .t e x t .html
    j a v a x .sw i n g .colorchooser
    javax.swing.plaf.multi
    j a v a x .s w i n g .t e x t .h t m l .
    parser
    j a v a x .sw i n g .event
    j a v a x .s w i n g .p l a f .nimbus
    j a v a x .s w i n g .t
    ext.rtf
    j a v a x .sw i n g .f
    ilechooser
    j
    a v a x .s w i n g .p l a f .synth
    j a v a x .s w i n g .tree
    j
    a v a x .sw i n g .plaf
    j
    a v a x .s w i n g .table
    j av ax
    .s w i n g Самым главным пакетом является j avax. swing. Его нужно импортировать в любую программу, использующую библиотеку Swing. В этом пакете содержатся
    классы, реализующие базовые компоненты библиотеки Swing, такие как кнопки, метки и флажки.
    Простое приложение Программы Swing отличаются и от консольных программ, и от программ AWT, показанных в этой книге. Например, в отличие от библиотеки AWT, они используют другие наборы компонентов и другие иерархии контейнеров. Программы
    Swing имеют также особые требования, которые относятся к потоковой обработке. Самый лучший способ понять структуру программы Swing — испытать в деле рабочий пример. Существует два типа программ Java, в которых обычно используется библиотека Swing. Первый тип — это настольные приложения, а второй тип — аплеты. В этом разделе будет рассмотрен пример создания приложения Swing. Созданием аплета Swing мы тоже будем заниматься в этой главе, но чуть позже.
    Несмотря на то что следующая программа довольно небольшая, она демонстрирует один из способов написания приложения Swing. Кроме того, она иллюстрирует несколько ключевых возможностей библиотеки Swing. В ней используется два компонента библиотеки Swing:
    JFrame и
    JLabel. Класс
    JFrame
    — контейнер верхнего уровня, который обычно используется в приложениях Swing. Класс
    JLabel
    — компонент библиотеки Swing, создающий метку, которая является компонентом, отображающим информацию. Метка — это самый простой компонент библиотеки Swing, поскольку она является пассивным компонентом. То есть метка не реагирует на действия пользователя. Она служит для отображения выходных данных. Программа использует контейнер класса
    JFrame для хранения экземпляра класса
    JLabel. Метка отображает короткое текстовое сообщение Простое приложение Swing,

    1   ...   82   83   84   85   86   87   88   89   90


    написать администратору сайта