Tratando Imagens em uma Aplicação Java GUI

Conteúdo

O conteúdo desta página se aplica ao NetBeans IDE 6.9 e versão mais recente

Para concluir este tutorial, você precisa dos seguintes recursos e softwares.

Software ou Recurso Versão Necessária
NetBeans IDE Versão 6.9 ou posterior
Java Development Kit (JDK) Versão 6 ou 7

Introdução

O tratamento de imagens em uma aplicação é um problema comum para muitos programadores iniciantes em Java. A forma padrão de acessar as imagens em uma aplicação Java é por meio do método getResource(). Este tutorial mostra como usar o GUI Builder do IDE para gerar o código a fim de que inclua imagens (e outros recursos) em sua aplicação. Além disso, você aprenderá como personalizar a forma na qual o IDE gera o código de tratamento de imagens.

A aplicação resultante deste tutorial será um JFrame simples que contém um JLabel que exibe uma única imagem.

Criando a Aplicação

  1. Escolha Arquivo > Novo Projeto.
  2. No assistente Novo Projeto, selecione Java > Aplicação Java e clique em Próximo.
  3. Em Nome do Projeto, digite ImageDisplayApp.
  4. Desmarque a caixa de seleção Criar Classe Principal.
  5. Certifique-se de que a caixa de seleção Definir como Projeto Principal esteja selecionada.
    Assistente Novo Projeto
  6. Clique em Finalizar.

Criando o Form da Aplicação

Nesta seção, você cria o form JFrame e adiciona um JLabel ao form.

Para criar o form JFrame:

  1. Na janela Projetos, expanda o nó ImageDisplayApp.
  2. Clique com o botão direito do mouse no nó Pacotes de Código-fonte e escolha Novo > Form JFrame.
  3. Em Nome da Classe, digite ImageDisplay.
  4. Em Nome do Pacote, digite org.me.myimageapp.
  5. Clique em Finalizar.

Para adicionar o JLabel:

  • Na Paleta, selecione o componente Label e arraste-o para o JFrame.

Até este momento, o form deve ser semelhante à seguinte imagem:

Gerado form com o label adicionado

Adicionando um Pacote na Imagem

Ao usar imagens ou outros recursos em uma aplicação, normalmente você cria um pacote Java separado para os recursos. No seu sistema de arquivos local, um pacote corresponde a uma pasta.

Para criar um pacote para a imagem:

  1. Na janela Projetos, clique com o botão direito do mouse no nó org.me.myimageapp e escolha Novo > Pacote Java.
    Adicionando um novo pacote Java
  2. No Assistente Novo Pacote, adicione .resources a org.me.myimageapp para que o novo pacote seja denominado org.me.myimageapp.resources.
  3. Clique em Finalizar.

Na janela Projetos, você deve ver a imagem dentro do pacote org.me.myimageapp.resources.

Janela Projetos

Exibindo a Imagem no Label

Nesta aplicação, a imagem será incorporada em um componente JLabel.

Para adicionar a imagem ao label:

  1. No Designer de GUI, selecione o label que adicionou ao seu form.
  2. Na janela Propriedades, clique na categoria Propriedades e role até a propriedade do ícone.
  3. Clique no botão de reticências (...).
  4. Na caixa de diálogo da propriedade do ícone, clique em Importar para o Projeto.
    editor de propriedade do ícone
  5. Na seletor de arquivos, vá até qualquer imagem que esteja em seu sistema que você queira usar. Em seguida, clique em Próximo.
  6. Na página Selecionar Pasta de Destino do assistente, selecione a pasta recursos e clique em Finalizar.
    Selecione Pasta de Destino página do assistente Importar Imagens para Projeto

Após clicar em Finalizar, o IDE faz o seguinte:

  • Copia a imagem para seu projeto. Portanto, quando você constrói e distribui a aplicação, a imagem é incluída no arquivo JAR distribuível.
  • Gera o código na classe ImageDisplay para acessar a imagem.
  • Exibe a sua imagem no label na view Design do seu form.

Neste momento, você pode realizar alguns procedimentos simples para melhorar a aparência do form, como:

  • Na janela Propriedades, selecione a propriedade text e delete jLabel1. Tal valor foi gerado pelo GUI Builder para exibir o texto do label. No entanto, você está usando o label para exibir uma imagem em vez do texto, de modo que o texto não seja necessário.
  • Arraste o botão para centralizá-lo no form.
