// 
//     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 6.9.1 中编辑 Java 代码
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 在 NetBeans IDE 6.9.1 中编辑 Java 代码 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 在 NetBeans IDE 6.9.1 中编辑 Java 代码

|===
|这是 6.9 版演示的重拍，可指导您在 NetBeans IDE 6.9.1 的 Java 编辑器中创建简单的 Java 应用程序。

在该截屏视频中，您将了解如何使用编辑器的高效功能，如代码完成、代码模板和错误提示。此外，您还将了解如何有效地使用 IDE Java 编辑器的功能。

作者：Irina Filippova 和 Vita Stejskal
播放时长：12:09

link:http://bits.netbeans.org/media/javaeditor.swf[+立即观看 (.swf)+]（按住 Ctrl 键单击即可下载，大小为 79 MB）

link:http://bits.netbeans.org/media/nb69-code-completion-screencast.mp4[+立即观看 (.mp4)+]（按住 Ctrl 键单击即可下载，大小为 34 MB）

如果观看右侧的截屏视频时遇到问题，则可以先下载该截屏视频，然后再观看。也可以单击以上链接，以全屏方式观看截屏视频。


== 相关链接

* link:../intro-screencasts.html[+NetBeans IDE 6.9 的指导性视频演示+]
* link:https://netbeans.org/kb/index.html[+NetBeans IDE 教程：常规 Java 开发+]
* link:https://netbeans.org/kb/index.html[+NetBeans IDE 文档+]
link:/about/contact_form.html?to=3&subject=Feedback: Editing Java Code in NetBeans IDE 6.9.1 Screencast[+发送有关此教程的反馈意见+]
 |         
|===
