// 
//     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 IDE 中的 JavaFX 支持视频
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDE 中的 JavaFX 支持视频 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 中的 JavaFX 支持视频

|===
|此截屏视频演示了在 NetBeans IDE 7.4 中实现的以下 JavaFX 相关功能

* JavaFX 运行时类路径
* JavaFX 和 Java SE 项目的对齐方式
* JavaFX Maven 项目模板
* Maven 项目中的 JavaFX 文件类型

作者：Petr Somol、Alyona Stashkova 
播放时长：7:04

link:http://bits.netbeans.org/media/netbeans_fx.mp4[+观看全图/下载+] (.mp4)（按住 Ctrl 键单击即可下载，大小为 19,5 MB）

link:/about/contact_form.html?to=3&subject=Feedback:%20Screencast%20-%20JavaFX%20Support%20in%20NetBeans%20IDE[+请将您的反馈意见发送给我们+]
 |  
|===


== 相关链接

* link:http://wiki.netbeans.org/NewAndNoteworthyNB74[+NetBeans 74 新增和值得注意的内容+]
* link:http://wiki.netbeans.org/JavaFX[+JavaFX - NetBeans Wiki+]
* link:http://docs.oracle.com/javafx/[+JavaFX 2 文档主页+]
