Использование редактора

В

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

Однажды, когда я работал в Borland, меня отправили на конференцию, дабы я представил там JBuilder. В то время JBuilder только-только появился на рынке, и я знал о нем совсем немного. После отчаянных попыток найти хоть что-нибудь из того, чего я на самом деле понимал, я решил подробно рассказать о редакторе (и от­ладчике)’. К моему удивлению, доклад произвел сильное впечатление на многих асов использования текстового редактора и командной строки. Они не могли пове­рить, что в JBuilder такое возможно.

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

В этой главе представлены следующие темы:

■ Шаблоны кода.

■ Автоматическая вставка и оптимизация импорта

■ CodeInsight, MemberInsight и связанные с ними технологии.

■ Автоматическая вставка в программу нужных блоков try.. catch.

■ Введение в Javadoc — тема, более глубоко освещенная в главе 21.

■ Просмотр библиотек класса.

■ Настройка горячих клавиш.

Я начну с более простых средств, таких как шаблоны кода и настройка клавиату­ры. Разобравшись с ними, мы перейдем к самому главному — изучению CodeInsight и различным методам автоматизированной интеллектуальной вставки кода в исход­ные файлы. В конце главы будут рассмотрены некоторые мастера, автоматизирую­щие задачи, часто встречающиеся в текстовом редакторе.

Раскладка клавиатуры

При работе с новым редактором один из первых вопросов, который задают мно­гие разработчики, формулируется приблизительно так: "Поддерживает ли он при-

примечаниеВычные мне комбинации клавиш?" И второй часто задаваемый вопрос: "Настраива­ется ли в JBuilder раскладка клавиатуры?" К счастью, JBuilder поддерживает целое множество раскладок клавиатуры, и вы можете добавлять собственные раскладки, равно как перенастраивать уже существующие.

В раскладку клавиатуры входят и специальные комбинации клавиш, при­меняемые ь редакторе. Например, во многих редакторах комбинация Ctrl+V выполняет команду Paste (Вставить). Однако в разных редакторах существуют отличия между го­рячими клавишами, применяемыми для удаления символов, вырезания и вставки, сохране­Ния документов и т. п. Управление этими отличиями и является темой данного раздела.

Первое, что необходимо узнать — как выбрать наиболее удобную для себя рас­кладку клавиатуры. В JBuilder выберите пункт меню Tools ∣ Editor Options и перейди­те на страницу Editor. Раскройте выпадающий список Keymap, как показано на рис. 7.1, и вы увидите список доступных раскладок: CUA, Brief, Emacs, Macintosh, Macintosh Code Warrior и Visual Studio

Справа от поля раскладки находится кнопка настройки Customize. Щелкните на ней, если хотите настроить комбинации клавиш для своего редактора. А еще это один из лучших способов узнать, какие комбинации клавиш доступны в вашем ре­дакторе. По-другому это можно сделать, выбрав пункт меню Help ∣ Keyboard mappings.

Для изменения какого-то одного значения выберите его в диалоговом окне Keymap Editor и щелкните на кнопке Add. Появится новое диалоговое окно, пока­занное на рис. 7.3. При использовании этого редактора лучше всего выбирать тип события Key Pressed. Затем вы можете просто нажать те клавиши, которые хотите использовать, a JBuilder автоматически их запишет.

msnment,,18 backups,baekupievel,editor opbons,κeymap: jcu⅜
∣brlθf
block indent lm-
,emacs
macintosh
macintosh codewanior visual studio
,∣ ffi ⅛j smart key options ♦| indentoptlons
i vs- ® dlsplayoptlons j si b saveoptlons bs ⅛⅛ search options 'fi a> brace match options ki -o error options
,javasructutej,custombe..,рис. 7.1. выбор раскладки клавиатуры,resat xf,∑2∑-2~zac. -
b'ʃ , ⅛aoni.
pasie-from-c iipboard i ι⅛... .l.l⅛
∣" keyarow
⅛mwjnm∏ 3
codelnsighi 
it∣Λo-ι∏∙i<j∙.l ctp∙Λ∣t∣h 3
’class-insight ictrhaihspace 
i member-insight^ ∣ctrhh 
1 member-insight ctrhscace 
pjrameter-insight tctrhshiihspace l
я parameter-insight tcirhshiihh
.ɪ 
i debug-add-watcr i 
1 debug-enab∣e-breakρoιn∣ ⅛
i debug-evaluate-modrfy 
s riehιιπ-naιικn j lɪ

,'∣)Γua keyniep editor,remo∙τ,add...,рис. 7.2. работа в редакторе раскладки клавиатуры. здесь можно увидеть и изменить настройки горячих клавиш

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

Если выбрана уникальная комбинация кла­виш, то внизу диалогового окна появляется сообщение "No conflicts" ("Конфликты отсут­ствуют").

В JBuilder вы можете полностью перенаст­роить комбинации клавиш, создав свой соб­ственный подключаемый модуль OpenTools.

В поставке JBuilder в каталоге Samples/

OpenTools Есть два примера реализации назначения раскладок с помощью OpenTools.

Создание своего собственного назначения клавиш — процесс простой, хотя и утомительный. Вот пример кода создания одного назначения:

New KeymapManager.KeyActionBinding(Keystroke.GetKeyStroke(

KeyEvent. VK_O,

Event. CTRL_MASK),

BrowserFileACTIONFileOpen),

Можно создать и свои собственные действия при нажатии клавиш. Для этого нужно владеть техникой написания макросов. Обратитесь к примеру UserEmacsActions.Java (к сожалению, довольно-таки сложному), который объяс­няет, как это делать. Другой пример, поставляемый с продуктом, UsercUA, Мало по­могает в настройке действий, однако он предлагает гораздо более простой шаблон для создания собственных раскладок клавиатуры.

JBuiIder и макросы

примечаниеКонечно, для программистов разработано множество мощных редакторов. В не­которых из них, наподобие emacs и Visual Slick Edit, присутствует относительно простой встроенный макроязык, дающий возможность, которая может быть достиг­нута в JBuilder лишь с помощью использования библиотек OpenTools, как было описано в предыдущем разделе. Программный интерфейс OpenTools великолепен, но многие разработчики считают его слишком сложным для разработки макросов.

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

Если вам все же необходим макроязык, просто работайте в JBuiIder с emacs, Visual Slick Edit или каким-нибудь другим инструментом, как описано в разделе "Добавление в сис­тему меню JBuiIder инструментов независимых разработчиков" главы 5. Эта тема будет упомянута в данной главе еще раз, в разделе "Интеграция с emacs и другими редакто­Рами".

Существует, по крайней мере, одна бесплатная реализация макросов с помощью OpenTools. Этот инструмент разработан Люком Гуттеманом (Luke Hutteman), и его МОЖНО Выгрузить ПО Адресу Http://Codecentral.Borland.Com/Codecentral/ Ccweb.Exe/Listing?Id=15582.

Насколько мне известно, этот инструмент не предоставляет возможности напи­сания сценариев и не сохраняет созданные макросы. Однако он может повторять последовательности нажатий клавиш. Эта возможность была встроена и в более ран­ние версии JBuilder.

Шаблоны кода

примечаниеШаблоны кода — это простой, но полезный механизм вставки фрагментов кода непосредственно в исходные файлы. Для эффективного использования JBuilder не­обходимо знать хотя бы некоторые из этих шаблонов.

Шаблоны кода являются технологией, более простой для понимания, не­Дели Codelnsight. Тем не менее, иногда требуется именно простое решение.

Технология, лежащая в основе шаблонов кода, расширяема и легка для понима­ния. Шаблоны кода позволяют напечатать сокращение команды, а потом развер­нуть его, нажав Ctrl+J. (Горячая клавиша может быть и другой, если вы используете нестандартную раскладку клавиатуры, но чаще всего применяется Ctrl+J.)

Если вы введете текст ifb, и затем нажмете комбинацию клавиш Ctrl+J, в про­грамму будет вставлен следующий код:

If О

{

}

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

Если вы напечатаете слово if и нажмете комбинацию клавиш Ctrl+J, откроется окно CodeInsight, как показано на рис. 7.4.

Fori

Fore

For loop with iterator

1 or (no braces)

Ifb

If statement _________ H

Ife

If else

ɪfi

If else if ηj

Ifie

If else if else

Ife

If statement (no braces)

.rp

import ^statements

Рис. 7.4. Выбор из списка шаблонов кода с помощью CodeInsight

Посмотрев на опции в окне CodeInsight, вы наверняка заметите, что у вас есть возможность использования нескольких различных операторов if. Например, тот, который называется ifie, выглядит так:

If О

{

I

Else if ()

{

)

Else

{

I

А шаблон forb развертывается в такой код:

For (; ; )

{

)

У многих команд есть b-версия и S-версия. Например, есть команды forb и fors, ifb и ifs. Версии с буквой ь содержат фигурные скобки, как в предыдущем приме­ре, а в версиях с буквой s их нет:

примечаниеFor (; ; )

Я думаю, что "Ь" значит "braces" ("фигурные скобки"), a "s" — "short" ("короткая"), но вряд ли это где-то документировано.

Среди других полезных опций есть сокращение sys, вставляющее следующий код:

System. err. println(""); и сокращение tryc, разворачивающееся в

Try

{

I

Catch (Exception ex)

(

I

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

Classp Вставка общедоступного класса.

Err system. err.ρrintln.

Forb Оператор for с фигурными скобками.

Ifb Оператор if с фигурными скобками.

ɪfe Оператор if-else с фигурными скобками.

Imp Наиболее популярные операторы импорта

Iter Использование итератора при работе с контейнерами,

Main Оператор main.

SWitchs Оператор switch без опции по умолчанию.

Switchd Оператор switch с опцией по умолчанию.

AddXXX addaction вставляет ActionListener, addawt вставляет AWTEventListener И Т. Д.

Todo ∕** θtodo */.

Tryc БЛОК Try-catch.

Tryf Блок try-catch-finally

примечаниеWhileb Блок while с фигурными скобками.

Тщательное изучение любого инструмента требует определенных уси­лий. Сначала это раздражает, но необходимо останавливать себя и не печатать вручную операторы if, for или while. При наличии шаблонов кода ввод текста,,Systern, err. printin» — совершенно лишняя трата времени. Вместо этого нужно лишь ввести "sys" и нажать комбинацию клавиш Ctrl+J. В дальнейшем это сэкономит вам много времени.

Выбрав пункт меню Tools ∣ Editor Options ∣ Templates, вы можете увидеть все дос­тупные шаблоны кода и их сокращения.

При необходимости здесь же можно добавить и новые шаблоны. Например, можно добавить шаблон с именем sysout, который будет вставлять текст "System. out.Println()". Я не буду рассказывать о процессе добавления нового шаблона, поскольку он, хотя и очень важен, все-таки вполне интуитивно понятен.

Установка позиций табуляции

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

JBuilder ведет себя в этих вопросах достаточно интеллектуально. Выберите пункт меню Tools I Editor Options и перейдите на страницу Editor. Если вы хотите использо­вать позиции табуляции, в каждой из которых будет по четыре пробела, установите значения Block Indent (Величина отступа) и Tab (Табулостоп) равными 4. Откройте страницу Indent Options (Опции отступа) и отметьте позиции Smart indent (Интеллек­туальные отступы) и Use tab character (Использовать символы табуляции).

Затем перейдите к опциям сохранения и выберите опции Strip trailing white space (Удалять пробелы в конце строки) и Change leading spaces to tabs (Заменять ведущие пробелы табуляцией). Последняя опция — это исключительно мощное средство, га­рантирующее, что вы не вставите нечаянно пробелы туда, где требуются символы та­буляции.

Я не буду утомлять вас подробным объяснением, как достичь обратного эффекта, ъыбрав противоположные опции. Просто отметьте для себя, что существует опция Change leading tabs to spaces

Ниже опций соответствия скобок (Brace match Options) выберите опции Generate closing curly brace (Вставлять закрывающие фигурные скобки) и Enable brace match highlighting (Включить подсвечивание парных фигурных скобок).

В общем, вы обнаружите, что многие опции, расположенные на странице Editor данного диалогового окна, исключительно полезны. Для некоторых разработчиков могут оказаться особенно полезными опции интеллектуальных клавиш Например, если вы включите опцию Smart home key, то при нажатии на клавишу Ноте курсор будет устанавливаться перед первым отличным от пробела символом строки, а не в самом начале строки.

Установка возвратов каретки и переводов строки

Как уже упоминалось ранее, вы можете настроить JBuilder на использование возвратов каретки и переводов строки в стиле UNIX, Windows или Macintosh. Либо, если хотите, можете автоматически принять стиль, принятый в текущем файле. Вы­берите пункт меню Project ∣ Project Properties, перейдите на страницу Editor и устано­вите требуемые вам опции.

Подсветка ошибок

Если JBuilder версии 7 и выше обнаруживает в вашем коде ошибки, он подчерки­вает их красным — так же, как Microsoft Wbrd подчеркивает синтаксические ошиб­ки. Если вы подведете к такому месту курсор, то сможете получить подсказку, Что Здесь не так. Эти ошибки также будут отображены в панели структуры.

Подчеркивание ошибок особенно полезно, поскольку оно напоминает вам, что в коде что-то не так. Если вы являетесь опытным разработчиком, то вам будет доста­точно увидеть подчеркнутое место, дабы понять, в чем состоит та или иная ошибка.

Автоматическая вставка блоков Try..catch

Если в JBuilder версии 7 и выше щелкнуть правой кнопкой мыши на коде, кото­рый требуется оформить в блок try..catch, то JBuilder автоматически вставит необходимый код. Обычно вид операторов, которые необходимо перехватывать, оп­ределяется автоматически, и в код вставляется нужный тип. То есть, если вам требу­ется вставить оператор catch (IOExceptionex), то JBuilder не вставит catch (Exception ex).

Как это работает, лучше посмотреть на примере. Допустим, что вы ввели следую­щий код

File f = new File("с:\\sam. txt") ; If (f. CreateNewFile());

Если щелкнуть правой кнопкой мыши на CreateNewFile И выбрать соответству­ющий пункт меню, JBuilder автоматически вставит следующий код:

File f = new File(‘,c:∖∖Sam. txt") ; try <

If (f. CreateNewFile());

)

Catch (IOException ex)

{

}

Ввод операторов импорта с помощью JBuiIder

A>*

________________ packaα Е|Л

J8 Applet

Package

⅛lawt

Package

Id) beans

Package

Jblio

Package

Al Iang

Package

Jtlmath

Package

Jdlnet

Package ‘^

D) rmi

Package

Jbl security

Package »

рис. 7.5. всплывающий список, появляющий-ся при вводе оператора импортаЧасть CodeInsight предназначена для вставки операторов импорта. Например, если вы напечатаете import. java., то, как показано на рис. 7.5, JBuilder автома­тически отобразит список классов, кото­рыми можно завершить этот оператор.

Список, показанный на рис. 7.5, не содержит все классы, доступные на ва­шем пути класса. Скорее, это интеллек­туально отфильтрованный список, пока­зывающий только те доступные классы, которые могут быть использованы в данном контексте. Например, если вы напеча­таете import. java., то вы увидите все классы или пакеты в пакете (каталоге) java, но среди них не будет ни одного из пакетов com, javaχ или других.

При вводе длинных операторов импорта необходим определенный ритм. Допус­тим, вам нужно набрать текст "import com. elvenware. codebox. FilePath". Для ввода этой строки сначала наберите import. com. (не забывайте набирать точку в конце операто­ра). Затем немного подождите, и CodeInsight выдаст список, подобный показанно­му на рис. 7.5. Выберите из этого списка требуемый элемент. Теперь код выглядит так: "import com. elvenware". Введите точку, и JBuilder снова выдаст список, аналогич­ный приведенному на рис. 7.5, однако отфильтрованный в соответствие с новым пакетом. Выберите из списка нужный вам элемент, чтобы код выглядел так: "import com. elvenware. codebox". Теперь введите еще раз точку и продолжайте таким же обра­зом дальше. Как я говорил, этому процессу присущ определенный ритм, и если вы попадете в этот ритм вместе с JBuilder, то сможете очень быстро заполнять даже очень длинные и сложные операторы импорта

Механизм шаблонов кода позволяет легко вставлять большинство разделов им­порта, которые могут понадобиться в программе. Просто напечатайте imp и нажми­те комбинацию клавиш Ctrl+J, чтобы ввести в программу следующие элементы:

import
import
import
import
import
import
import
import
Javax. swing.*; javax. swing. event.*; javax. swing. text.*; java. awt.*;

Java. awt. event.*; java. util.*; java. text.*; java. beans.*;

По завершении создания программы щелкните на введенных операторах правой кнопкой мыши и выберите в контекстном меню пункт Optimize Import (Оптимизация импорта), чтобы убрать более не нужные операторы импорта. Опция Optimize Imports более подробно описана далее в этой главе.

Вообще-то данная технология является частью возможности MemberInsight сред­ства CodeInsight, но я посвящаю ей здесь целый раздел, поскольку лично считаю это отдельным средством. Если вы хотите отключить эту возможность, прочтите соот­ветствующие абзацы раздела "MemberInsight" данной главы.

Еще раз об операторах импорта

примечаниеJBuilder версии 7 и выше поддерживает автоматическую вставку операторов им­порта в исходные файлы. Если вы напечатаете оператор, который JBuilder не смо­жет распознать, он будет подчеркнут красным. Щелкните левой кнопкой мыши на подчеркнутом типе, и появится маленькое диалоговое окошко ClassInsight, состоя­щее из одной строки. Щелкните на пиктограмме с изображением лупы, и появится диалоговое окно Classlnsight. Часто в нем содержится лишь один элемент, который необходимо добавить к оператору импорта. Добавьте его, щелкнув на кнопке OK. Иногда может быть несколько элементов, а, возможно, для поиска требуемого опе­ратора импорта придется даже листать список. В любом случае это ускоряет добав­ление операторов импорта в проект.

Возможно, вам понадобится расширить путь класса, добавив в проект еще одну библиотеку. Как это сделать, описано в главе 27, в разделе "Установка пути Класса: библиотечные файлы JBuiIder".

Дабы апробировать эту возможность, начните новое приложение, как описано в главе 3. Перейдите в начало класса Fcamel и добавьте новое поле:

ArrayList list;

По умолчанию JBuilder не распознает класс ArrayList. Для добавления необхо­димых операторов импорта щелкните на слове ArrayList. Появится небольшое диа­логовое окно. Щелкните на пиктограмме с лупой, и появится диалоговое окно Classlnsight. В нем будет отображаться нужный оператор импорта: java. utiLArrayList. Вы можете выбрать один из трех вариантов:

java.util.arraylist.
java. util.*.
java.util.arraylist
list.Вставить оператор импорта import

■ Вставить оператор импорта import

■ Уточнить объявленную переменную:

Выберите нужный вам вариант и щелкните на кнопке OK.

Оптимизация импорта

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

Для оптимизации раздела импорта откройте свой Java-файл и щелкните на нем правой кнопкой мыши. В появившемся контекстном меню выберите пункт Optimize Imports (Оптимизация импорта). По умолчанию будут удалены все неиспользуемые операторы импорта. Давайте рассмотрим следующие операторы импорта, помещае­мый по умолчанию в начало аплета мастером создания аплетов:

Import java. awt.*; import java. awt. event.*; import java. applet.*;

Если вы ничего не вставите в Java-файл, сгенерированный мастером, и примени­те Optimize Imports, то из раздела импорта будет выброшено все ненужное, и он бу­дет выглядеть так:

Import java. applet.*;

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

примечаниеHieaibieMiMaia gb∣ можете спросить, почему мастер создания аплетов JBuiIder вставля­ет ненужные операторы. Команда разработчиков JBuiIder отвечает, что они могут вам по­надобиться, и поэтому на всякий случай они включены в аплет. Возможность автомати­ческого удаления неиспользуемых частей блока импорта делает это решение команды Разработчиков менее критичным.

При использовании инструмента Optimize Imports все ссылки на различные клас­сы из одного пакета будут по умолчанию собраны в единый оператор. Рассмотрим оператор импорта, который я обозначу как вариант 1:

Import java. applet. Applet; Import java. applet. AppletContext;

После применения Optimize Imports с установками по умолчанию этот код будет преобразован в следующий оператор, который я обозначу как вариант 2:

Import j ava. applet.*;

Не все хотят, чтобы такая оптимизация происходила автоматически. Например, вы можете предпочесть работать с эвристикой, в которой говорится, что три явных ссылки на классы — это еще нормально, но если их четыре, то необходимо перейти на групповые символы. К счастью, в JBuilder имеется тонкая настройка инструмента оптимизации импорта.

Выберите пункт меню Project ∣ Project Properties и перейдите на страницу Import Style (Стиль импорта). Если вы выберете Always import classes (Всегда импортировать классы), то всегда будет использоваться первый из двух вышеупомянутых вариантов. Если вы не выберете эту опцию, то можно указать порог, после которого импорти­рование индивидуальных классов переключится на импортирование целых пакетов. Например, если установить порог равным 2 и импортировать один или два класса из пакетг Java. applet, Будет выбран вариант 1. Но если вы импортируете третий класс, то оператор импорта автоматически будет преобразован в формат 2, исполь­зующий групповые символы. Например, при пороге, равным двум, данный опера­тор импорта будет выглядеть так:

Import java. applet. Applet; import java. applet. AppletContext; import java. applet. Appletstub;

При пороге, равном 2, после использования Optimize Imports этот оператор будет преобразован следующим образом:

Import java. applet.*;

Рассмотрим еще такой оператор импорта:

Iιηport j ava. awt. event. *; Import java. awt. Point; import javax. swing.*; ɪmport gridworlds. entities.*; import gridworld. utils.* ;

При выбранной опции Always import classes применение Optimize Imports в неко­торых случаях может привести к преобразованию кода в следующий вид:

Import java. awt. Point;

ɪmport j ava. awt. event. KeyEvent;

Import gridworlds. entities. EntityBase;

Import gridworlds. entities. EntityList;

Import gridworlds. entities. Hero;

Import gridworlds. utils. TcoordinateConversion;

При невыбранной опции Always import classes и пороге, равном O или 1, этот же фрагмент после применения Optimize Imports преобразуется в

Import j ava. awt.*; Import java. awt. event.*; import gridworlds. entities.*; import gridworlds. utils.*;

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

Codelnsight

примечаниеСледующий раздел этой главы будет посвящен исследованию CodeInsight. Эта очень мощная возможность подсказывает, что вы можете напечатать дальше в теку­щем контексте. Как правило, CodeInsight зависит от замечательной возможности JBuilder компилировать код на лету. Но весь объем этой многогранной возможности станет понятным лишь по прочтении раздела целиком.

У меня были проблемы с Codelnsight под Linux с KDE 2.0. Если Codelnsight вообще не работает, попытайтесь переключиться в GNOME, или сменить ядро Linux на более современное, или перейти на KDE 3.0. Использовать эту возможность не особенно трудно. Она просто высвечивается при вводе кода, а если не высвечивается, то, стало быть, что-то не так. Скорее всего, поможет обновление до KDE 3.0.

Codelnsight успевает срабатывать даже на машине с процессором 500 МГц. Если он ра­Ботает медленно, то, по всей видимости, следует нарастить память.

Memberlnsight

Средство MemberInsight входит во все редакции JBuiIder. Оно отображает все ме­тоды, которые можно вызвать для конкретного объекта. Например, он может пока­зать все методы, принадлежащие классу JButton. В некоторых случаях показываемые методы могут быть отфильтрованы в соответствие с текущим контекстом. Напри­мер, если вы присваиваете строке некоторое значение, MemberInsight иногда пока­зывает только методы объекта, возвращающие строку.

Для использования MemberInsight напечатайте имя экземпляра класса, исполь­зуемого в вашей программе — например, jButto∩1 — и введите после него точку. Те­перь JBuilder автоматически выведет список членов класса, которые могут быть при­менены в данном контексте. Можно вызвать список и вручную, нажав Ctrl+пробел или Ctrl+H. (Чтобы это средство работало нормально, необходимо, чтобы вы имели дело с корректными именами переменных. Ошибка около курсора ввода приведет к отказу в работе этой возможности. Ясно, что для правильной работы MemberInsight необходимо исправить ошибки, после чего он будет функционировать нормально. MemberInsight может также работать неверно из-за синтаксических ошибок в коде программы: он не сможет правильно фильтровать доступные варианты.)

Если вы хотите отключить MemberInsight, выберите пункт меню Tools ∣ Editor Options и отключите опцию Auto popup Memberlnsight (Автоматическое срабатывание Memberlnsight). Это отключит возможность, описываемую в данном разделе, и ее можно будет вызвать только с помощью соответствующей горячей клавиши.

В этом же диалоговом окне вы можете установить длительность паузы, после ко­торой появляются варианты заполнения. Эта задержка зависит отчасти от вашей скорости печати и отчасти от вашего знания языка Java. Если вы печатаете быстро и великолепно разбираетесь в Java, то, возможно, вы сочтете, что MemberInsight лишь мешает вам. Если вы печатаете быстро, но не всегда знаете, какой метод данного объекта выбрать, то, видимо, лучше, чтобы эта возможность срабатывала после не­которой паузы, "вытягивая "которую вы даете знать, что не уверены в дальнейшем выборе. И так далее. Это настраиваемая возможность, и вы можете заставить ее ра­ботать так, как вам надо. Однако для большинства пользователей лучшими будут ус­тановки по умолчанию.

MemberInsight знает и о методах, которые вводите вы сами. Это не жестко зап­рограммированный набор правил, который можно применить только к JDK или за­регистрированным файлам. Любой код, который вы включите в свою программу, сразу же появится в MemberInsight — при условии, что вы ввели его корректно. При­чем проект не нужно компилировать или собирать.

Но иногда MemberInsight отказывается работать. Обычно это бывает из-за син­таксической ошибки либо в текущей строке, либо где-то недалеко от нее. Хотя если в одном методе и есть ошибка, то CodeInsight будет нормально работать с другими методами. Проблема обычно возникает недалеко от того места, где сделана ошибка.

Classlnsight

ClassI isight доступен во всех редакциях JBuilder. Для его вызова нужно нажать комбинацию клавиш Ctrl+Alt+пробел или Ctrl+Alt+H.

134

В редакции Personal эти клавиши вызы­вают браузер классов (Class Browser). В диа­логовом окне браузера классов вы можете найти требуемый объект и щелкнуть на кнопке OK. После этого JBuilder добавит в вашу программу оператор импорта для класса этого объекта и вставит имя объекта в позиции курсора ввода. Например, если вы выберете строку java ∣ io ∣ BufferedReader, то JBuilder создаст следующий оператор им­порта:

И

Se

MafehIngCiasses: JavajoBulTeredinputStream iava io BufferedOutputStream! JavaJoBufferedReader

DVj IijBuffeiedVVriter

⅛ JavajoByteArrayInputStream I JavajoByteArrayOutputStream

,SvaioCharArrayReader R Java JoCharArrayWriter

JavajocharconversionExceptInn j JavajoOataInput JavajoOataInputStream

. ¾.i.4MΛ¾.in..n………. .

Import java. io. BufferedReader;

А в позиции курсора ввода появится иден­тификатор BufferedReader.

В редакциях SE и Enterprise комбинации клавиш Ctrl+Alt+пробел или Ctrl+Alt+H вызовут другое диалоговое окно, которое на­зывается Classlnsight (оно показано на рис.

7.6). При вводе информации в поле Search

ГO∣rtfonsiτ^^

I ⅛

F Insertshortctasshame wttti explicit import C Insert short class name wɪth package Ifnport Г Insert fully qualified class name

Cancel

Help I

Рис. ТА. Диалоговое окно ClassInsight

For text (Поиск текста) в верхней части этого диалогового окна JBuilder найдет в пути класса классы, соответствующие введенному тексту.

В этом диалоговом окне имеется несколько опций. Выбор первой опции приве­дет к такому же результату, что и диалоговое окно Class Browser в редакции Personal: JBuilder создаст оператор импорта Import java. io. BufferedWriter, А в позиции курсора ввода появится имя вашего класса BufferedWriter. Вторая опция — Insert short class name with package import (Вставка короткого имени класса с импортом паке­та) — импортирует пакет, в котором находится ваш объект. Например, если вы вы­берете BufferedWriter, оператор импорта будет таким:

Import j ava. io.*

В позиции курсора ввода появится BufferedWriter. При выборе опции Insert fully qualified class name (Вставка полного имени класса) JBuilder не будет генерировать оператор импорта, а в позиции курсора ввода появится полное имя класса вашего объекта:

J ava. io. BufferedWriter

Parameterlnsight

Средство ParameterInsight присутствует во всех редакциях JBuilder. Если вы в ре­дакторе напечатаете имя существующего метода, а за ним левую скобку, то появится окно ParameterInsight. Для примера откройте Applicationl. java В элементарном приложении JBuilder. Найдите метод конструктора Applicationl. (Этот метод на­чинается прямо под комментарием "∕∕ Construct the application".) Дойдя до конца этого метода, вы увидите такую строку кода:

Frame. SetVisible(true);

untitted83.frame1irrt pθ, int р1, int p2, int рзrectangle роСразу под этой строкой введите Frame. SetBounds(

рис. 7.7. parameterinsight
автоматически появляется при нажатии ctrl+shift+пробел или при вводе открывающей скобки после имени переменной
Как только вы напечатаете левую скобку, появится всплывающее окно с параметрами этого метода, как по­казано на рис. 7.7. Поскольку этот метод перегружен, существует две версии параметров.

Каждая строка окошка содержит отдельный набор параметров, подходящий для вызываемого метода. В верхней строке подсвечено int рО. Когда вы введете це­лое число, JBuilder подсветит int р1, показывая, что теперь надо вводить этот пара­метр. И так будет продолжаться, пока вы не заполните все параметры вызова этого метода.

Поиск определения

Поиск определения находит определение элемента кода Это легко продемонст­рировать с помощью только что открытого элементарного приложения. Откомпи­лируйте проект и затем найдите в Framel, в разделе jblnit(), следующую строку кода:

ContentPane. SetLayout(BorderLayoutl);

Подведите курсор к слову ContentPane и нажмите Ctrl+Enter. Курсор переместит­ся к строке, которая содержит

JPanel ContentPane; Теперь найдите строку

System. exit (O);

Подведите курсор к слову System и нажмите Ctrl+Enter. JBuilder откроет новую закладку с именем System, на которой находится документация и исходный код для метода Exit Класса System Это же средство можно активизировать, щелкнув пра­вой кнопкой на имени нужной переменной и выбрав пункт меню Find Definition (По­иск определения).

Поиск ссылок

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

Чтобы найти эту информацию в справочном help-файле, найдите первую строку объявления класса Framel, Которая выглядит следующим образом:

Public class Framel extends JFrame

Как ранее, подведите курсор к слову JFrame и щелкните на нем правой кнопкой мыши. Появится всплывающее меню. Выберите в нем пункт Find Definition (Поиск определения). В панели содержимого появится исходный код JFrame. Выберите в закладках просмотра файла закладку Doc. Вы увидите Javadoc-документацию для Класса JFrame. В самом ее начале находится иерархия класса JFrame.

В редакциях SE и Enterprise существу­ет и другой способ увидеть иерархию на­следования Framei. Как и ранее, перей­дите в начало файла Framel. java И щел­кните правой кнопкой мыши, но на это раз на слове Framel. В появившемся меню выберите пункт Find References (Поиск ссылок). После этого в панели со­общений появится информация о Framei, Показанная на рис. 7.8, в том числе и список всех предков этого класса.

Узел References можно развернуть и увидеть кое-что об "истории" этого объекта, как показа­но на рис. 7.9.

Интеграция с панелью структуры

a4t referencesto classjavaxswingjframe it § ancestors ⅛ ⅛ descendants ⅛-∙ type references s ⅜ descendents type references й--♦ member references ⅛--⅜ descendents member referencesрис. 7.8. узлы в панели сообщений после выбора пункта меню find referencesВозможно, одной из наиболее мощных воз­можностей редактора JBuilder является его ин­теграция с панелью структуры. Если вы добавите в какой-либо класс член данных или метод, он автоматически появится в панели структуры. И наоборот, если вы щелкнете на члене данных или методе в панели структуры, то в исходном файле вы попадете на объявление этого метода или переменной.

e сд references to class javax,swing jframe ⅜- § ancestors
e3 serializable 3'd imageobsetver s3 rootpanecontainer бз menucontainer s3 accessible s3 windowconstants r? object ъ component container window frame
t# descendants φ- ∙ type references ⅛~⅜ descendentstype references й v member references s-⅜∙ descendents member references рис. 7.9. узлы ancestors (предки)
Если во время набора кода в редакторе вы вводите что-нибудь, что не компили­руется, обычно вверху панели структуры появляется узел ошибки. Часто, если раз­вернуть этот узел, можно увидеть объяснение сделанной ошибки. Этот процесс мо­жет сэкономить немало сил, указывая на ошибки еще до компиляции.

В исходный код JBuilder можно также вставить элементы todo (заметки на буду­щее), которые будут появляться в виде узлов вверху панели структуры. На различ­ных узлах todo на панели структуры можно щелкнуть мышью и таким образом пере­меститься сразу же в ту часть кода, которая должна быть изменена. Чтобы добавить в панель структуры заметку todo, напечатайте в исходном файле что-то вроде

∕** @todo Элемент todo */

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

примечаниеЕсли вы напечатаете чепуху вроде j Buttonl. asdf() ; то у JBuiIder не будет претензий к синтаксису, но он не знает метода asdf () для jButtonl. В этом случае Ошибочный текст будет подчеркнут красным, а в панели структуры появится узел ошибки.

Строки ресурсов

C помощью мастера создания строк ресурсов можно создать Привязки ресурсов (resource bundles — также Пакеты ресурсов или Группы ресурсов), содержащие строки и другие элементы кода. Одно из предназначений этих привязок состоит в упроще­нии интернационализации или локализации кода. Вместо жестко встроенных в проект сообщений, в эти привязки ресурсов может быть включен перевод сообще­ний на другой язык. Кроме того, привязки ресурсов могут содержать и другие эле­менты, например, пиктограммы. Это позволит дополнительно подстраивать проект под различные группы пользователей. Если вы заинтересовались привязками ре­сурсов, прочитайте в части VIII главы о базах данных, где привязки используются для хранения строк SQL-запросов.

Мастер создания строк ресурсов присутствует только в редакциях SE и Enterprise.

Перекрытие методов

Мастер перекрытия методов, существующий в редакциях SE и Enterprise, предо­ставляет простой и изящный способ перекрытия методов суперкласса. Перед запус­ком этого мастера необходимо выбрать класс, в который должен быть вставлен ме­тод. Выберите класс, щелкнув на нем в панели проекта.

Когда класс, который вы хотите изменить, будет подсвечен, выберите пункт меню Wizards ∣ Override Methods. После запуска мастера изменить выбор класса не­возможно, можно лишь закрыть мастер и выбрать в панели проекта другой файл.

В мастере присутствует флажок перекрытия всех нереализованных абстрактных методов (АН abstract methods). По умолчанию он отмечен. Но обычно не требуется перекрывать все методы, присутствующие в дереве наследования, иначе придется вставлять в код десятки новых методов. Поэтому лучше с самого начала убрать от­метку с этого флажка.

После отказа от опции перекрытия всех методов следующий шаг состоит в выбо­ре методов, которые необходимо перекрыть. В окне мастера отображается список наследуемых классов. При разворачивании какого-либо элемента списка выводятся все доступные методы, которые могут быть перекрыты в данном классе. Выберите метод, который вы хотите перекрыть и щелкните на кнопке OK. JBuilder создаст за­готовку этого метода и добавит элемент в список Todo С напоминанием о реализа­ции перекрытия данного метода. Например, если вам необходимо перекрыть метод SetBounds() Экземпляра класса Framel Вашего приложения, нужно в мастере выб­рать java. awt Component, открыть дерево и выбрать в нем setBounds(ιnt, int, int, int), как показано на рис. 7.10

Сгенерированный JBuilder код выглядит следующим образом:

Public void setBounds (int parml, int paπn2, int parm3, int parm4)

I

∕**0todo Override this java. awt. Component method*/ super. setBounds( parml, parm2, parm3, parm4);

I

£ *j
override method wkard
... .j-~, —,
select methods to override
all linirnplementeci abstract methods will be included wheh the checkboxlsselerted
seiectclass ∣frame1 avallabiemethods
⅝3⅝k⅞3fe⅛%/ ^""⅛-'>i~<⅛.~-' i-^j5ssaa≈,
г * repalnt(lo∏s)
♦ repalnt(long, i∏t, int. int, int) * requestfocuso
* resetgc0
⅜ reshape(lnt. int1 int int)
⅛ ∣ ⅜ tesize(dimension)
■ i > resιze(intl inf)
setbackground(coloi)
- у setbounds(rectanglp)
,r altabsiract methods,ietboundsuntl ml, ml, ιr∣tj,'∙, setcomponentonentation(componentonentation) setcursor(cursor)
* setdroptarget(droptarget)
⅜k r∙n⅜crr'sh∣od∕hθΛ∣Λ⅛Λ4 r.
,hl,cancel
рис. 7.10. мастер перекрытия методов

Реализация интерфейсов

Мастер реализации интерфейса доступен только в редакциях SE и Enterprise. Он предназначен для упрощения вставки интерфейса в код программы. Если вы хотите вставить интерфейс вручную, то в начало определения класса, сразу же после его имени, нужно поместить ключевое слово Implements И имя интерфейса После до­бавления интерфейса в класс необходимо определить все методы, входящие в ин­терфейс, используя типы возвращаемых значений и параметров, заданные в интер­фейсе. Это может оказаться весьма утомительным занятием. Мастер реализации интерфейса берет на себя значительную часть этой нудной работы.

Начните с элементарного приложения и выберите в панели проекта Framel. За­тем выберите пункт меню Wizards ∣ Implement Interface. В списке доступных интер­фейсов выберите java ∣ awt ∣ shape и щелкните на кнопке OK.

рис. 7.11. мастер реализации интерфейса > implement interface wtzard,callable interfaces ⅛i ρ⅛n, 4≈s л!

¾ PaintContext PrintGrAphics

<"⅛ SBWH ⅛ Stroke ∙1⅛ Transparency beans io

Iang

Math

Net

JBuilder сгенерирует полный скелет интерфейса, готовый для заполнения опре­делениями. В листинге 7.1 приведено элементарное приложение после вставки мас­тером кода интерфейса.

Листинг 7.1. Скелет кода методов интерфейса, сгенерированный мастером

Реализации интерфейса

Package untitled83;

Import java. awt.*;

Import java. awt. event.*;

Import javax. swing.*;

Import j ava. awt. geom. Rectangle2D;

Import j ava. awt. geom. Point2D;

Import j ava. awt. geom. PathIterator;

Import java. awt. geom. AffineTransform;

Public class Framel extends JFrame implements Shape {

JPanel contentPane;

BorderLayout LorderLayoutl = new BorderLayoutO ;

∕∕ Конструирование фрейма Public Framel() {

EnableEvents(AWTEvent. WINDOW_EVENT_MASK); try {

Jbɪnit() ;

1

Catch (Exception e) { e.ρrintStackTrace();

1

}

∕∕ Инициализация компонентов

Private void jbɪnit() throws Exception {

ContentPane= (JPanel) this. getContentPane();

ContentPane. SetLayout(borderLayoutl); this. setSize(new Dimension(400, 300)) ; this. setTitle("Frame Title");

)

∕∕ Перекрыт, стало быть, можно выйти при закрытии окна Protected void processWindowEvent (WindowEvent e) {

Super. processWindowEvent(e);

If (e. getID() == WindowEvent. WINDOW_CLOSING) {

System. exit(O);

}

1

Public Rectangle2D getBounds2D() {

∕**βtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedoperationException(

"Method getBounds2D () not yet implemented. ") ;

)

Public boolean contains(double parml, double parm2) {

∕**βtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedOperationExceρtion(

"Method contains () not yet implemented.") ;

)

Public boolean contains(Point2D parml) {

∕**θtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedoperationExceptionC "Method contains () not yet implemented.,,) ;

}

Public boolean intersects(double parml, double parm2, double parm3, double parm4) {

∕**gtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedOperationException(

"Method intersects () not yet impIemented. ") ;

}

Public boolean intersects(Rectangle2D parml) (

∕**θtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedoperationException(

"Method intersects () not yet implemented.,,) ;

}

Public boolean contains(double parml, double parm2, double ρarm3, double parm4) {

/**0todo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedOperatiOnException(

"Method contains() not yet implemented,") ,

)

Public boolean contains(Rectangle2D parml) {

∕**θtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedoperationExceptionC "Method contains() not yet implemented.");

}

Public PathIterator getPathlterator(AffineTransform parml) {

∕**θtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedoperationException(

"Method getPathlterator() not yet implemented.");

)

Public PathIterator getPathlterator(AffineTransform parml, double parm2) {

∕**gtodo Implement this java. awt. Shape method*/ throw new java. Iang. UnsupportedOperationException(

"Method getPathlterator() not yet implemented.") ;

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

Интеграция с Emacs и другими редакторами

C помощью подменю Configure Tools меню Tools можно достаточно эффективно интегрировать сторонний редактор в процесс редактирования JBuilder. Перечитайте раздел "Добавление в систему меню JBuilder инструментов сторонних производите­лей" в главе 5.

C помощью техники, описанной в указанном разделе, можно существенно уве­личить мощь JBuilder. Например, для редактирования HTML-документа я могу выз­вать Homesite или Dreamweaver. C помощью JBuilder я выбираю и просматриваю до­кументы, однако редактирую их в Homesite. Также довольно часто в JBuiIder я при­меняю Visual Slick Edit. При закрытии стороннего редактора JBuilder автоматически изменяет исходный файл для отражения произведенных в нем изменений. (По крайней мере, так он делает в Windows. В Linux эта возможность в некоторых дист­рибутивах работает, а в некоторых — нет.)

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

Чтобы пометить строки кода в своей программе, можно воспользоваться заклад­ками. К помеченным строкам можно вернуться с помощью простой комбинации клавиш. Одновременно можно установить до десяти закладок.

Для установки закладки нажмите Ctrl+Shift +x, где х — цифра от О до 9. Для пере­хода к закладке нажмите Ctrl+x, где х — та же цифра.

Доступ к Javadoc-документации

Javadoc — это механизм документирования классов, разработанный компанией Sun. Он является основным средством, применяемым для документирования SDK. Подробное объяснение, как применять и конфигурировать Javadoc, будет приведе­но в главе 21. Здесь я лишь расскажу, как средство Javadoc интегрируется в создавае­мый код.

Просмотр Javadoc-документации с помощью клавиши F

Одним из наиболее мощных аспектов редактора JBuilder является его способ­ность дать практически мгновенный доступ к библиотекам Java-классов. Чтобы уви­деть, как это работает, создайте элементарное приложение. Если вы не помните, как создавать элементарное приложение, обратитесь за подробными инструкциями к главе 3. Найдите в файле Fraxnel. java Строку со словами Public class Fraxnel extends JFrame. Подведите курсор к слову JFrame и нажмите клавишу Fl. Появит­ся окно, содержащее Javadoc-документацию для класса JFrame. Обратите внимание, что эта документация представлена в виде HTML-документа, содержащего ссылки, по которым можно переходить в интересующие места.

Если подвести курсор к другим словам, таким как public, class или extends, для них также будут появляется окна с документацией. Вообще говоря, если у вас по­явится вопрос, как работать с тем или иным компонентом, вы, возможно, сможете получить ответ, вставив этот компонент в свой проект и затем нажав Fl для про­смотра документации.

Просмотр Javadoc-документации с помощью закладок просмотра файлов

Если вы имеете дело с JBuilder редакции SE или Enterprise, вы можете создавать HTML-файлы Javadoc, отображаемые в панели Doc, с помощью мастера создания Javadoc-документации. Подробно применение этого мастера описано в главе 21. Но если вы ? отите уже сейчас слегка прочувствовать эту возможность, выберите пункт меню Wi2ards ∣ Javadoc. После запуска мастера Javadoc щелкните на кнопке Finish. Затем щелкните правой кнопкой мыши на стандартном объекте Doclet, подвившем­ся в панели проекта и выберите в контекстном меню пункт Make. В панели Doc по­явится Javadoc-документация.

Если у вас JBuilder редакции Personal, вы сможете пользоваться панелью Doc, но не мастером. Поскольку Javadoc является частью Java JDK, то создать документацию можно, запустив в командной строке утилиту создания Javadoc. Как это сделать, описано в главе 21. Главное не забыть запустить эту утилиту так, чтобы ее вывод по­пал в каталог, указанный для вашего проекта на странице Documentation диалогового окна Project Properties. Например, если ваш проект называется untitled39, перейдите в корневой каталог этого проекта и введите в командной строке

Javadoc — d doc — sourcepath arc untitled39

После создания документации она будет отображена в панели Doc.

Javadoc-файлы для классов JDK можно автоматически просматривать в панели Doc. Например, перейдите в начало экземпляра Framel и подведите курсор к слову JFrame в объявлении объекта. Щелкните на нем правой кнопкой мыши и выберите пункт меню Find Definition (Поиск определения). Появится исходный код JFrame. Щелкните на закладке Doc, и вы увидите документацию Javadoc. Техника, описан­ная здесь, представляет собой вариант техники, предложенной в предыдущем раз­деле этой главы Преимущество этого второго способа состоит в том, что с его помо­щью можно просматривать и исходный код, и Javadoc-документацию класса JFrame. C помощью предыдущего способа можно увидеть только Javadoc-докумен — тацию.

Просмотр Javadoc-документации из распакованного JAR-файла

Иногда удобнее работать с документацией, отображаемой не в JBuilder, а в от­дельном окне. В главе 21 описано, как с помощью JBuilder автоматически просмат­ривать Javadoc в отдельном браузере, а не внутри IDE.

Поиск ошибок после компиляции

Последняя тема, которую я хотел бы затронуть, — это обнаружение ошибок и предупреждений в вашем коде после компиляции исходного текста. В некоторых (конечно, крайне редких) случаях оказывается, что введенный вами код содержит ошибки. После компиляции JBuilder выдает в панели сообщений список ошибок и предупреждений, обнаруженных в исходном файле. Вы можете щелкнуть на любой такой строке, и JBuilder сразу же покажет место в исходном файле, вызвавшее это сообщение.

Также можно выбрать любую ошибку или предупреждение в панели сообщений и нажать клавишу Fl — появится справочный файл по всем сообщениям об ошиб­ках. На этом экране справки можно быстро отыскать нужную ошибку Честно гово­ря, справочный файл не всегда так подробен, как хотелось бы, но, по крайней мере, он хотя бы дает представление о том, что же неверно. Хотя в некоторых случаях встречаются поистине великолепные объяснения.

Резюме

Редактор JBuilder содержит множество инструментов, крайне полезных при на­писании кода. Среди рассмотренных нами возможностей — Codelnsight, Javadoc, некоторые мощные мастера, различные опции настройки внешнего вида среды и комбинации клавиш. JBuilder был разработан программистами, которые могли пре­дусмотреть, какие средства будут наиболее полезными для других программистов. Это среда, дающая полный и легкий доступ к Java JDK. Время, потраченное на его тщательное изучение, окупится сторицей.

В этой короткой главе не было возможности описать все возможности редактора. Но все же большая их часть здесь описана

Да, и еще: может быть, самое потрясающее в JBuilder то, что он полностью напи­сан на Java. Если еще кто-то не верит, что Java является мощным инструментом, то десять минут пользования этим продуктом переубедят его полностью. Это красивая программа, а безупречная производительность и быстрая реакция редактора явля­ются несомненной заслугой языка Java. Многие возможности редактора просто вос­хищают меня, хотя отладчик является не меньшим шедевром

Часть

Язык Java

В этой части

8 Основы языка Java: классы, методы и интерфейсы

9 Простые типы

10 Операторы, выражения и ключевые слова

11 Циклы, операции и тип данных Currency

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

Глава 8

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

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