Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8423 / 658 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 2:

Объектно-ориентированное проектирование и платформа NetBeans

2.7. Структура проекта NetBeans

Рассмотрим, из каких частей состоит проект NetBeans. На рисунке показаны основные элементы, отображаемые в среде разработки.

Это Source Packages (пакеты исходного кода), Test Packages (пакеты тестирования), Libraries (библиотеки) и Test Libraries (библиотеки поддержки тестирования). Ветви дерева представления элементов проекта можно разворачивать или сворачивать путем нажатия на узлы, отмеченные плюсами и минусами. Мы пока будем пользоваться только пакетами исходного кода.

В компонентной модели NetBeans пакеты приложения объединяются в единую конструкцию – модуль. Модули NetBeans являются базовой конструкцией не только для создания приложений, но и для написания библиотек. Они представляют собой оболочку над пакетами (а также могут включать в себя другие модули).

В отличии от библиотек Java скомпилированный модуль – это не набор большого количества файлов, а всего один файл, архив JAR (Java Archive, архив Java). В нашем случае он имеет то же имя, что и приложение, и расширение .jar : это файл JavaApplication1.jar. Модули NetBeans гораздо лучше подходят для распространения, поскольку не только обеспечивают целостность комплекта взаимосвязанных файлов, но и хранят их в заархивированном виде в одном файле, что намного ускоряет копирование и уменьшает объем занимаемого места на носителях.


Рис. 2.11.

Отметим не очень удобную особенность NetBeans – после сохранения проекта и закрытия среды разработки не сохраняется конфигурация открытых окон и развернутых деревьев проекта - деревья проектов показываются в свернутом виде. Поэтому для того, чтобы вновь попасть в режим редактирования исходного кода нашего приложения, в окне Projects, "Проекты" (левом верхнем окне среды разработки) следует развернуть последовательность узлов JavaApplication1/Source Packages/javaapplication1/. Это делается нажатием на плюсики в соответствующих узлах или двойным щелчком по имени узла. Затем надо сделать двойной щелчок с помощью левой кнопкой мыши по имени узла Main.java, либо с помощью щелчка правой кнопкой мыши по этому имени открыть всплывающее меню и выбрать в нем первый пункт"Open".

Имеется и более простой способ. По умолчанию сначала открывается окно Welcome ("Привет", "Приветствие"). Но среда разработки сохраняет список открытых окон, и в верхней части окна редактирования кода щелчком мыши можно выбрать нужное имя окна. Хотя при этом не видна структура проекта, так что первый способ во многих случаях может быть предпочтительным (однако, вы можете увидеть открытый файл в структуре проекта, если нажмёте ctrl+shift+1).

Если вы открываете новый проект, старый не закрывается. И в дереве проектов видны все открытые проекты. То же относится и к списку открытых окон. Это позволяет работать сразу с несколькими проектами, например – копировать в текущий проект участки кода из других проектов. Один из открытых проектов является главным ( Main Project ) – именно он будет запускаться на исполнение по Run/ Run Main Project. Для того, чтобы установить какой-либо из открытых проектов в качестве главного, следует в дереве проектов с помощью правой кнопки мыши щелкнуть по имени проекта и выбрать пункт меню Set Main Project. Аналогично, для того, чтобы закрыть какой-либо из открытых проектов, следует в дереве проектов с помощью правой кнопки мыши щелкнуть по имени проекта и выбрать пункт меню Close Project.

Рассмотрим теперь структуру папок проекта NetBeans. По умолчанию главная папка проекта располагается в папке пользователя. В операционной системе Windows® XP проект по умолчанию располагается в папке C:\Documents and Settings\ИмяПользователя\. Дальнейшее расположение папок и файлов приведено ниже, при этом имена папок выделены жирным шрифтом, а имена вложенных папок и файлов записаны под именами их головных папок и сдвинуты относительно них вправо.

build
  classes
    javaapplication1
      Main.class
      … .class
    META-INF
dist
  javadoc
  lib
  JavaApplication1.jar
  README.TXT
nbproject
src
  javaapplication1
    Main.java
      … .java
      … .form
  META-INF
test
build.xml
manifest.mf
  • В папке build хранятся скомпилированные файлы классов, имеющие расширение .class.
  • В папке dist - файлы, предназначенные для распространения как результат компиляции (модуль JAR приложения или библиотеки, а также документация к нему).
  • В папке nbproject находится служебная информация по проекту.
  • В папке src - исходные коды классов. Кроме того, там же хранится информация об экранных формах (которые будут видны на экране в виде окон с кнопками, текстом и т.п.). Она содержится в XML-файлах, имеющих расширение .form.
  • В папке test - сопроводительные тесты, предназначенные для проверки правильности работы классов проекта.

Приведем перевод файла README.TXT, находящегося в папке dist - там же, где архив JAR, предназначенный для распространения как файл приложения:

ОПИСАНИЕ ВЫВОДА КОМПИЛЯЦИИ

Когда Вы компилируете проект приложения Java, которое имеет главный класс, среда разработки (IDE) автоматически копирует все файлы JAR-архивов, указанные в classpath ваших проектов, в папку dist/lib. Среда разработки также автоматически прибавляет путь к каждому из этих архивов в файл манифеста приложения ( MANIFEST.MF ).

Чтобы запустить проект в режиме командной строки, зайдите в папку dist и наберите в режиме командной строки следующий текст:

java -jar "JavaApplication3.jar"

Чтобы распространять этот проект, заархивируйте папку dist (включая папку lib ), и распространяйте ZIP-архив.

Замечания:

  • Если два JAR-архива, указанные в classpath ваших проектов, имеют одинаковое имя, в папку lib будет скопирован только первый из них.
  • Если в classpath указана папка с классами или ресурсами, ни один из элементов classpath не будет скопирован в папку dist.
  • Если в библиотеке, указанной в classpath, также имеется элемент classpath, указанные в нем элементы должны быть указаны в пути classpath времени выполнения проектов.
  • Для того чтобы установить главный класс в стандартном проекте Java, щелкните правой кнопкой мыши в окне Projects и выберите Properties. Затем выберите Run и введите данные о названии класса в поле Main Class. Кроме того, Вы можете вручную ввести название класса в элементе Main-Class манифеста.

2.8. Создание в NetBeans приложения Java с графическим интерфейсом

Экранной формой называется область, которая видна на экране в виде окна с различными элементами - кнопками, текстом, выпадающими списками и т.п. А сами эти элементы называются компонентами.

Среды, позволяющие в процессе разработки приложения в интерактивном режиме размещать на формы компоненты и задавать их параметры, называются RAD-средами. RAD расшифровывается как Rapid Application Development - быстрая разработка приложений.

В NetBeans и других современных средах разработки такой процесс основан на объектной модели компонентов, поэтому он называется Объектно-Ориентированным Дизайном (OODObject-Oriented Design).

NetBeans является RAD-средой и позволяет быстро и удобно создавать приложения с развитым графическим пользовательским интерфейсом (GUI). Хотя языковые конструкции Java, позволяющие это делать, не очень просты, на начальном этапе работы с экранными формами и их элементами нет необходимости вникать в эти тонкости. Достаточно знать основные принципы работы с такими проектами.

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

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

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

Пример открытия проекта с существующим исходным кодом

увеличить изображение
Рис. 2.12. Пример открытия проекта с существующим исходным кодом

В NetBeans 5.0 имелся хороший пример GUI-приложения, однако в NetBeans 5.5 он отсутствует. Поэтому для дальнейшей работы следует использовать пример JavaApplicationGUI_example, ссылка на который дана в начале лекции.

Сначала следует распаковать zip-архив, и извлечь находящуюся в нем папку с файлами проекта в папку с вашими проектами (например, C:\Documents and Settings\User ). Затем запустить среду NetBeans, если она не была запущена, и закрыть имеющиеся открытые проекты, чтобы они не мешали. После чего выбрать в меню File/Open Project, либо или на панели инструментов иконку с открывающейся фиолетовой папочкой, либо нажать комбинацию клавиш <Shift>+<Ctrl>+O. В открывшемся диалоге выбрать папку JavaApplicationGUI_example (лучше в нее не заходить, а просто установить выделение на эту папку), после чего нажать кнопку Open Project Folder.

При этом, если не снимать галочку "Open as Main Project", проект автоматически становится главным.

В окне редактора исходного кода появится следующий текст:

/*
 * GUI_application.java
 *
 * Created on 22 Июня 2006 г., 13:41
 */

package java_gui_example;

/**
 *
 * @author Вадим Монахов
 */

public class GUI_application extends javax.swing.JFrame {

    /**
     * Creates new form GUI_application
     */
    public GUI_application() {
        initComponents();
     }
     
     /** This method is called from within the constructor to
      * initialize the form.
      * WARNING: Do NOT modify this code. The content of this method is
      * always regenerated by the Form Editor.
      */
     +Generated Code
     
     private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt)
     {
         System.exit(0);
     }
     
     /**
      * @param args the command line arguments
      */
     
     public static void main(String[] args) {
         java.awt.EventQueue.invokeLater(new Runnable() {
             public void run() {
                 new GUI_application().setVisible(true);
             }
         });
     }
     
     // Variables declaration - do not modify
     private javax.swing.JMenuItem aboutMenuItem;
     private javax.swing.JMenuItem contentsMenuItem;
     private javax.swing.JMenuItem copyMenuItem;
     private javax.swing.JMenuItem cutMenuItem;
     private javax.swing.JMenuItem deleteMenuItem;
     private javax.swing.JMenu editMenu;
     private javax.swing.JMenuItem exitMenuItem;
     private javax.swing.JMenu fileMenu;
     private javax.swing.JMenu helpMenu;
     private javax.swing.JMenuBar menuBar;
     private javax.swing.JMenuItem openMenuItem;
     private javax.swing.JMenuItem pasteMenuItem;
     private javax.swing.JMenuItem saveAsMenuItem;
     private javax.swing.JMenuItem saveMenuItem;
     // End of variables declaration
}

Поясним некоторые его части. Указание пакета java_gui_example, в котором будет располагаться код класса приложения, нам уже знакомо. Декларация самого класса GUI_application в данном случае несколько сложнее, чем раньше:

public class GUI_application extends javax.swing.JFrame

Она означает, что задается общедоступный класс GUI_application, который является наследником класса JFrame, заданного в пакете swing, вложенном в пакет javax. Слово extends переводится как "расширяет" (класс-наследник всегда расширяет возможности класса-прародителя).

Общедоступный конструктор GUI_application() создает объект приложения и инициализирует все его компоненты, методом initComponents(), автоматически генерируемом средой разработки и скрываемом в исходном коде узлом +Generated Code. Развернув узел, можно увидеть реализацию этого метода, но изменить код нельзя. Мы не будем останавливаться на том, что в нем делается.

Далее следует закрытый (private) метод

private void exitMenuItemActionPerformed

Он будет обсуждаться чуть позже. Метод

public static void main(String[] args)

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

Далее следует область объявления компонентов– пунктов меню нашей формы. Она автоматически создается в исходном коде редактором экранных форм и недоступна для изменения в редакторе исходного кода.

Запущенное приложение

Рис. 2.13. Запущенное приложение
Приложение с раскрытым меню

Рис. 2.14. Приложение с раскрытым меню

При запуске приложения экранная форма выглядит так, как показано на рисунке. В ней уже имеется заготовка меню, которое способно разворачиваться и сворачиваться, и даже работает пункт Exit – "Выход". При нажатии на него происходит выход из приложения.

Именно за нажатие на этот пункт меню несет ответственность оператор exitMenuItemActionPerformed. При проектировании экранной формы он назначен в качестве обработчика события – подпрограммы, которая выполняется при наступлении события. В нашем случае событием является выбор пункта меню Exit, и при этом вызывается обработчик exitMenuItemActionPerformed. Внутри него имеется всего одна строчка

System.exit(0);

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

Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.