graphics capabilities of java platform

22
CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO ESTADO DE ALAGOAS COORDENADORIA DE INFORMATICA LINGUAGEM DE PROGRAMAÇAO II PROFESSOR MARCILIO JUNIOR CAPACIDADES GRÁFICAS DA PLATAFORMA JAVA Giovanni de A. Calheiros João Paulo de Lima Braga Michel Alves dos Santos Maceió, 16 de Fevereiro de 2004

Upload: michel-alves

Post on 29-May-2015

142 views

Category:

Education


3 download

DESCRIPTION

This report aims to show the functioning of the graphics capabilities of the platform JAVA programming offers, detailing its implementation, communication with the operating system, classes available and their use. Both have tackled Swing AWT as: its main features, drawing mode, addressing performance and portability, as well as their differences. Emphasis will be given to Swing, due to new components offered that solve some problems encountered in the use of AWT. Are some examples of panels, using Swing components of the package.

TRANSCRIPT

Page 1: Graphics Capabilities of Java Platform

CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO ESTADO DE ALAGOASCOORDENADORIA DE INFORMATICALINGUAGEM DE PROGRAMAÇAO IIPROFESSOR MARCILIO JUNIOR

CAPACIDADES GRÁFICAS DA PLATAFORMAJAVA

Giovanni de A. CalheirosJoão Paulo de Lima Braga

Michel Alves dos Santos

Maceió, 16 de Fevereiro de 2004

Page 2: Graphics Capabilities of Java Platform

CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO ESTADO DE ALAGOASCOORDENADORIA DE INFORMATICALINGUAGEM DE PROGRAMAÇAO IIPROFESSOR MARCILIO JUNIOR

CAPACIDADES GRÁFICAS DA PLATAFORMAJAVA

Giovanni de A. CalheirosJoão Paulo de Lima Braga

Michel Alves dos Santos

Maceió, 16 de Fevereiro de 2004

Page 3: Graphics Capabilities of Java Platform

Introdução

Esta apresentação visa mostrar o funcionamento das capacidades gráficas que aplataforma de programação JAVA oferece, detalhando sua implementação,comunicação com o sistema operacional, classes disponíveis e utilização das mesmas.Tanto AWT quanto Swing terão abordados: suas características principais, modo dedesenho, abordagem de performance e portabilidade, além de suas diferenças. Serádado uma ênfase ao Swing, devido aos novos componentes oferecidos, que resolvemalguns problemas encontrados na utilização da AWT. Serão apresentados algunsexemplos de painéis, utilizando componentes do pacote Swing.

Page 4: Graphics Capabilities of Java Platform

AWT Abstract Windowing Toolkit – Caixa de ferramentas parajanelamento abstrato

Primeiro sistema de janelamento introduzido na plataforma JAVA, tendo porbase as diretrizes de cada sistema de janelamento (MOTIF – CDE, Windows GUI, MACGUI,...). Considerado pesado por muitos programadores, e além disso não tãoextensível pois a possibilidade de manufatura de componentes torna-se um trabalhoárduo. Resolvia a maioria dos problemas de programação, com base na criatividade doprogramador, pois não dispunha de componentes hoje existentes em Swing. Seríamoseufêmicos ao dizer que AWT usa por base apenas as diretivas do sistema nativo, seuacoplamento é mais enraizado, pois o desenho e a execução GUI fica por conta daplataforma nativa, ou seja pela API do SO. Os componentes do pacote java.awt sãodiretamente relacionados com as capacidades gráficas da plataforma hospedeiro. Osegredo é que o AWT executa apenas as funções comuns a todos os sistemas dejanela. Dessa forma, um mesmo programa JAVA pode apresentar aparências diversas,quando executado em diferentes plataformas. O que causa uma sensível perda emperformance e portabilidade. Para contornar a maioria dos problemas de janelamentouma classe de controle do ambiente foi introduzida, seu nome é GraphicsEnviroment(classe responsável por armazenar todo o contexto de ambiente da plataforma quehospeda a aplicação; exemplo: resolução presente, resolução máxima, profundidade decores em bits, cartão gráfico, número de ambientes em que esta rodando – terminais).

Mesmo assim os problemas de programação que necessitassem de um poucomais desse sistema encontrariam barreiras que poderiam ser facilmente transpostaspor meio de plataformas de programação RAD tais como: VB, Delphi, Clarion, TCL/TK,GTK, Glade, Lazarus, Visual C++, C Builder, claro que não alcançando a mesmaportabilidade que a linguagem JAVA propunha.

Além disso AWT conta apenas com um PLAF (Plataform Look-and-Feel) ou seja,uma única forma de apresentação da sua GUI variando de plataforma paraplataforma.

Java em AWT utiliza os chamados objetos equivalentes (bibliotecas .peer –bibliotecas que fazem referência a GUI do sistema operacional. Exemplo: peer doWindows, peer do MAC, peer MOTIF/CDE). Quase todos os componentes da AWT sãosub classes da classe Component.

Visão hierárquica da classe Component

java.lang.Object|+-- java.awt.Component | +--java.awt.Container | +--java.awt.Window | | | +--java.awt.Dialog | | | | | +--java.awt.FileDialog | | | +--java.awt.Frame | +--java.awt.Panel | +--java.applet.Applet

Page 5: Graphics Capabilities of Java Platform

Código para uso de frames em AWT.

/**

*class : AWTFrame – Exemplo que ilustra o uso de frames no AWT.

*@author : Turma de Java 2003.2

*data : 16/02/2004

**/

import java.awt.*;

import java.awt.event.*;

/**Classe que extende a classe Frame do sistema AWT*/

public class AWTFrame extends Frame {

/**Metodo principal*/

public static void main (String args[]){

AWTFrame fu = new AWTFrame();

fu.addWindowListener( new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

/**Propriedades*/

fu.setTitle("AWTFrame");

fu.setLocation(200,200);

fu.setSize(400,200);

fu.setVisible(true); //O metodo show() está ultrapassado.

}

/**Metodo de renderização ou pintura de todos as classes

*que derivam de component - ou melhor classes gráficas*/

public void paint(Graphics g){

g.setColor(Color.black);

g.drawRect(100,70,90,55);

g.fillRect(200,70,90,55);

}

}

Page 6: Graphics Capabilities of Java Platform

Visão dos Frames AWT

Frame awt sem sobreposição do método paint(). Awt não define por padrão o evento de janelawindowClosing, por isso esse deve ser implementado. Diferente do sistema Swing que tem seu métodosetDefaultCloseOperation disparado automaticamente nesse evento.

Frame awt com sobreposição do método paint(). É definido dentro do método o desenho de doisretângulos, um não preenchido e o outro totalmente. Nota-se que os frames awt tem por padrão opreenchimento na cor branca.

Page 7: Graphics Capabilities of Java Platform

Hierarquia dos componentes da AWT, mostrando os que herdam e os que extendem.

Page 8: Graphics Capabilities of Java Platform

Diagrama ou hierarquia das classes java.awt.peer, que é a implementação nativa dos componentesGUI da plataforma hospedeira. Essas classes recebem as solicitações feitas pelos componentes da AWT, talcomo execução de um método.

Criação de um botão. Veja a comunicação que é feita com a biblioteca peer da plataformahospedeira. Abaixo, a execução do método setLabel().

Page 9: Graphics Capabilities of Java Platform

SWING seguindo a tendência de nomenclatura usandonome de ritmos musicais.

Sistema de janelamento introduzido na plataforma JAVA para solucionar algunsproblemas decorrentes do projeto da AWT. O pacote Swing é parte do Java FoundationClasses (JFC) da plataforma Java. O JFC engloba um grupo de características paraajudar pessoas a construir GUIs. Swing usa por base toda a implementação dediretrizes da AWT e da classe GraphicsEnviroment, mas um ponto essencial deve serapresentado: o janelamento é feito pelo próprio SWING, ou seja, a própria JVM executao desenho dos componentes; pode parecer um trabalho extensivo, mas essa execuçãopoupa muito da implementação especifica, que seria ajustada para cada forma dejanelamento, fazendo com que esse sistema torne-se ainda mais portável, contandodessa forma com uma grande gama de componentes que podem ser estendidos,adaptados, combinado e “remanufatrados”.

Swing torna a plataforma JAVA uma “suíte de desenvolvimento” à altura delinguagens RAD (VB, Delphi, Clarion, Visual C++, Visual Cobol, etc), disponibilizandoas mesmas facilidades de desenho de interfaces, um completo sistema de cores,painéis especializados e componentes com alta facilidade de integração, mas para queessas facilidade sejam usufruídas uma IDE deve ser utilizada, pois o pacote JSDK daSUN não acompanha uma ferramenta de desenho de interfaces. Exemplo: NetBeans,Visual Café, Eclipse, Forte, dentre outras.

Arquitetura gráfica da plataforma hospedeira, demonstrando a extensão do sistema de janelamento Swing.

No AWT não são encontrados painéis especializados como JdesktopPane ouJInternalFrame, o último muito utilizado na implementação de aplicações MDI(MultipleData Interface), essa aplicação é essencialmente constituída de uma Janela mestre eas demais subordinadas a esta, daí a necessidade de janelas filho ou janelas internas.Antes (no AWT) os frames filhos eram apenas frames normais que tinham a opçãoFrame.CHILD setada. No decorrer do trabalho serão apresentados os componentesmais utilizados que constituem o pacote javax.swing: JFrame, JPanel, JInternalFrame,JLabel, JButton, JToggleButton, JCheckBox, JRadioButton, ButtonGroup, JList,JTextField, JTextArea, JTabbedPane, JScrollBar, JScrollPane, JPopupMenu, JComboBox,JMenu, JMenuBar, JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem,JOptionPane, JTable, JToolBar, dentre vários outros.

Page 10: Graphics Capabilities of Java Platform

Look-and-Feel das janelas do pacote javax.swing. Este PLAF, é chamado de cross-plataform ou metal.

Hierarquia da classe JFrame, mostrando sua derivação da classe Frame do pacote AWT. Diferentemente deFrame os objetos da classe Jframe tem alguma noção de como responder a ação de fechar janela impostapelo usuário. Por padrão a janela é escondida quando o usuário executa ação. O método que é executadodecorrente a ação pode ter seu valor mudado pelo método setDefaultCloseOperation() que recebe uminteiro para indicar a ação padrão de fechamento da janela (DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE,DISPOSE_ON_CLOSE, EXIT_ON_CLOSE – em exit_on_close o método exit da classe system é chamado,enquanto que em dispose apenas a janela é fechada liberando os recursos que ela alocou).

Especificação das novas classes implementadas em Java, incorporadas à nova especificação do JSDK, estávisível na figura que o pacote swing herda do pacote awt, dispensando seus problemas e utilizando suasqualidades. Uma verdadeira filtragem em suas propriedades (widgets). A especificação JFC tende a separaros pacotes java2D e java3D e os mecanismos de drag-and-drop. Mas todos eles estão dentro da mesmaespecificação.

A Relação entre os pacotes AWT e Swing das versões 1.1 e 1.2, quando deixou de ser uma biblioteca (.jar) para integrar o pacote.

java.lang.Object|+--java.awt.Component | +--java.awt.Container | +--java.awt.Window | +--java.awt.Frame | +--javax.swing.JFrame

Page 11: Graphics Capabilities of Java Platform

Hierarquia das classes do pacote javax.swing, observando os componentes top-levels. Esses componentesderivam da classe JPanel: JApplet, JDialog, JFrame, JWindow. As classes representadas por umparalelogramo são classes abstratas, que só podem ser herdadas.

Page 12: Graphics Capabilities of Java Platform

Diagrama de classe de uma JButton

ALGUNS COMPONENTES SWING. Aqui estão algumas dos componentes comumenteutilizados:

JButtons JComboBox JList

JDialog JMenu

Page 13: Graphics Capabilities of Java Platform

LOOK-AND-FEEL. O pacote javax.swing possui 4 formas de visualização de sua GUIusado em suas componentes, são elas : Java Look and Feel ( Metal/CrossPlataform ),CDE/Motif Look and Feel, MAC Look and Feel e Windows Look and Feel. Tendo presentea forma MAC Look and Feel apenas nas plataformas Macintosh. Veja o exemplo abaixo:

Java look and feel

CDE/Motif look and feel

Windows look and feel

JScrollPane JFrame

JTable (conhecido como grid em outras plataformas)

Page 14: Graphics Capabilities of Java Platform

O exemplo acima pode ser adquirido no site da sun na seguinte url :http://java.sun.com/docs/books/tutorial/uiswing/mini/secondexample.html , lá o leitorencontrará a classe SimpleExample.java, que mostra de forma básica de como mudara visualização para a GUI de sua escolha. Logo abaixo temos a visualização de algunscomponentes e seus respectivos look and feels: Metal, MAC, Motif.

Formas de apresentação da GUI em java.

Exemplo de caixas de alerta em Windows, CDE e plataforma Macintosh

Page 15: Graphics Capabilities of Java Platform

Tabela com nomes de componentes da JFC. Logo abaixo temos uma lista decomponentes da JFC (especificação java para novas classes). É notória a superioridadeem número de componentes Swing em relação a lista de componentes AWTapresentada na página número 7 deste trabalho. Essa lista foi tirada da seguintepágina da sun :http://java.sun.com/products/jlf/ed2/book/HIG.Classes2.html#39575,essa página faz parte da seção sobre o livro “Java Look and Feel Design Guidelines,second edition.”

Componente Nome Nome Comum

JApplet Applet

JButton Command button e toolbar button

JCheckBox Checkbox

JCheckBoxMenuItem Checkbox menu item

JColorChooser Color chooser

JComboBox Noneditable e editable combo boxes

JDesktopPane Backing window

JDialog Dialog box, secondary window, e utilitywindow

JEditorPane Editor pane

JFrame Primary window

JInternalFrame Internal window, minimized internalwindow, e internal utility window

JLabel Label

JList List components (list boxes e e listasselecionáveis)

JMenu Drop-down menu e submenu

JMenuBar Menu bar

JMenuItem Menu item

Page 16: Graphics Capabilities of Java Platform

JOptionPane Alert box/Caixa de alerta

JPanel Panel

JPasswordField Password field/Campo de senha

JPopupMenu Contextual menu

JProgressBar Progress bar/Barra de progresso

JRadioButton Radio button

JRadioButtonMenuItem Radio button menu item

JScrollBar Scrollbar

JScrollPane Scroll pane

JSeparator Separator

JSlider Slider

JSplitPane Split pane

JTabbedPane Tabbed pane

JTable Table

JTextArea Plain text area

JTextField Noneditable e editable text fields (singleline)

JTextPane Editor pane com editor kit plug-inestilizado.

JToggleButton Toggle button e toolbar toggle button

JToolBar Toolbar

Page 17: Graphics Capabilities of Java Platform

JToolTip Tool tip/rótulo de dicas

JTree Tree component/Árvore

JWindow Janela Plana, sem barra de título.

GERENCIADORES DE EVENTOS. No exata momento em que optamos por trabalharcom interfaces gráficas, temos que aprender a lidar com os eventos. As interfacesgráficas são elementos baseados em eventos. De uma maneira geral eventos sãointerações disparadas por usuários ou pelo próprio sistema. Mover o mouse é umevento, fechar uma janela é um outro evento. Eventos ocorrem a todo instante nosaplicativo modernos e, portanto devemos compreender como tratá-los. Quando umusúario interage com um objeto da interface gráfica, um evento é enviadoautomaticamente para o programa, na expectativa de que ele seja identificado econvenientemente tratado para produzir algum tipo de resposta à ação realizada sobreo objeto.

O processamento de um evento exige duas providências :

1 – Registrar um ouvinte de eventos (listener);2 – Implementar um manipulador de eventos (handler).

O registro de eventos se processa através de interfaces disponibilizadas porpacotes do Java, como java.awt.event e javax.swing.event. Há, em Java, diversostipos de ouvintes de eventos. A interface EventListener, disponibilizada pelo pacotejava.util, deriva diversas sub-interfaces que se preocupam em ouvir eventosespecíficos.

Listamos abaixo, as que julgamos mais utilizadas :

ActionListener – eventos de ação: clicar num botão.ComponentListener – eventos de componentes: redimensionar uma janela.ContainerLIstener - eventos de contêineres : adicionar ou remover um objeto

de um contêiner.FocusListener – eventos relacionados ao foco dos objetos : quando um objeto

recebe ou perde o foco.KeyListener – recebe eventos relacionados ao teclado.MouseListener – eventos relacionados ao mouse.WindowListener – eventos relacionados as janelas : redimensionar,minimizar, fechar, etc.Exemplo : Trecho de código referente ao registro de um ouvinte e implementação de um handler

para um evento de janela. frameExemplo.addWindowListener( new WindowAdapter() {

public void windowClosing(WindowEvent e) { System.exit(0); } });

Page 18: Graphics Capabilities of Java Platform

Logo abaixo a lista com a hierarquia de interfaces do pacote java.awt.event:

Hierarquia de Interfaces interface java.util.EventListener

interface java.awt.event.ActionListenerinterface java.awt.event.AdjustmentListenerinterface java.awt.event.AWTEventListenerinterface java.awt.event.ComponentListenerinterface java.awt.event.ContainerListenerinterface java.awt.event.FocusListenerinterface java.awt.event.HierarchyBoundsListenerinterface java.awt.event.HierarchyListenerinterface java.awt.event.InputMethodListenerinterface java.awt.event.ItemListenerinterface java.awt.event.KeyListenerinterface java.awt.event.MouseListenerinterface java.awt.event.MouseMotionListenerinterface java.awt.event.MouseWheelListenerinterface java.awt.event.TextListenerinterface java.awt.event.WindowFocusListenerinterface java.awt.event.WindowListenerinterface java.awt.event.WindowStateListener

ActionListener : Uma pequena ilustração sobre o evento action listener.

ActionListener é uma interface Java implementada por muitos componentes da GUI,tais como botões. Tem somente um método – actionPerformed. Aqui esta suadefinição:

public Interface ActionListener {public void actionPerformed(ActionEvent e)

}

GERENCIADORES DE LAYOUT. Na tentativa de facilitar as coisas para osprogramadores, Java oferece classes que especificam como os componentes devem serposicionados em um contêiner. Essas classes são conhecidas como gerenciadores delayout. Os tipos propostos pela linguagem são : Border Layout , Flow Layout, GridLayout, Box, Card, GridBag e Null Layout (que na verdade não é um gerenciador massim a falta de um). Vamos falar sobre alguns deles.

Page 19: Graphics Capabilities of Java Platform

Border Layout. Gerenciador padrão dos objetos JFrame, de acordo com essegerenciador o conteiner pode ser visto como uma área dividida em cinco regiões :Norte, Sul, Leste , Oeste e Centro. Em cada uma dessas áreas um novo objeto pode serinserido , podendo esse novo objeto um conteiner com o seu próprio gerenciador delayout.

Border Layout

Flow Layout. Gerenciador de layout baseado em fluxo, sendo a disposição dos objetosadicionados da esquerda para a direita e , em seguida, centralizados na ordem que sãoadicionados ao conteiner.

Flow Layout

Page 20: Graphics Capabilities of Java Platform

Card Layout. Permite empilhar objetos como se fossem cartas de um baralho.

Podemos colocar painéis uns em cima dos outros ...

... e podemos visualizá-los no momento em que quisermos.

Page 21: Graphics Capabilities of Java Platform

Grid Layout. Define um layout em forma de grade, com o número de linhasnecessárias para conter os objetos. O detalhe é que os objetos serão sempre domesmo tamanho e se ajustarão automaticamente a qualquer variação no tamanho dajanela.

Grid Layout.

Grid Layout. A exemplo do gerenciador GridLayout, também organiza objetos em umagrade. Entretanto trata-se de um gerenciador muito mais flexível, poderoso ecomplexo, permitindo alinhar objetos vertical e horizontalmente, sem impor que todosos objetos tenham o mesmo tamanho.

GridBag Layout

Page 22: Graphics Capabilities of Java Platform

REFERÊNCIAS BIBLIOGRÁFICAS

JAVA 2, Fundamentos, Swing e JDBC. Ivan Mecenas.Java NutShell, Editora O´reilly.Java como programar , Deitel.

REFERÊNCIAS ELETRÔNICAS

http://java.sun.com http://java.sun.com/products/jfc/tsc/articles/jlf-design/http://java.sun.com/developer/techDocs/hi/repository/index.htmlhttp://java.sun.com/products/jlf/at/book/http://java.sun.com/developer/techDocs/hi/repository/http://java.sun.com/products/jlf/ed2/guidelines.htmlhttp://java.sun.com/developer/techDocs/hi/repository/TBG_Text.htmlhttp://java.sun.com/products/jfc/tsc/articles/jlf-metal-report/http://java.sun.com/developer/techDocs/hi/repository/TBG_Table.htmlhttp://java.sun.com/developer/techDocs/hi/repository/TBG_Navigation.htmlhttp://java.sun.com/developer/techDocs/hi/repository/TBG_Media.htmlhttp://java.sun.com/developer/techDocs/hi/repository/TBG_Development.htmlhttp://java.sun.com/products/jlf/ed2/book/HIG.Visual.htmlhttp://java.sun.com/products/jlf/ed2/book/HIG.Visual2.html