Tela mostrando a view Design da classe ImageDisplay com a imagem centralizada.

Para exibir o código gerado:

  1. No Designer de GUI, clique na guia Código-fonte.
  2. Role até linha que diz Código Gerado.
  3. Clique no sinal de mais (+) à esquerda da linha Código Gerado para exibir o código que o Designer de GUI gerou.

A linha-chave é a seguinte:

jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/me/myimageapp/resources/park-sculpture.jpg"))); // NOI18N

Visto que você usou o editor de propriedades da propriedade do Ícone do jLabel1, o IDE gerou o método setIcon. O parâmetro de tal método contém uma chamada ao método getResource() em uma classe anônima interna de ImageIcon. Observe que o caminho gerado da imagem correspondente à sua localização na estrutura de pacote da aplicação.

Observações:

  • Se você usar a opção Imagem Externa no editor de propriedades do ícone, o IDE gerará um caminho absoluto para a imagem em vez de copiar a imagem no seu projeto. Portanto, a imagem seria exibida ao executar a aplicação no sistema, mas possivelmente não seria exibida ao executar a aplicação em outro sistema.
  • O método getResource também é útil para acessar outros tipos de recursos, como arquivos de texto que contêm dados que a aplicação talvez precise usar.

Para registrar handlers de evento para eventos do mouse no JLabel:

Clique com o botão direito do mouse no JLabel e escolha Eventos > Mouse > mouseClicado/mousePressionado/mouseSolto no menu pop-up.
Um handler de evento é gerado para o evento correspondente.

Observação: você pode obter coordenadas do mouse (por exemplo, a localização de um clique do mouse) no handler de evento usando os métodos event.getPoint(), event.getX() ou event.getY(). Consulte Classe MouseEvent para obter detalhes.

Exibindo a imagem como Plano de Fundo no Quadro

Não há nenhum suporte direto para uma imagem de segundo plano do JFrame no GUI Builder, já que não há nenhum suporte direto para uma imagem de segundo plano do JFrame no Swing.
De qualquer forma, há diversas formas indiretas de atingir tal objetivo. Nesta aplicação, o JLabel com a imagem será embutido dentro do componente JFrame, enquanto que um JPanel transparente será colocado sobre o JLabel e usado como o principal de todos os componentes.

Para adicionar um JPanel transparente na JFrame com a imagem:

  1. Escolha Arquivo > Novo Projeto.
  2. No assistente Novo Projeto, selecione Java > Aplicação Java e clique em Próximo.
  3. Em Nome do Projeto, digite BackgroundImageApp.
  4. Desmarque a caixa de seleção Criar Classe Principal.
  5. Certifique-se de que a caixa de seleção Definir como Projeto Principal esteja selecionada.
  6. Na janela Projetos, expanda o nó BackgroundImageApp.
  7. Clique com o botão direito do mouse no nó Pacotes de Código-fonte e escolha Novo > Form JFrame.
  8. Em Nome da Classe, digite ImageDisplay.
  9. Em Nome do Pacote, digite org.me.mybackgroundapp.
  10. Clique em Finalizar.
  11. Na view Design, clique com o botão direito do mouse em JFrame e selecione Definir Layout > Layout de Conjunto de Grades no menu pop-up.
  12. Clique com o botão direito do mouse em JFrame e selecione Adicionar da Paleta > Contêineres Swing > Painel no menu pop-up.
  13. Na janela Propriedades, desmarque a propriedade opaque do jPanel.
  14. Clique com o botão direito do mouse em JFrame e selecione Adicionar da Paleta > Contêineres Swing > Label no menu pop-up.
  15. Na janela Projetos, clique com o botão direito do mouse no nó org.me.mybackgroundapp e escolha Novo > Pacote Java.
  16. No assistente Novo Pacote, adicione .resources a org.me.mybackgroundapp para que o novo pacote seja denominado org.me.mybackgroundapp.resources.
  17. Clique em Finalizar.
  18. No Designer de GUI, selecione o label que adicionou ao seu form.
  19. Na janela Propriedades, clique na categoria Propriedades e role até a propriedade do ícone.
  20. Clique no botão de reticências (...).
  21. Na caixa de diálogo da propriedade do ícone, clique em Importar para o Projeto.
  22. Na seletor de arquivos, vá até qualquer imagem que esteja em seu sistema que você queira usar. Em seguida, clique em Próximo.
  23. Na página Selecionar Pasta de Destino do assistente, selecione a pasta Recursos e clique em Finalizar.
  24. No navegador, clique com o botão direito do mouse em jPanel e escolha Propriedades no menu pop-up.
  25. Na caixa de dialogo Propriedades, defina as propriedades Grid X, Grid Y, Weight X e Weight Y como 1 e a propriedade Fill como Both. Clique em Fechar.
  26. Repita as etapas 24 e 25 para o jLabel.
    O segundo plano está pronto. Agora você pode arrastar um jLabel e um jTextField ao jPanel a partir da Paleta, por exemplo. Ambos serão exibidos sobre a imagem de segundo plano.
    Tela mostrando a view Design da classe Segundo Plano.

A vantagem da solução descrita é que a imagem de segundo plano é mostrada no período do projeto e no runtime.

Construindo e Executando a Aplicação

Agora que gerou o código para acessar e exibir a imagem, você pode construir e executar a aplicação para certificar-se de que a imagem está sendo acessada.

Você precisa, primeiro, definir a classe principal do projeto. Quando você define a classe principal, o IDE sabe quais classes executar quando o projeto é executado. Além disso, isso garante que o elemento Main-Class no arquivo JAR do projeto seja gerado quando você construir a aplicação.

Para definir a classe principal do projeto:

  1. Clique com o botão direito do mouse no nó do projeto ImageDisplayApp e escolha Propriedades.
  2. Na caixa de diálogo Propriedades do projeto, selecione a categoria Executar.
  3. Clique no botão Procurar ao lado do campo Classe Principal. Em seguida, selecione a classe org.me.myimageapp.ImageDisplay e clique no botão Selecionar Classe Principal.

Para construir o projeto:

  • Escolha Executar > Limpar e Construir Projeto Principal.

Você pode exibir os produtos construídos da aplicação na janela Arquivos. A pasta build contém a classe compilada. A pasta dist contém um arquivo JAR executável que contém a classe compilada e a imagem.

Tela que mostra a janela Arquivos com a pasta de distribuição expandida mostrando a classe compilada e o arquivo de imagem.

Para executar o projeto:

  • Escolha Executar > Executar Projeto Principal (F6).

Criando Código Personalizado

Em muitas aplicações, a imagem exibida não é determinada estaticamente como neste exemplo. Por exemplo, a imagem a ser exibida pode ser determinada por algo no qual o usuário clica.

Se precisar escolher a imagem a ser exibida programaticamente, você pode escrever seu próprio código personalizado para acessar e exibir recursos. O IDE impede que você escreva o código diretamente nos "blocos protegidos" da view Código-fonte que contém o código gerado pelo GUI Builder. No entanto, você pode inserir o código nos blocos protegidos usando os editores de propriedades que podem ser acessados na janela Propriedades. Ao usar os editores de propriedades desta forma, você garante que o código personalizado não se perda ao fazer alterações de design no GUI Builder.

Por exemplo, para escrever o código personalizado de uma propriedade icon do JLabel:

  1. Selecione JLabel na view Design ou na janela Inspetor.
  2. Na janela Propriedades, clique no botão de reticências (...) ao lado da propriedade Icon.
  3. Na lista drop-down da parte superior da caixa de diálogo, selecione a opção Código Personalizado.
O editor de propriedades Icon com o código personalizado opção está sendo selecionado na lista dropdown, mas com a view Seletor de Imagens ainda mostrada.

A opção Código Personalizado deste editor de propriedades permite que você mesmo preencha o parâmetro do método setIcon. Você pode preencher este parâmetro com a lógica necessária ou com uma chamada a um método diferente que você escreveu em outro lugar na classe.

O editor de propriedades Icon com a opção Código Personalizado selecionada na lista dropdown e uma área de texto aberta, em que é possível inserir o parâmetro setIcon.

Resumo

Este tutorial mostrou como acessar imagens de uma aplicação que você criou no NetBeans IDE. O tratamento de imagens é abordado posteriormente no Tutorial do Java.

Observação: o exemplo oferecido neste tutorial é muito semelhante ao primeiro exemplo na seção Como Usar Ícones do Tutorial do Java. A diferença é que o código gerado neste tutorial usa o método setIcon do JLabel para aplicar o ícone no label. No exemplo do Tutorial do Java, o ícone é aplicado no label ao ser passado pelo seu construtor.


Consulte Também

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2018, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo