// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Создание приложений на платформе NetBeans 6.9
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Создание приложений на платформе NetBeans 6.9 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Создание приложений на платформе NetBeans 6.9

|===
|Просмотрите этот видеоролик для подробного ознакомления с многофункциональной платформой NetBeans – платформой на основе Swing для разработки настольных приложений. Геерт-Ян Виленга (Geertjan Wielenga) также рассматривает новые полезные функции, вошедшие в последнюю версию платформы NetBeans 6.9, например: возможность совместного функционирования OSGi, расширенная поддержка Maven и поддержка клиентов REST для приложений RCP.

Это видеоролик является частью link:../intro-screencasts.html[+Видеообзора IDE NetBeans 6.9+], в котором наглядно описывается начало работы.


== Связанные ссылки

* link:https://netbeans.org/kb/index.html[+Учебные курсы по IDE NetBeans+]
* link:https://netbeans.org/community/index.html[+Сообщество NetBeans+]
link:/about/contact_form.html?to=3&subject=Feedback: Platform 6.9 screencast[+Отправить отзыв по этому учебному курсу+]
 |  
|===
