17
Java – Programação Gráfica Java – Programação Gráfica •Uma janela de nível mais alto é chamado de um quadro frame em Java. • A biblioteca AWT tem uma classe baseada em semelhantes, chamada Frame. A versão Swing dessa classe é chamada de JFrame; •a JFrame estende a classe Frame e é um dos poucos componentes Swing que não é desenhado em uma ('tela de desenho" chamada canvas. • Assim, as decorações (botões,.barra de título, ícones etc) são desenhadas pelo sistema de gerenciamento de janelas do usuário e não pelo Swing. •Os quadros são exemplos de contêineres. •Um quadro pode conter outro componentes da interface de usuário, como botões e campos de texto.

Java Programação Gráfica

Embed Size (px)

DESCRIPTION

mini curso de java

Citation preview

Java – Programação GráficaJava – Programação Gráfica

•Uma janela de nível mais alto é chamado de um quadro frame em Java.

• A biblioteca AWT tem uma classe baseada em semelhantes, chamada Frame.

• A versão Swing dessa classe é chamada de JFrame;

•a JFrame estende a classe Frame e é um dos poucos componentes Swing que não é desenhado em uma ('tela de desenho" chamada canvas.

• Assim, as decorações (botões,.barra de título, ícones etc) são desenhadas pelo sistema de gerenciamento de janelas do usuário e não pelo Swing.

•Os quadros são exemplos de contêineres.

•Um quadro pode conter outro componentes da interface de usuário, como botões e campos de texto.

  

Exemplo : FirstTestjava import javax.swing.*; class FirstFrame extends Jframe { public FirstFrame () { setTitle('FirstFrame'); setSize(300, 200);  } }  public class FirstTest { public static void main(String[] args) { Frame frame = new FirstFrameo; frame.show (); } }  

Vamos percorrer esse programa, linha Vamos percorrer esse programa, linha por linha.por linha.

•As classes Swing são colocadas no pacote javax. swing.

•O nome javax do pacote indica um pacote de extensão java, e não um pacote do núcleo.

•No Java 2, o pacote Swing não é mais uma extensão, mas faz parte de hierarquia do núcleo. Nas versões beta do Java 2 acomodou-se como javax.swing

•No programa, definimos uma classe FirstFrame, que se comporta exatamente como a classe JFrame do pacote javax. Swing.

• O construtor de First frame coloca na barra de título a string "FirstFrame" e faz o tamanho do quadro ser de 300 x 200 pixels. A priore, um quadro tem largura e altura iguais a 0.

•O método main mostra o quadro e sai. Isso não termina o programa, mas apenas o subprocesso principal.

•A exibição da janela ativa um subprocesso de interface de usuário que man, têm o programa "vivo".

 Para mostrar realmente um quadro, devem-se executar os seguintes passos:· Criar o objeto quadro usando operador new.

· Opcionalmente, posicioná-lo na tela do usuário usando o método setlocation.

· Chamar o método show para tomar visível o quadro e trazê-lo para frente se estiver por trás de outra janela.

 •A linha chave no método main do Exemplo é: JFrame frame = new FirstFrame(); •Essa linha cria um novo FirstFrame fornecendo todas as informações necessárias

para que o sistema de controle de janelas subjacente exiba uma janela.

•A chamada de new não exibe o quadro; como mencionamos. É necessário usar os métodos show ou setvisible para efetivamente fazer o quadro aparecer na tela.

 

•O padrão é de quadros visíveis tenham dimensões O x O pixels, antes que se possa ver um quadro torna-se necessário especificar suas dimensões.

• No Exemplo fizemos 300 pixels de largura por 200 pixels de altura usando o método setsize no construtor do quadro.

• Finalmente, o quadro vai aparecer no canto superior esquerdo pois não usamos o método setlocation a fim de reposicioná-lo.

• Podemos ter um código para criar e mostrar o quadro colocado no método main da própria classe.

 public class FirstFrame extends Jframe{ public FirstFrame () { setTitle('FirstFrame'); setsize (300, 200) }

public satatic void main(String[] args) {JFrame freme = new FirstFrame(); frame.show(); }}

 

•Usar o método main da classe frame para o código que instancia e exibe o quadro é mais simples no sentido de que não se precisa introduzir outra classe auxiliar para fazer isso.

•Alguns programadores consideram esse estilo de código mais confuso e preferem separar a classe que executa o programa da classe que controla a aparência e o comportamento do quadro.

Como Encerrar Programas Gráficos •Há, infelizmente, um sério problema no programa FirstFrame. Se você executar o

programa, vai descobrir que não há como sair dele!

•Não há nada óbvio que permita encerrar esse aplicativo, embora a janela possa ter sido ocultada. Você vai ver logo como escrever programas Swing que podem ser encerrados adequadamente.

• Pode-se terminar o programa java pressionando ctrl,c ou dando um clique no botão Fechar no canto superior direito da janela do console, e, alternativamente, pode-se,, pressionar CTRL+ALT+DEL.

•O AWT propicia uma classe chamada WindowAdapter . class Terminator extends WindowAdapter{ public void windowClosing (windowEvent e) System.exit(O);} Usando a mágica das classes anônimas, podemos até mesmo evitar dar um nome à  addwindowlistener (new WindowsAdapter ( ) { public void windowClosing(WindowEvent e) { System.exit(O);} }); 

 

import java.awt.event.*;import javax.swing.*;

class CloseableFrame extends Jframe{ public CloseableFrame ( ) { setTitle(“CloseableFrame”);  setSize(300, 200); addWindowListener(new WindowAdapter ( ) { public void windowClosing(WindowEvent e) { System.exit( ); }  });  } } public class CloseableTest { public static void main(String[] args) { JFrame frame = new CloseableFrame ( ) frame.showo;  } }

Layout de QuadrosLayout de Quadros•A classe JFrame, por si mesma, somente tem alguns poucos métodos para alterar a disposição visual (layout) dos quadros.

•Evidentemente, através da mágica da herança, a maior parte dos métodos para se trabalhar o dimensionamento e o posicionamento de um quadro vêem das várias superclasses de JFrame.

- O método dispose que fecha a janela e recupera os recursos do sistema usados em sua criação. - O método setIconImage que especifica um objeto image para ser usado como ícone quando a janela é minimizada .

- O método settitle para mudar o texto da barra de título da janela.  - O método setResizeable, que toma um boolean para determinar se um quadro ser redimensionável pelo usuário.

Exibição de Informações em um Exibição de Informações em um QuadroQuadro

•Seria possível desenhar a string da mensagem diretamente num quadro, mas esta não seria considerada uma boa prática de programação.

•Em Java, os quadros são projetados realmente somente para serem contêineres de componentes como barras de menu e outros elementos de interface de usuário.

•Normalmente desenha-se em outro componente, chamado panel, que é adicionado ao

quadro. 

 

•A estrutura de um JFrame é surpreendentemente complexa.

• A parte que mais interessa aos programadores Swing é a área de conteúdo.

• Ao projetar um quadro, adicionam-se componentes à área de conteúdo usando código como o seguinte:

•  Container painelconteudo = f rame. getContentPane ( ) Component c =“ ” ;  painelconteudo.add;

• Em nosso caso, queremos adicionar um único painel à área de conteúdo na qual vamos desenhar a mensagem.

•Os painéis são implementados pela classe JPanel. Eles são elementos da interface de usuário com duas propriedades úteis:

• •Eles têm uma superfície na qual se pode desenhar.

•Eles são, também, recipientes. 

•Assim, eles podem conter outros componentes de interface como botões, botões deslizantes, etc.

•O código completo para adicionar um painel a um quadro é:

 Container painelconteudo = frame.getContentPane ( );

JPanel p = new JPanel

  painelconteudo. add (p)

javax.swing.JFrame

Container getContentPane ( )

retoma o objeto área de conteúdo deste JFrame.

Objetos Gráficos e o Método paintcomponent

•Sempre que você precisar de um componente de interface de usuário que seja semelhante a um dos componentes Swing básicos, poderá usar herança para criar uma nova classe e depois sobrepor ou adicionar métodos para obter a funcionalidade extra necessária.

•Por exemplo, nossas classes FirstFrame e CloseableFrame derivaram da classe Swing JFrame.

•Para desenhar em um painel, será necessário:

Definir uma classe que estenda JFrame. Sobrepor o método paintcomponent dessa classe.

•O método paintcomponent está, na verdade, na classe icomponent, que é uma classe antecessora de todos os componentes Swing que não são de janela.

• Ele recebe um parâmetro do tipo Graphics. O parâmetro Graphics é semelhante a um contexto de dispositivo do Windows

•. Ele tem métodos para desenhar padrões, imagens e texto. Eis como fazer um painel no qual se pode desenhar:

class MyPanel extends JPanel { public void paintComponent(Graphics g)

o código para desenhar vai aqui

•Em geral, sempre que se quer colocar mensagens de texto ou gráficos em um painel, é necessário definir uma nova classe e sobrepor o método paintcomponent.

 

Como vimos no código básico anterior, o método paintcomponent toma somente um único parâmetro do tipo Graphics.

Um objeto Graphics lembra uma coleção de especificações para desenhar imagens e texto, como a fonte definida ou a cor atual.

Toda ação de desenhar em java precisa usar um objeto Graphics. As medidas de um objeto Graphics para exibir na tela é feita em pixels.

A coordenada (0,0) denota o canto superior esquerdo do componente em cuja superfície se está desenhando.

 

NOTA: Realmente, o argumento de paintcomponent é um objeto do tipo Graphics2D, uma subclasse da classe Graphics. A classe Graphics2D tem Métodos adicionais para desenhos mais sofisticados. A classe conceitualmente mais simples, Graphics, é suficiente para desenhos de linhas retas simples.

 

•A exibição de texto (geralmente chamada de renderização de texto) é considerada um tipo especial de desenho.

• Por exemplo, um objeto Graphics tem um método drawstring que usa a sintaxe seguinte:

• g.drawString(texto, Coordx, Coordy)

• Em nosso caso, queremos desenhar a string 'Not a Hello, World program, em nossa janela original, aproximadamente a um quarto na horizontal e metade na vertical.

•O primeiro caractere da string vai começar numa posição 75 pixels a direita e 100 pixels para baixo.

•Assim, nosso método paintcomponent ficará assim:

  class NotHelloworldPanel extends Jpanel

{ public void paintComponent(Graphics g)

{ .......... rotina de código, ver a seguir

g.drawString('Not a Hello, World program', 75, 100);

}

}

 

 

Entretanto, esse método paintcomponent não está completo.

A classe NotHelloWorldPanel estende a classe Tpanel, a qual tem sua própria idéia sobre como desenhar o painel, que é preenche-lo com a cor de fundo.

Para ter certeza de que a superclasse faz sua parte do trabalho, precisamos chamar super.paintComponent antes de fazer qualquer desenho por conta própria.

 class NotHelloWorldPanel extends Jpanel{ public void paintComponent(Graphics g) { super.paintComponent(g);  g.drawstring(”Not a Hello, World program”, 75, 100); }}

Exemplo : NotHelloWorldjavaimport java.awt.*;import java.awt.event.*;import javax.swing.*,,class NotHelloworldPanel extends Jpanel{ public void paintComponent(Graphics g) { super.paintComponent(g);  g.drawString('Not a Hello, World program', 75, 100);  }}class NotHelloWorldFrame extends Jframe{ public NotHelloWorldFrame ( ) { setTitle('NotHelloWorld'); setSize(300, 200); addWindowListener(new WindowAdaptero public void windowClosing(WindowEvent e) { System.exit(O); } });Container contentpane = getContentPaneo; contentpane.add(new NotHelloworldPane ( )); }}public class NotHelloWorld{ public static void main(String[] args) { JFrame freme = new NotHelloWorldFrame ( ); frame.show ( );  }

}