Desenhando em Java2D usando o Netbeans

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
A versão imprimível não é mais suportada e pode ter erros de renderização. Atualize os favoritos do seu navegador e use a função de impressão padrão do navegador.

Criando uma aplicação Java2D usando o Netbeans

Com o Netbeans é possível desenhar aplicações gráficas em Java de uma forma rápida e simples. Basta clicar e arrastar componentes para um formulário. Contudo, o Netbeans não fornece uma interface tão intuitiva para desenhar usando a API do Java2D, mas é possível combinarmos as facilidades trazidas pelo Netbeans para montar janelas com botões, caixas de texto, etc. e usarmos um pouco de código por baixo para criarmos um painel que permita fazer desenhos em Java2D.

As figuras abaixo ilustram os passos necessários para combinar o poder do Netbeans com a API Java2D para desenhar dois simples quadrados e um frase. O formulário terá os seguintes componentes:

  • Um JPanel
  • Dois JButton
    • Um para desenhar os quadrados
    • Um para limpar o JPanel

O código fonte com o projeto desenvolvido nesta página pode ser obtido aqui.

Criando um projeto Java

J2d1.png

  • Desmarque a opção "criar classe principal"

J2d2.png

Criando um formulário JFrame

  • Clique com o botão direito sobre "Pacotes de código fonte" e escolha a opção "Novo -> Formulário JFrame"

J2d3.png

  • No campo Nome da classe coloque "Principal"
  • No campo pacote coloque o nome "grafico"

J2d4.png

Adicionando um JPanel no formulário

Clique no componente JPanel, presente na Paleta "Contêiners Swing" e arraste para o fomulário. Altere as dimensões deste JPanel de forma que este ocupe toda a largura do formulário. Altere a altura deste JPanel mas reserve um espaço na parte de baixo do formulário para depois incluirmos dois botões.

J2d5.png

Criando uma classe Painel, subclasse de JPanel

Iremos mudar o comportamento do nosso JPanel adicionado no passo anterior. Para isso será criada uma classe Painel que é uma subclasse de JPanel. As modificações desta classe, em relação a superclasse, são:

  • No construtor a cor de fundo do painel é mudada para branco.
  • Sobrescrita do método paint da superclasse
    • Será desenhada uma frase no JPanel sempre que este método for invocado
  • Adição do método desenharQuadrado
    • Irá desenhar um quadrado sem preenchimento e um quadrado preenchido com a cor vermelha

J2d6.png

  • No campo Nome da classe coloque o nome "Painel"

J2d7.png

  • Note a palavra extends na linha 8 da figura abaixo, indicando uma relação de herança entre Painel e JPanel

J2d8.png

Personalizando o código gerado pelo Netbeans

Ao inserirmos um JPanel no formulário Principal, o Netbeans criou um atributo na classe Principal do tipo JPanel e colocou a respectiva linha para a criação de um objeto desta classe.

Neste passo iremos substituir a linha referência a criação deste objeto. Faremos com que no atributo do tipo JPanel seja armazenada uma instância de um objeto da nossa classe Painel. Isto é possível pois objetos de Painel são também JPanel (conceito de herança).

J2d9.png

  • A instrução "new javax.swing.JPanel()" da figura abaixo será substituída por "new Painel()"
  • Clique na caixa de seleção na esquerda, onde está escrito "código padrão" e selecione "criação personalizada"

J2d10.png

  • Faça a alteração na linha para que fique igual à figura abaixo

J2d11.png

Adicionando eventos nos botões

A figura abaixo ilustra como adicionar um tratador para o evento de acionamento do botão. Clique com botão direito do mouse sobre o botão jBDesenhar e selecione Eventos-> Action -> actionPerformed.

J2d12a.png

Adicionando código nas ações dos botões

Na figura abaixo é apresentado o código que foi inserido no evento actionPerformed de cada botão

  • JBDesenhar
    • Ao clicar neste botão o método desenharQuadrado, especificado na classe Painel, será invocado
  • JBLimpar
    • Ao clicar neste botão o método repaint(), herdado da superclasse JPanel, será invocado
    • Por consequência o método paint() da classe Painel será invocado, já que este método foi sobrescrito

J2d12.png

Interface da aplicação desenvolvida

J2d13.png