// 
//     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.
//

= Designing a Swing GUI in NetBeans IDE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Designing a Swing GUI in NetBeans IDE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Designing a Swing GUI in NetBeans IDE

These screencasts walk you through designing a Swing GUI in the NetBeans IDE described in the link:../java/quickstart-gui.html[+Designing a Swing GUI in NetBeans IDE+] tutorial.

In the screencasts, you will see how to add, insert, align, resize, and indent components to layout a GUI front-end that enables you to view and edit contact information of individuals included in an employee database. You will learn how to effectively use the capabilities of the IDE's GUI Builder.

|===
|
== Exploring GUI Builder (.swf)

(Click link:http://bits.netbeans.org/media/quickstart-gui-explore.swf[+here+] to view full-sized, Ctrl-Click to download, 1,9 MB)
Time: 01:19

 

|
== Adding individual and multiple components (.swf)

(Click link:http://bits.netbeans.org/media/quickstart-gui-add.swf[+here+] to view full-sized, Ctrl-Click to download, 5,6 MB)
Time: 08:21

 

|
== Inserting components (.swf)

(Click link:http://bits.netbeans.org/media/quickstart-gui-insert.swf[+here+] to view full-sized, Ctrl-Click to download, 1,1 MB)
Time: 01:49

 

|
== Aligning and anchoring components (.swf)

(Click link:http://bits.netbeans.org/media/quickstart-gui-align.swf[+here+] to view full-sized, Ctrl-Click to download, 4,4 MB)
Time: 07:40

 

|
== Resizing and indenting components (.swf)

(Click link:http://bits.netbeans.org/media/quickstart-gui-resize.swf[+here+] to view full-sized, Ctrl-Click to download, 4,1 MB)
Time: 08:03

 
|===


== Related links

* link:../intro-screencasts.html[+Guided Video Tour of the NetBeans IDE+]
* link:https://netbeans.org/kb/index.html[+NetBeans IDE Tutorials: General Java Development +]
* link:https://netbeans.org/kb/index.html[+NetBeans IDE Documentation +]
link:/about/contact_form.html?to=3&subject=Feedback:%20Designing%20a%20Swing%20GUI%20in%20NetBeans%20IDE%20Screencast[+Send Feedback on This Tutorial+]


