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

= Trilha de Aprendizado das Aplicações de GUI do Java
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Trilha de Aprendizado das Aplicações de GUI do Java - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Trilha de Aprendizado das Aplicações de GUI do Java


== O que são Aplicações de GUI do Java?

Uma aplicação de GUI do Java usa o componente GUI de componentes Java padrão, o Swing e é implantada na desktop.

O Swing GUI Builder no NetBeans IDE simplifica o processo de desenvolvimento da GUI e permite que você crie visualmente aplicações Java GUI usando os componentes pré-instalados Swing e AWT.

link:http://www.oracle.com/technetwork/java/javafx/overview/index.html?ssSourceSiteId=otncn[+JavaFX+] é um conjunto avançado de gráficos e pacotes de mídia que permite aos desenvolvedores projetar, criar, testar, depurar e implantar aplicações clientes ricas (RIAs) que se comportam de forma consistente em várias plataformas.

== Introdução

* link:http://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm[+Conceitos Básicos sobre JavaFX+]

== Tutoriais e Artigos

=== Visualização do Desenvolvedor JavaFX 8

* link:http://docs.oracle.com/javafx/8/3d_graphics/jfxpub-3d_graphics.htm[+Conceitos Básicos sobre Gráficos 3D JavaFX+]

=== Conceitos Básicos sobre JavaFX


=== JavaFX Scene Builder 


=== Lógica da Aplicação JavaFX 


=== Interface do Usuário JavaFX 


=== Efeitos, Animação e Mídia JavaFX


=== Implantação JavaFX e Mais


== Tutoriais e Artigos

=== Conceitos Básicos sobre Swing

* link:../docs/java/native_pkg.html[+Encapsulamento Nativo no NetBeans IDE+]
* link:../docs/java/gui-functionality.html[+Introdução à Construção de GUIs do Java+]
* link:../docs/java/quickstart-gui.html[+Projetando uma GUI Swing no NetBeans IDE+]
* link:../docs/java/quickstart-gui-legend.html[+Legenda de Comentários Visuais do GUI Builder do NetBeans IDE+]
* link:../docs/java/gui-image-display.html[+Manipulando Imagens em uma Aplicação da GUI+]
* link:../docs/java/gui-filechooser.html[+Adicionando um FileChooser a uma aplicação GUI+]
* link:../docs/java/gbcustomizer-basic.html[+Criando um Form Java Básico Usando o GridBag Customizer+]
* link:../docs/java/gbcustomizer-advanced.html[+Criando um Form Java Avançado Usando o GridBag Customizer+]
* link:../docs/java/gui-gaps.html[+Suporte de Edição da Lacuna no NetBeans GUI Builder+]
* link:../docs/java/debug-visual.html[+Usando o Depurador Visual+]

=== Java Persistence e Vinculação de Beans

* link:../docs/java/gui-binding.html[+Vinculação de Beans e Dados em uma Aplicação Java+]
* link:../docs/java/hibernate-java-se.html[+Usando Hibernate em uma Aplicação Java Swing+]
* link:../docs/java/maven-hib-java-se.html[+Criando uma Aplicação Maven Swing Usando Hibernate+]

=== Internacionalização

* link:../docs/java/gui-automatic-i18n.html[+Internacionalizando um Form GUI+]

== Screencasts

* link:http://www.youtube.com/watch?v=ddJpDi5SWFc[+Dicas e Truques de Gráficos JavaFX+]
* link:https://blogs.oracle.com/geertjan/entry/thanks_javafx_wysiwyg_html_editor[+Thanks JavaFX: WYSIWYG HTML Editor para NetBeans IDE +]
* link:../docs/java/nb_fx_screencast.html[+Demonstração: Suporte ao JavaFX no NetBeans IDE+]
* link:../docs/java/gui-builder-screencast.html[+Projetando uma GUI Swing no NetBeans IDE+]

== Documentos de Contribuição da Comunidade

* link:http://netbeans.dzone.com/articles/how-integrate-javafx-netbeans-part3[+Como Integrar JavaFX em um Assistente de Plataforma do NetBeans (Parte 1)+] (_por Sean Phillips_)
* link:http://netbeans.dzone.com/articles/how-integrate-javafx-netbeans[+Como Integrar JavaFX em uma barra de Menu da Plataforma do NetBeans+] (_por Geertjan Wielenga_)
* link:http://wiki.netbeans.org/UsingNetbeansMatisseAndEclipseInParallel[+Utilizando Netbeans Matisse e Eclipse em Paralelo+]

== Outros Recursos

* link:http://download.oracle.com/javafx/[+Documentação do JavaFX+]
* link:http://wiki.netbeans.org/JavaFX[+Página wiki do NetBeans sobre suporte a JavaFX+]
* link:http://docs.oracle.com/javase/tutorial/uiswing/index.html[+Tutorial Swing de docs.oracle.com+]
* link:https://www.java.net//community/javafx/faqs[+Perguntas Frequentes sobre JavaFX+]
* link:http://wiki.netbeans.org/NetBeansUserFAQ#GUI_Editor_.28Matisse.29[+Perguntas Frequentes do Editor de GUIs+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG399[+Trabalhando com um Projeto JavaFX+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+Implementando GUIs de Java+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG1245[+Desenvolvendo Java Persistence+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG188[+Internacionalizando Código-fonte+] em _Desenvolvendo Aplicações com o NetBeans IDE_
