Beanlnsight и JAR-файлы

В

этой главе мы продолжим рассмотрение компонента часов. Материал главы раскрывает три отдельных темы:

■ Анализ bean-компонента с помощью BeanInsight.

■ Упаковка bean-компонента в JAR-файл.

■ Помещение bean-компонента на палитру компонентов.

На данный момент вы должны достаточно хорошо представлять себе, как выпол­нять сборку JavaBean-компонента. Собственно говоря, работа, которую вы продела­ли, читая эту книгу, уже должна приносить плоды.

Из этой главы вы узнаете, как добавить заключительные штрихи к своему эле­менту управления, чтобы можно было им поделиться с другими разработчиками.

Использование Beanlnsight

BeanInsight — это инструмент, применяемый для верификации Ьеап-компонента и анализа его свойств. Во многих отношениях ется инспектор JBuilder; однако существует ряд вещей, которым вы сможете научиться, только поработав с BeanInsight. BeanInsight — это инструмент уровня редакций SE и Enterprise.

с этими задачами адекватно справля-рис. 37.1. использование bean chooser, входящего в состав beaninsight, для поиска класса elfclock, который необходимо проанализироватьЧтобы воспользоваться BeanInsight, выбе­рите в меню пункт Tools ∣ Beanlnsight (Инстру­менты I Beanlnsight). Щелкните на кнопке эл­липсиса справа от поля Select a bean to examine (Выберите bean-компонент для ана­лиза), чтобы вывести на экран диалоговое окно Bean Chooser (Выбор Ьеап-компонента), которое показано на рис. 37.1. Найдите класс ElfClock. Или же, прежде чем вызы­вать BeanInsight, можно переместить фокус на класс, который вы хотите проанализиро­вать, в редакторе или конструкторе, — тогда не потребуется его искать.

754

Щелкните на кнопке OK, чтобы вернуться в диалоговое окно BeanInsight. Щелк­ните на кнопке Examine Bean (Проанализировать bean-компонент). Теперь BeanInsight должен выглядеть так, как показано на рис. 37.2.

Вы видите, что ваш bean-компонент действителен и имеет девять дескрипторов свойств, три дескриптора событий и т. д. Если с вашим bean-компонентом что-ни­будь не так, один из элементов в разделе результатов будет выделен красным цве­том. Например, если вы не включили BeanInfo-файл, в разделе результатов диалого­вого окна появится сообщение об этом, выделенное красным цветом. Девять деск­рипторов СВОЙСТВ Соответствуют свойствам Background, CharHeight, CharWidth, Foreground, IeftGap, IeftOffSet, Running, TextWidth И TopOffSet, Которые ВЫ Создали в последних двух главах. Эти дескрипторы также перечислены в классе ElfClockBeanInfo:

PropertyDescriptor[] Pds = New PropertyDescriptorI] {

—background,

-CharHeight,

-CharWidth,

—foreground,

-IeftGap,

-IeftOffSet,

—running,

—textWidth,

—topθffSet};

Щелкая на кнопках View Details (Просмотреть детали), можно получить допол­нительные сведения о разработанном bean-компоненте (см. рис. 37.3). Так, вы уви­дите, что данный класс соответствует основным требованиям к Ьеап-компонентам, и что у него имеется конструктор по умолчанию и что он сохранен в общедоступном классе. Также вы можете видеть дерево наследования bean-компонента и реализо­ванных интерфейсов. Класс ElfClock Не реализовывал эти интерфейсы, а просто унаследовал их реализацию.

На рис. 37.4 можно видеть все события, связанные с bean-компонентом. Это со­бытия, явным образом выявленные в предыдущей главе путем перекрытия метода GetEventDescriptors Класса SimpleBeanInfo.

ф laeanintight,cleea ww"rtwτ,ie⅜⅛a⅜t⅝⅜n⅛ι⅜ictm⅛w;
. icom ehfertwere coniiixlockeifclock
∣ i⅛⅜⅛⅛⅜
,bsanlmlgianewie been;
beanwo:
,ewn beu
propertretfftnx
cjaaonfcar
mswoaialio.. |
,ста* contalwnwerrcomp clfckekcfcek <∣adwlsucxβe*fc∣⅛.
ctaee corn wwnwarexwnpeiocfceeciockbaanwo watfatf auceeeeliιl⅛ vartletf 9 proparttoescrtptora
verttstf э event бек no p⅛p∙rt∣f etfwfa ihyntf no xuetorrfcar iountf.
рис. 37.2. анализ bean-компонента при помощи beaninsight

рис. 37.3. использование beaninsight для анализа дерева наследования ьеап-компонентаbeanltitieht details , от elvenware comp clock.eifciockиг buntnta prooeitt . ∣even∣8etol propertireditoiei cuetonjzerl mktauteel
 ^-,..,..λ..¾i дж»
cioaa

Btanimighl Datanc (OmetiianwaratofnpctockEIICIocK

Btan Baantntbj PropaitleaEvenIBeteJ Property Edborof Cuetortitori J Btar

Clata totn. elvenwιre. coιnp-CloctcEITCIock Ia public Drtault ConatiUCtor found

Claaa com rtvenwerecompdockEHCloek Ioadad aucceaatlfly. Miarttanca Harvchyi

Ii IavaKawtngJComponent IavaawtContalnar IavaawtComponanI IavaiangObIact

IavajoBarIaIIzabla Iavaawtliraga *magaθbaaιvar Java IwlManuContaInat IavaloBaitaIIzabla

Рис. 37.4. Использование BeanInsight Для просмотра событий, ассоции­рованных с Ьеап-компонентом

В среде BeanInsight вы несколько теснее связаны с кодом, написанным для EifCiockBeaninfo, Нежели в инспекторе. Вот, еще раз, метод в Beanlnfo-файле, ко­торый показывает события — и только события — которые компонент желает сделать доступными пользователю:

Public EventSetDescriptor[] getEventSetDescriptora()

{

Try

I

EventSetDescriptor action ≈ new EventSetDescriptorI ElfClock. class, "ActionListener",

ActionListener. class, "actionPerformed");

EventSetDescriptor key — new EventSetDescriptorI

ElfClock. class, "KeyListener", KeyListener. class, new String[] {"keyTyped", "keyPressed", "keyReleased"), "addKeyListener" , ,lremoveKeyListener") ;

EventSetDescriptor mouse ≈ new EventSetDescriptor I

ElfClock. class, "MouseEvent", MouseListener. class, new String[] {"mousePressed", "mouseClicked",

"mouseReleased", ,lInouseEntered», "mouseExited"}, "addMouseListener", "TemoveMouseListener");

EventSetDescriptor edArray[] = { action, key, mouse ); return edArray;

}

Catch (IntrospectionException e)

I

E. PrintStackTrace();

)

Return Null;

)

Предположим, необходимо изменить листинг этого метода, в части, связанной с MouseLiatener, Удалив некоторые методы:

EventSetDescriptor mouse ≈ new EventSetDescriptorC

ElfClock. class, "MouseEvent", MouseListener. class,

New String[] CmouseReleased", "mouseEntered", "mouseExited"},

"addMouseListener", "remoVeMouseListener");

Здесь методы MouseClicked И MouseFressed Были удалены. Если вы это проде­лали, картина, которую вы бы увидели на рис. 37.4, соответствующим образом из­менилась бы, ТО Есть методы MouseClicked И MousePressed Исчезли бы ИЗ BeanInsight. Тем не менее, эти изменения не были отражены в инспекторе (по край­ней мере, они не отражаются в моей версии JBuilder). Я склонен думать, что и в инс­пекторе их быть не должно. Однако это не так. Возможно, это ошибка, которая уже исправлена в вашей редакции продукта.

Пожалуй, я мог бы еще поговорить о BeanInsight, однако, к этому времени вы должны уже неплохо понимать, что BeanInsight собой представляет, и какую пользу можно из него извлечь. Мне кажется, он будет особенно полезен в тех случаях, ког­да вы старались нацелить свой bean-компонент на определенный диапазон инстру­ментальных средств разработки. BeanInsight учитывает не только потребности JBuilder; он сообщает вам максимум сведений о состоянии bean-компонента. По сути, это попытка показать максимум информации о bean-компоненте с помощью встроенных механизмов самоанализа Java.

Понятие JAR-файлов

Мы довольно-таки подробно обсуждали JAR-файлы в части V. Тем не менее, да­вайте пройдемся по ним еще раз, просто чтобы вам было проще понять сложную тему, рассмотрение которой нам предстоит.

