Login:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

Java

Feed da seção Java

Newsletter de Java


Terça-feira, 18/05/2004 - 01:59 - Por Almedson Ferreira
Seções relacionadas:

Desenhando imagens em painéis

Uma das coisas mais curiosas em Java é o recurso de desenhar uma imagem em um painel. Assim é possível mudar o visual radicalmente e criar algumas animações.

Como exemplo estarei disponibilizando o código fonte do FaMap para demonstração, retirado de um programinha que fiz com fins acadêmicos, mas farei um breve comentário sobre suas particularidades para que haja um entendimento maior.

Desenhar uma imagem em um painel se dá da mesma forma que em um applet, usando-se a classe java.awt.Graphics, mas ao invés de usar-mos o método paint() usamos o método paintComponent() como mostrado abaixo:

protected void paintComponent( Graphics g ){}

Para desenhar-mos uma imagem em um painel usamos o conceito de Classes Internas Anônimas demonstrado em artigos anteriores onde a classe reescreve uma já existem. Neste caso iremos reescrever o objeto do painel a ser desenhado.

Primeiramente declaramos a existência do objeto do painel:

javax.swing.JPanel telaPrincipal;

Em seguida no construtor criamos a instância do objeto:

telaPrincipal = new JPanel();

Bom agora vamos reecrever abrindo e fechando uma chave logo em seguida dos parênteses do objeto para ser desenhado:

telaPrincipal = new JPanel(){
protected void paintComponent( Graphics g ){}
};

Pronto, agora é só desenhar como se fosse em um applet swing, o método paintComponent() recebe um objeto Graphics que deve ser utilizado de forma semelhante ao método paint() em um applet.

final ImageIcon img = new ImageIcon("imagem.png");

telaPrincipal = new JPanel(){
protected void paintComponent( Graphics g ){
super.paintComponent(g);
Rectangle rect;
for(int i=0; i< objects.size(); i++){
rect = (Rectangle) objects.elementAt(i);

img.paintIcon(this,g,0,0);
g.drawString("Exemplo imasters", 100, 120 );
}

}
};

Em seguida para que a imagem e a String “Exemplo imasters” apareçam pintados no painel devemos disparar um evento que execute essa mudança, assim preferi executar em um evento de botão logo na entrada do programinha, onde:

class ButtonHandlerEntrar implements ActionListener{
public void actionPerformed( ActionEvent e ){
Rectangle rect = new Rectangle(0,0,750,500);
objects.addElement(rect);
telaPrincipal.scrollRectToVisible(rect);
size.width = 1;
size.height = 1;
telaPrincipal.setPreferredSize(size);
telaPrincipal.revalidate();
telaPrincipal.repaint();
bEntrar.setVisible(false);
}
}

Esse evento adiciona uma nova área de um objeto retângulo onde é redimensionado e repintado com o método repaint() que irá acionar o método paintComponent() e executará os seus comandos internos fomando a imagem.

Devo avisar que as imagens estarão sendo desenhadas em um objeto do tipo Rectangle que definirá o tamanho da área a ser pintada de acordo com os objetos desenhados nessa área.

Desenhado Ícones no lugar de Botões

O esquema utilizado foi o seguinte:

Foi adicionado ao painel um evento de clique de mouse onde é capturada a posição X e a posição Y no painel, assim com operadores condicionais if detectamos a localização exata da área onde foi disparado o evento de clique de mouse. Satisfazendo as condições executa-se outro evento desejado. Dessa forma desenhamos um ícone e mapeamos a sua posição de acordo com o seu tamanho e ao clicar na imagem e é disparado um evento assemelhando-se muito aos eventos de botão.

Da forma como estou exemplificando, construir um sistema com muitas telas além de ser muito trabalhoso iria ter um péssimo desempenho de performance devido ao grande número de imagens carregadas e ao grande número de operações de desenho que seriam efetuados, mas com uma orientação a objeto bem feita essa dificuldade de construção e a perda de desempenho pode ser diminuída drasticamente, mas por equanto vamos nos reter apenas aos conceitos de desenho deixando livre aos leitores usar a orientação a objeto da forma como preferirem.

Resultado Final

Aqui vamos mostrar as imagens de como ficou um pequeno sistema de localização acadêmica de salas, professores e disciplinas.

As imagens abaixo são do sisteminha completo que fiz, mas desponibilizei apenas a parte inicial dele para análises de todos, o resto do fonte foi retirado para que não fique muito complexo o exemplo.

Entrada

Aqui foi colocado um botão do tamanho da tela para que o evento de desenho seja disparado, mas podemos acionar um evento de surgimento de tela que ao mostrar a tela do sistema ela já apareceria desenhada.

Menu de opções do usuário

Inicialmente aos usuários em terminais de consulta foram disponibilizados apenas algumas opções para facilitar a sua utilização.

Opção de pesquisa por professores

Aqui podemos escolher um professor cadastrado que aparecerá o nome em um combo e o prorgrama nos mostrará onde ele estará lecionando, qual a disciplina, dia e horário.

Opção de localização de salas

Aqui o usuário pode localizar e identificar todas as salas do campus universitário.

Detalhe, o usuário tem a opção de clicar direto na imagem da sala no mapa e será acionado e evento que mostrará quem ela é, não sendo preciso a consulta direto no combo. Dessa forma o usuário interage direto com a imagem, como em todo o sitema.

Com ZOOM na imagem

Deslocamento a Direta

Opção de localização de disciplinas

Aqui o usuário tem a possibilidade de saber onde a disciplina desejada estará sendo lecionada, o horário, dia e qual o professor.

Novamente lembrando que em todo o sistema o usuário tem a opção de interagir com a imagem, não sendo necessário em determinadas consultar a utilização dos combos e sim apenas clicando na imagem da sala correspondente.

Créditos

Aqui foram mostrados os créditos do trabalho e uma homenagem amigável ao professor da disciplina naquele semestre.

Conclusão

Aos apaixonados por Java gostaria de mostrar mais uma vez o poder que essa linguagem tem e que com esses pequenos conceitos poderemos concretizar grandes idéias.

Sem mais nada a dizer, um abraço a todos.

Java é lindo!

Todos os artigos de Almedson Ferreira

0 comentários publicados

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Almedson Ferreira trabalha com Java há 4 anos e atualmente é deselvolvedor das Agroíndústrias do Vale do São Francisco - AGROVALE, maior usina de cana de açúcar do país.


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.