Java – Programação Gráfica

Propaganda
Pontifícia Universidade Católica de Minas Gerais.
Curso: Física – Disciplina: Física Computacional.
Professora: Vânia.
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.
•Um quadro pode conter outros 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 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 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.
•
•
•
•
•
•
•
•
•
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 ( )
retorma 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. 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.
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 : NotHelloWorldjava
import 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 ( );
}
}
Como Converter Aplicativos em Applets
É fácil converter um aplicativo gráfico java (ou seja, um aplicativo que use o AWT e que possa ser iniciado
pelo interpretador de linha de comando Java) em uma applet passível de ser incorporada a uma página Web.
Essencialmente, todo o código da interface de usuário pode permanecer inalterado.
Eis os passos específicos necessários para converter um aplicativo em uma applet.
1 . Faça uma página HTML com a instrução apropriada para carregar o código da applet.
2. Elimine o método main do aplicativo. Geralmente, main contém código para fazer um novo objeto
quadro (ftame). Nas applets, essa tarefa é feita automaticamente pelo navega, dor, pois ele cria um
objeto da classe especificada na página HTML.
3. Substitua a classe JFrame pela classe JAppiet. Faça essa classe ser pública (com public). Caso
contrário, a applet não poderá ser carregada.
4. Remova a chamada a setsize; nas applets, o redimensionamento é feito mediante os parâmetros
WIDTH e HEIGHT no arquivo HTML real. Remova a chamada a addWindowListener. Uma applet não
pode ser fechada; ela encerra quando o navegador determina. Se o aplicativo chamar settitle,
elimine a chamada a esse método. As applets não podem ter barras de título. (Você pode,
evidentemente, dar um título à própria página Web, usando a marca @TITLE> da linguagem
HTML).
5. Substitua o construtor com um método chamado init. Quando o navegador cria um objeto da
classe applet, ele chama o método init (). Essa modificação é somente necessária se for usado o
método getparameter para ler parâmetros que afetam o layout da applet. Não se pode chamar
getparameter no construtor. (Nós vamos examinar parâmetros de applets mais adiante neste
capítulo).
Download