Помещение кода в JAR-файл позволяет без особых затруднений повторно его ис­пользовать. Просто дайте кому-нибудь JAR-файл, и этот самый кто-то сможет ис­пользовать наш компонент. Если бы не было JAR-файлов, разработчикам пришлось бы распространять все те черновые class-файлы, из которых состоит компонент.

Кроме того, разработчикам пришлось бы предусмотреть механизм обеспечения того, чтобы после распространения компонента каждый class-файл находился в надлежащем пакете. JAR-файлы избавляют нас от этих малоинтересных забот.

Java воспринимает JAR-файлы так, как будто они являются каталогом на вашей машине. Предположим, у вас есть каталог C:\Src. Пусть вы поместили в него JAR — файл:

C:\Src\Codebox.Jar

C точки зрения Java, Codebox. Jar — это не более чем еще один каталог, находя­щийся внутри e:/sre. Чтобы использовать содержимое нового "каталога", помести­те JAR-файл в свой путь классов.

Чтобы сообщить JBuilder об этом JAR-файле, необходимо создать указывающую на него библиотеку JBuilder. О том, как создавать библиотеки, вы уже, должно быть, узнали из части V. После того, как вы добавите библиотеку в JBuilder, он будет вос­принимать ваш JAR-файл так, как будто это каталог в вашем пути классов.

примечаниеВ этот κaτoor∕JAR-φaitπ можно помещать классы, доступ к которым вы хотите предоставить другим пользователям. JAR-файл содержит не только классы, но и ка­талоги, ведущие к классам. Так, если вы хотите предоставить другим пользователям доступ К Com.Elvenware.Comp.Clock.Elfclock.Class, ВЫ ДОЛЖНЫ Создать в JAR — файле структуру каталогов ComEivenwareCompClock. Создав такую структуру ка­талогов, вы можете поместить class-файл в соответствующий каталог JAR-файла. Сборщик архивов Archive Builder помогает автоматизировать этот процесс. Вы мо­жете также легко создавать JAR-файлы в режиме командной строки с помощью ути­литы Jar Из состава JDK или инструментов, предоставляемых проектом с открытым исходным кодом Apache Jakarta Ant.

Зачем же мы помещаем наши классы в каталог с именем com. elvenware. сотр? Прежде всего, не забывайте о естественном соответствии меж­ду именами пакетов (com. elvenware. сотр) и каталогами (com∕elvenware∕comp) для class — и src-файлов. Хотя это соответствие не всегда обеспечивается принудительно, оно помогает избежать проблем и путаницы, возникающих при сборке или выполнении Java — проекта. Некоторые элементы данного имени пакета — не более чем вопрос соглаше­ний. В мире Java практически в каждом проекте присутствуют десятки, а то и сотни клас­сов. Следовательно, необходим определенный порядок в структуре этих пакетов. Один из способов добиться порядка — обеспечить, чтобы у каждой компании был свой четко обозначенный пакет. Все компании, занимающиеся созданием компонентов, помещают свои компоненты в пакет с именем сот. Внутри этого пакета они создают каталог с име­нем своей компании, как то: com. еIvenware. Затем внутри него они создают каталоги для должной категоризации своих компонентов: com. elvenware. сотр. clock. Все это — не более чем соглашение; это делается с целью упорядочения тех многих тысяч существующих пакетов, которыми могут пользоваться Java-разработчики. В этом смыс­ле соглашение подобно принятой в библиотеках десятичной системе Дьюи: это всего Лишь способ организации множества отдельных предметов.

Создание JAR-файла для вашего Ьеап-компонента

В этом разделе вы займетесь созданием JAR-файла для своего нового Ьеап-ком­понента. Это очень важный шаг, поскольку это позволит bean-компоненту быть многократно использованным множеством разработчиков.

В предыдущей главе я показал вам приемы, с помощью которых вы смогли пере­нести свой bean-компонент в каталог, где исходный код будет доступен множеству программ. Здесь нас не интересует совместное использование исходного кода, а только совместное использование class-файлов. Это может показаться не таким уж и большим достижением, однако, в конечном счете, JAR-файл, наполненный class- файлами, и есть то, что нужно другим разработчикам, которые захотят воспользо­ваться вашими компонентами. Это стандартный формат, используемый для распро­странения bean-компонентов. Других разработчиков, скорее всего, не будет интере­совать ваш исходный код; они хотят использовать ваш компонент и не более того. JAR-файлы — это простейший и в то же время лучший способ поделиться компо­нентом с другими

Код для этого Ьеап-компонента я собираюсь поместить в тот же архив, что и код библиотеки CodeBox, разработанный в части V, Codeboχ.Jar. Весь код, создан­ный тогда, был помещен в пакет с именем Codebox. Когда вы закончите чтение этой
главы, код в JAR-файле будет включать в себя два пакета: Com.Elvenware.Codebox И Com.Elvenware.Comp. Здесь Сотр Представляет собой сокращение от component (компонент).

примечаниеКак иногда случается, два дерева в некоторой мере перекрываются, поэтому, что­бы создать полезный архив, потребуется включить в него код Codeboχ. Кроме того, удобнее помещать весь код из примеров в этой книге в один архив, поэтому советую поместить и код Comp, И код Codeboχ В один и тот же JAR-файл, — описанию этого процесса и посвящается данный раздел.

На самом деле, я несколько упрощаю положение вещей. Просматри­вая сопровождающие книгу материалы, вы увидите, что исходный код codebox также разделяется на ветвь Personal и ветвь pro-ent, в которой содержится код для редак­ций SE и Enterprise. Большая часть кода, разработанного для JAR-файла codebox, будет работать в редакции Personal, однако код для работы с базами данных требует редакции Enterprise. В файле index. html в сопровождающих материалах вы найдете последние сведения о том, как я, в конце концов, разбил код, чтобы каждый из вас смог пользовать­ся им. Пока что просто не обращайте внимания на ветвь pro-ent, поскольку к данному Этапу разработки кода она отношения не имеет.

Создание JAR-файлов из командной строки

Простой способ создания JAR-файла для своего bean-компонента предполагает использование режима командной строки. В частности, можно обновить файл Buildcodebox.Bat, Разработанный в части V. Файл BuildCodeBox.Sh для Linux вхо­дит в состав сопровождающих книгу материалов; там также присутствуют и файлы для Ant. Новый же командный файл для Windows показан в листинге 37.1:

Листинг 37.1. Командный файл для создания нового архива CodeBoxjar

@echo off

Rem $Id: index. html, v 1.9 2002/01/02 03:32:51 ccalvert Exp $

Echo ———————————————————————-

Echo Последняя сорока данного сценария копирует JAR Файл в заданный каталог, Echo Вам может понадобиться отредактировать эту строку для соответствия Echo Структуре каталогов на вашем компьютере.

Echo ———————————————————————-

Echo Сборка Codebox.Jar

JavacSourcepath SrcPersonalComElvenwareCodeboxD Classes SrcComElvenwareCodebox*.Java

JavacSourcepath SrcPersonalComElvenwareCompClockD Classes SrcComElvenwareCompClock*.Java

Jar — cvf codebox. jar — C classes com

Copy codebox. jar g:\utils\classes

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

примечаниеДва оператора, вызывающие javac, просто обеспечивают то, что исходные фай­лы будут должным образом скомпилированы. Оператор jar в конце сценария со­здает JAR-файл. Последний оператор копирует JAR-файл туда, где ожидают найти его ваш путь классов и ваш файл библиотеки JBuilder.

C помощью пункта меню Tools ∣ Configure libraries создайте библио­теку. Библиотека добавляет JAR-файл или пакет к вашему пути классов, как его видит JBuiIder. Затем воспользуйтесь пунктом меню Project ∣ Project Properties, чтобы добавить библиотеку в свой текущий проект. Добавляя библиотеку, вы помещаете указанный JAR — файл или пакет в путь классов своего текущего проекта. Если вы когда-нибудь получите сообщение о том, что ваш проект не может найти com. elvenware. XXX, одно из воз­можных решений этой проблемы — добавить в путь классов своего проекта файл Codeboχ. jar, как указано в данном примечании.

Создание JAR-файла с помощью Archive Buiider

Если вы располагаете редакцией SE или Enterprise, для создания нового JAR — файла можно воспользоваться Archive Builder. Выберите в меню пункт Wizard | Archive Builder. Установите в качестве Archive Туре (Тип архива) значение Basic и щел­кните на кнопке Next.

В поле Name (Имя) введите CodeBox. В поле File (Файл) укажите место, куда вы хотите поместить Codeboχ.jar, Как показано на рис. 37.5. Вообще говоря, мне ка­жется, что проще всего помещать все свои JAR-файлы в один и тот же каталог. Я предпочитаю не выполнять сборку JAR-файла всякий раз, когда компилирую про­ект. Щелкните на кнопке Next, чтобы перейти к шагу 3 Archive Builder.

Щелкните на кнопке Add Classes (Добавить классы), чтобы добавить в свой ар­хив Дерево классов Com. elvenware. codebox.* И Com.ЕIvenware. comp. clock.*, Как показано на рис. 37.6. Можно также добавить com.Elvenware.Comp.*, поскольку этот пакет содержит несколько компонентов, на рассмотрение которых в этой книге мне не хватило ни времени, ни места. Конечным результатом должно быть нечто подобное тому, что показано на рис. 37.7.

рис. 37.5. установка имени файла и пути в archive builder
рис. 37.6. добавление в jar-файл классов codebox и clock

На шаге 3 мастера выберите переключатель Always include all classes and resources (Всегда включать все классы и все ресурсы). На этом шаге мастера можно поэкспериментировать. Цель состоит в том, чтобы в вашем JAR-файле было как можно меньше классов и ресурсов без какой-либо потери функциональности. По­пробуйте собрать архив несколькими различными способами и посмотрите, на­сколько маленьким вы сможете его сделать, не разбивая свой код. Частенько я при­хожу к выводу, что мне больше всего подходит опция Include required classes and ail resources (Включать требуемые классы и все ресурсы).

На шаге 4 вы можете принять решение по поводу включения каких-либо классов из других JAR-файлов, от которых может зависеть ваш код. Например, если бы мы хотели создать версию Codebox, Которая содержала бы в себе код для работы с база­ми данных компании Borland, это нужно было бы делать именно здесь.

JBuilder очень неплохо справляется с открытием таких JAR-файлов, нахождени­ем только требуемых классов и помещением этих классов в ваш JAR-файл. Будьте осторожны, поскольку вы, возможно, не имеете права распространять классы, со­зданные другими разработчиками.

Выберите Include a manifest in the archive (Включить манифест в архив); в качестве параметров манифеста выберите Create a manifest (Создать манифест). Более под­робное описание манифестов можно найти в главе 28.

Теперь можно закрыть Archive Builder и выполнить сборку своего JAR-файла, сде­лав щелчок правой кнопкой мыши на новом узле в панели проекта. Когда вы завер­шите, панель структуры, будучи полностью развернутой, должна выглядеть, как по­казано на рис. 37.8.

рис. 37.7. три ветви кода, добавленные в архивBl ЯВНЯЯИЯ

IS =J сот

В Й elvenware В 8 codebox

I * ArraytlstStreamclass l ∙t⅛ ElfPanelGradientclass

I i ф EIfPaneIGradIentBeanInro class

L ■■■•? FileBoxcIass i ⅛f FilterExlensionsxIass 1∙ ** Financexlass I ⅛P GetWebPagexlass l ∙≠ lOBoxclasε ‘! V MatbBoxclass ‘i~ StringBoxxIass В [£ comp В ⅞3 clock

I Clockpositionxlass s ⅜⅜ Drawciockelass ‘ DrawPieceCloεk02xlass Г Ъ Elfciockxlass! ♦# Eltciockeixlass — ElfeiockBeanlnfo-Class В ⅛s METArINF

ʌj Manifestmf

Рис. 37.8. Вот так выглядит панель структуры после совершения щелчка на новом архиве с целью развертывания всех его улов

Помещение Bean-компонента на палитру компонентов

Теперь пора поместить bean-компонент на
палитру компонентов. Когда вы это сделаете,
наш новый bean-компонент будет работать
точно так же, как и любой другой bean-ком —
понент из числа тех, которые вы выбираете в
IDE-среде JBuilder и перетаскиваете в конст-
руктор пользовательского интерфейса.

Для начала выберите в меню пункт Tools
I Configure Palette (Инструменты | Сконфигу-
рировать палитру). Или же можно перейти в
режим конструктора, щелкнуть правой
кнопкой мыши на самом компоненте и
выбрать в появившемся контекстном меню
пункт Properties. В любом случае, на экране
появится диалоговое окно Palette Properties
(Свойства палитры), которое показано на
рис. 37.9.

На рисунке 37.9 видно, что я воспользо-
вался кнопкой Add (Добавить) в нижней части

Properties

∙^S-M

ViwnpQriMtti

‘ -,⅛½½j. >i J

Рис. 37.9. Диалоговое окно Palette Properties Служит для конфигурирова­ния Ьеап-компонент, которые присутствуют в палитре компонент

O∙ —=====-———*

ι ⅜}¾∣j⅜ 1 1 н*

Диалогового окна, чтобы добавить новую страницу к палитре компонентов. Страница носит имя Elvenware. C помощью кнопок Move Up (Вверх) и Move Down (Вниз) я переместил эту страницу в нача­ло списка. Своими компонентами я пользуюсь очень часто, поэтому мне нравится переносить стра­ницы, на которых они произрастают, ближе к нача­лу, дабы до них было легко добраться.

Щелкните на закладке Add Components (Добавить компоненты) в верхней части диалогового окна. Щелкните на Select Library (Выбрать библиотеку) и найдите библиотеку CodeBox, Как показано на рис. 37.10. Щелкните на кнопке OK, чтобы закрыть окно поиска библиотеки.

О Select d different library

J Project

£] OAsrclSrcJayaUbbook

£? Foo

J i Ii Tomcat 3.2 Seivtet ^jUserHome

Ej CodeBoxSrc ⅛±j tomcat4O

‘g∙J JBuiider

Ej Apache SOAP "ɪ BortandXML Ej Castor Ej CORBAExpress

! : Ej Data Express

□ Data ExpressforEJB

Ej db8wlng

Ei IntemetBeans Express

Γ°κ^ 1

Help

ПРИМЕЧАНИЕ

Рис. 37.10. Просмотр библиотеки CodeBox

Библиотека CodeBox у вас уже должна быть создана — на основе пре­дыдущих глав книги. Если у вас ее нет, щелкните на кнопке New (Новая), которая нахо­дится в нижней части диалогового окна, показанного на рис. 37.10. Или же можно выб­рать в меню пункт Tools ∣ Configure Libraries и щелкнуть на кнопке New в появившемся диалоговом окне. Как результат, на экране появится диалоговое окно New Library Wizard (Мастер создания новой библиотеки). В поле Location (Местонахождение) укажите User Home. Введите имя библиотеки, коим в нашем случае является CodeBox. Щелкните на кнопке Add и найдите codebox. jar. Проделав это, закройте диалоговое окно и про­должите работу. Если в ходе этого процесса у вас возникли какие-либо затруднения, в Части V вы можете найти разделы, в которых подробно рассказывается о библиотеках.

762

Рис. 37.11. Вот так выглядит диалоговое окно Palette Properties (Свойства палитры) после добавления ваших Ьеап-компонент в палитру компонентов

C’ Brnwse for CIass

Class name ∣cor∩.e⅛enware. tomp. elockElfClock vI

{В Sfe сот

Й I⅛l βtvβnwarβ

; S.⅛c∩debox SS ⅛H сстр

‘ θ⅛ clock

CIockPoeition

# DrawCIock 9 DrawPιβcβClock02 <»Япяяи

∙-⅜ ElfClockBeanInfo

Cancel

J Help

Рис. 37.12. Bean-компонент ElfClock Найден

Закрыв диалоговое окно Select a different library (Выбрать другую библиотеку), уста­новите для Component Filtering (Фильтрация компонентов) значение JavaBeans only (Только JavaBeans), как показано на рис. 37.11.

Следующий шаг состоит в добавлении bean-компонент из библиотеки CodeBox В палитру компонентов. Щелкните на кнопке Add From Selected Library (Добавить из выбранной библиотеки) и найдите bean-компонент EifCiock, Как показано на рис. 37.12.

Для подтверждения того, что bean-компонент был выбран правильно, JBuilder выводит на экран диалоговое окно Results (Результаты). В общем, смотрите рис. 3713. Если что-то пошло не так, вы получите пустое диалоговое окно или диалого­вое окно с сообщением об ошибке.

Если же все в порядке, вы должны увидеть свой компонент на палитре компо­нентов. На данном этапе с ним будет связана стандартная пиктограмма. Однако он должен соответствующим образом себя идентифицировать всплывающей подсказ­кой, если вы на некоторое время задержите над

Ним курсор мыши.

C KesuHs

Сборка тестового аплета

Итак, всю тяжкую работу вы уже выполнили. Дабы удостовериться, что все работает правиль­но, вам потребуется всего лишь создать новый проект, добавить в него JAppiet, и с помощью инспектора присвоить свойствам желаемые зна­чения. Закончив с этим, запустите аплет, чтобы его протестировать.

■Added con. elvenββre. coop. clock. ElfiClock

Рис. 37.13. Сообщение Added… (Добавлен…) в диалоговом окне Results, Которое JBuilder Выдает в случае успешного добавления вашего компонента к палитре компонентов

примечаниеЕдинственный неочевидный момент этого процесса — создать именно JApplet, А не Applet. Как вам, должно быть, хорошо известно, в данном компоненте используется немало вызовов Graphics2D, поэтому не имеет смысла использовать его в старом Applet Времен Java. awt. Этот компонент неразрывно связан со Swing-компонентами.

Совершенно не имеет значения, куда вы поместите свои элемент уп­равления — в аплет или в приложение. Если вам нужна помощь в сборке того или иного — Обратитесь к главе 3.

Присвоение Bean-компоненту пиктограмм из палитры компонентов

Чтобы ваш bean-компонент выглядел более профессионально, или же просто чтобы вам было веселее с ним работать, можно ассоциировать с ним пиктограмму. Вы, конечно же, заметили, что в BeanExpress имеются предназначенные для этого поля (см. рис. 37.14).

Рис. 37.14. При помощи пиктограмм, которые расположены чуть повыше пиктограммы закладки BeanInfo В диалоговом окне BeanExpress, Можно добавлять пиктограммы к вновь созданному компоненту. Эти пиктограммы будут выводиться в палитре компонент

Изменения, внесенные в ваш Beanlnfo-файл, должны выглядеть так:

String IconColorl6xl6Fllename = "clockl6.png";

String iconColor32x32Filename = "clock32.png";

String iconMonol6xl6Filename = "clockl6bw. png";

String iconMono32x32Filename = "clock32bw. png";

Этот код затем используется в методе Geticon, В конце Beanlnfo-файла:

Public java. awt. Image geticon(int iconKind)

{

Switch (iconKind)

{

Case BeanInfo. ICON_COLOR_16xl6: return iconColorl6xl6Filename! =

Null? IoadImage(iconColorl6xl6Filename) : null;

Case BeanInfo. ICON_COLOR_32x32: return iconColor32x32Filename! =

Null? IoadImage(iconColor32×32Filename) : null; case BeanInfo. ICON_MONO_16xl6:

Return IconMonol6xl6Filename! =

Null? IoadImage(iconMonol6xl6Filename) : null;

Case BeanInfo. ICON_MONO_32x32: return iconMono32x32Filename ∙= null? IoadImage(iconMono32x32Filename) : null;

)

Return null;

Обычно лучше всего помещать пиктограммы непосредственно в тот же пакет, где находятся файлы с исходным кодом.

Например, в данном случае можно было бы поместить их в следующий каталог: ∕src∕com∕elvenware∕comp∕clock

Разумеется, на вашей машине путь может выглядеть по-другому.

Графический формат, который предпочитаю я, — это PNG, тем не менее, вполне

примечаниеПодойдут и GIF, и JPG. Если вы не умеете создавать свои собственные пиктограм­мы, можно без особых проблем найти бесплатные пиктограммы в Internet.

Формат PNG я предпочитаю по двум причинам:

Формату GIF свойственны ограничения, связанные с авторским правом.

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

Создание причудливого файла манифеста

Взглянув на рис. 37.11, несложно заметить, что в диалоговом окне присутствует опция JavaBeans in jar manifest only (Только JavaBeans в JAR-манифесте). C помо­щью этой опции вы можете указать, какие файлы в вашем JAR архиве на самом деле являются главным классом bean-компонента, а какие — просто вспомогательными или служебными файлами.

Рассмотрим следующий файл манифеста:

Manifest-Version: 1.0

Built-By: cħarlie

Created-By: Ant 1.4.1

Name: com∕elvenware∕comp∕ElfListBox. class

Java-Bean: True

Name: com∕elvenware∕comp∕clock∕ElfClock. class

Java-Bean: True

Этот файл отмечает компоненты EifListBox И EifClock И указывает, что они представляют собой JavaBean-компоненты. Если вы включите в свой проект этот файл манифеста, опция JavaBeans in jar manifest начнет работать на вас. Если вы от­метите эту опцию и затем щелкнете на кнопке Add from Selected Library (Добавить из выбранной библиотеки), JBuilder не будет предлагать вам найти свои bean компо­ненты, — вместо этого bean-компоненты будут найдены автоматически, и вы увиди­те диалоговое окно, показанное на рис. 37.15.

ф resultsadded сож.elvenwace.содр.elfliatbox udded сож.elvenvare.сожр.clock.eicclockιqjs<⅛<s*:рис. 37.15. если корректно настроить файл манифеста, jbuilder автоматически найдет все классы, которые вы пометили как ьеап-компонентыЧтобы добавить манифест в свой JAR — файл, щелкните правой кнопкой мыши на узле архива в панели проекта. Этот ар­хив вы создали ранее в этой главе — с по­мощью Archive Wizard. В появившемся контекстном меню выберите пункт Properties. Страница Manifest результиру­ющего диалогового окна свойств показа­на на рис. 37.16. Вы видите, что JBuilder автоматически нашел подходящее место для созданного вами файла манифеста.

Вам следует создать файл, подобный приведенному выше в данном разделе, и затем поместить его туда, куда рекомендует JBuilder.

Настроив правильно узел архива, еше раз щелкните на нем правой кнопкой мыши, на сей раз выбрав в контекстном меню опцию Rebuild для JAR-файла. Затем закройте JBuilder и запустите его снова. Если вы этого не сделаете, JBuilder не смо­жет должным образом прочитать новый JAR-файл. Теперь откройте диалоговое окно Palette Properties, показанное на рис. 37.11, выберите переключатель JavaBeans in jar manifest и щелкните на кнопке Add from Selected Library. По идее, вы увидите диалоговое окно, подобное показанному на рис. 37.15.

рис. 37.16. в случае корректнй установки опций в диалоговом окне свойств, jbuiider покажет, где размещается файл манифеста автоматически

Работа с файлами Ant

Существует, собственно говоря, еще один способ создать JAR-файл для вашего bean-компонента. Пожалуй, именно к этому способу я чаще всего и прибегаю. Пользоваться им, однако, далеко не так просто, как сборщиком архивов. Я пользу­юсь ним только потому, что с его помощью можно быстро работать с проектами из командной строки.

Вот соответствующий фрагмент моего Ant-файла для создания ветви Personal JAR-файла Codebox:

<target name="package" depends="compile"»

<echo message="Bυilding personal jar file"∕>

<jar jarfile="${jar-file}n basedir="$ {build} ,*>

<ιαanifest>

<attribute name="Built-By" value="${user. name}"/»

<section name="com∕elvenware∕comp∕ElflIstBox. class"»

<attribute name="Java-Bean" value="True"∕>

<∕section>

<section name="com∕elvenware∕comp∕clock∕ElfClock. class"» <attribute name="Java-Bean" value="True"/»

</section»

<∕manifest>

<∕jar>

<copy file="${jar-file}" todir="${jar-home}"

<∕target>

B этом файле обратите внимание на фрагмент, создающий сам JAR-файл:

<jar jarfile="${jar-file}" basedir="${build}">

примечаниеНиже этой строки вы найдете синтаксис для создания файла манифеста на лету. Полный ant-файл build. xml можно найти среди сопровождающих книгу материалов.

Build. xml — имя, присваиваемое по умолчанию файлу Ant. Благодаря этому запустить Ant-файл можно, просто перейдя в каталог, в котором он хранится, и на­брав ant. Для этого на вашей машине должен быть должным образом установлен Ant. Web-сайт Ant доступен по адресу Http://jakarta. apache. org/ant/index. html. Вы можете добавить файлы Ant в проекты JBuiIder Enterprise или же интегрировать их в JBuiIder в виде бесплатного OpenTooI-элемента.

Резюме

В этой главе вы научились работать с BeanInsight. Вы также узнали о способах со­здания JAR-файлов и добавления bean-компонента и пиктограммы в палитру ком­понентов.

Хочу предложить вам еще раз прочесть раздел о BasePaneiButton В главе 18; это даст вам возможность больше узнать о работе с технологией JavaBean-компонент. Также весьма настоятельно рекомендую просмотреть пример с BasePanelButton Он краткий, понятный и содержит немало исключительно полезной информации.

Часть Vlll

Базы данных

В этой части

38 Введение в программирование баз данных

39 Настройка баз данных

40 Подключение к базам данных с помощью JBuiIder

41 Основы работы с базами данных

42 Методы работы с базами данных

43 Стратегии разработки баз данных

44 Управление данными

45 SQL-запросы, параметризованные запросы, объекты Column и транзакции

Чарли Калверт

Глава 38

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *