Graphics Capabilities of Java Platform
Upcoming SlideShare
Loading in...5
×
 

Graphics Capabilities of Java Platform

on

  • 268 views

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 ...

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.

Statistics

Views

Total Views
268
Views on SlideShare
268
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Graphics Capabilities of Java Platform Graphics Capabilities of Java Platform Document Transcript

  • 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
  • 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
  • Introdução Esta apresentação visa mostrar o funcionamento das capacidades gráficas que a plataforma 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 de desenho, abordagem de performance e portabilidade, além de suas diferenças. Será dado uma ênfase ao Swing, devido aos novos componentes oferecidos, que resolvem alguns problemas encontrados na utilização da AWT. Serão apresentados alguns exemplos de painéis, utilizando componentes do pacote Swing.
  • AWT  Abstract Windowing Toolkit – Caixa de ferramentas para janelamento abstrato Primeiro sistema de janelamento introduzido na plataforma JAVA, tendo por base as diretrizes de cada sistema de janelamento (MOTIF – CDE, Windows GUI, MAC GUI,...). Considerado pesado por muitos programadores, e além disso não tão extensí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 do programador, pois não dispunha de componentes hoje existentes em Swing. Seríamos eufêmicos ao dizer que AWT usa por base apenas as diretivas do sistema nativo, seu acoplamento é mais enraizado, pois o desenho e a execução GUI fica por conta da plataforma nativa, ou seja pela API do SO. Os componentes do pacote java.awt são diretamente relacionados com as capacidades gráficas da plataforma hospedeiro. O segredo é que o AWT executa apenas as funções comuns a todos os sistemas de janela. Dessa forma, um mesmo programa JAVA pode apresentar aparências diversas, quando executado em diferentes plataformas. O que causa uma sensível perda em performance e portabilidade. Para contornar a maioria dos problemas de janelamento uma classe de controle do ambiente foi introduzida, seu nome é GraphicsEnviroment (classe responsável por armazenar todo o contexto de ambiente da plataforma que hospeda a aplicação; exemplo: resolução presente, resolução máxima, profundidade de cores 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 pouco mais desse sistema encontrariam barreiras que poderiam ser facilmente transpostas por 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 mesma portabilidade 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 para plataforma. Java em AWT utiliza os chamados objetos equivalentes (bibliotecas .peer – bibliotecas que fazem referência a GUI do sistema operacional. Exemplo: peer do Windows, peer do MAC, peer MOTIF/CDE). Quase todos os componentes da AWT são sub 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
  • 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); } }
  • Visão dos Frames AWT Frame awt sem sobreposição do método paint(). Awt não define por padrão o evento de janela windowClosing, por isso esse deve ser implementado. Diferente do sistema Swing que tem seu método setDefaultCloseOperation disparado automaticamente nesse evento. Frame awt com sobreposição do método paint(). É definido dentro do método o desenho de dois retângulos, um não preenchido e o outro totalmente. Nota-se que os frames awt tem por padrão o preenchimento na cor branca.
  • Hierarquia dos componentes da AWT, mostrando os que herdam e os que extendem.
  • Diagrama ou hierarquia das classes java.awt.peer, que é a implementação nativa dos componentes GUI da plataforma hospedeira. Essas classes recebem as solicitações feitas pelos componentes da AWT, tal como execução de um método. Criação de um botão. Veja a comunicação que é feita com a biblioteca peer da plataforma hospedeira. Abaixo, a execução do método setLabel().
  • SWING  seguindo a tendência de nomenclatura usando nome de ritmos musicais. Sistema de janelamento introduzido na plataforma JAVA para solucionar alguns problemas decorrentes do projeto da AWT. O pacote Swing é parte do Java Foundation Classes (JFC) da plataforma Java. O JFC engloba um grupo de características para ajudar pessoas a construir GUIs. Swing usa por base toda a implementação de diretrizes da AWT e da classe GraphicsEnviroment, mas um ponto essencial deve ser apresentado: o janelamento é feito pelo próprio SWING, ou seja, a própria JVM executa o desenho dos componentes; pode parecer um trabalho extensivo, mas essa execução poupa muito da implementação especifica, que seria ajustada para cada forma de janelamento, fazendo com que esse sistema torne-se ainda mais portável, contando dessa 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 de linguagens RAD (VB, Delphi, Clarion, Visual C++, Visual Cobol, etc), disponibilizando as mesmas facilidades de desenho de interfaces, um completo sistema de cores, painéis especializados e componentes com alta facilidade de integração, mas para que essas facilidade sejam usufruídas uma IDE deve ser utilizada, pois o pacote JSDK da SUN 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 ou JInternalFrame, o último muito utilizado na implementação de aplicações MDI(Multiple Data Interface), essa aplicação é essencialmente constituída de uma Janela mestre e as 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ção Frame.CHILD setada. No decorrer do trabalho serão apresentados os componentes mais 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.
  • 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 de Frame os objetos da classe Jframe tem alguma noção de como responder a ação de fechar janela imposta pelo usuário. Por padrão a janela é escondida quando o usuário executa ação. O método que é executado decorrente a ação pode ter seu valor mudado pelo método setDefaultCloseOperation() que recebe um inteiro 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 suas qualidades. Uma verdadeira filtragem em suas propriedades (widgets). A especificação JFC tende a separar os pacotes java2D e java3D e os mecanismos de drag-and-drop. Mas todos eles estão dentro da mesma especificaçã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
  • Hierarquia das classes do pacote javax.swing, observando os componentes top-levels. Esses componentes derivam da classe JPanel: JApplet, JDialog, JFrame, JWindow. As classes representadas por um paralelogramo são classes abstratas, que só podem ser herdadas.
  • Diagrama de classe de uma JButton ALGUNS COMPONENTES SWING. Aqui estão algumas dos componentes comumente utilizados: JButtons JComboBox JList JDialog JMenu
  • LOOK-AND-FEEL. O pacote javax.swing possui 4 formas de visualização de sua GUI usado 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 presente a 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)
  • 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 leitor encontrará a classe SimpleExample.java, que mostra de forma básica de como mudar a visualização para a GUI de sua escolha. Logo abaixo temos a visualização de alguns componentes 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
  • Tabela com nomes de componentes da JFC. Logo abaixo temos uma lista de componentes da JFC (especificação java para novas classes). É notória a superioridade em número de componentes Swing em relação a lista de componentes AWT apresentada na página número 7 deste trabalho. Essa lista foi tirada da seguinte pá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 utility window JEditorPane Editor pane JFrame Primary window JInternalFrame Internal window, minimized internal window, e internal utility window JLabel Label JList List components (list boxes e e listas selecionáveis) JMenu Drop-down menu e submenu JMenuBar Menu bar JMenuItem Menu item
  • 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 JRadioButtonMenuIte m 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 (single line) JTextPane Editor pane com editor kit plug-in estilizado. JToggleButton Toggle button e toolbar toggle button JToolBar Toolbar
  • 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 trabalhar com interfaces gráficas, temos que aprender a lidar com os eventos. As interfaces gráficas são elementos baseados em eventos. De uma maneira geral eventos são interações disparadas por usuários ou pelo próprio sistema. Mover o mouse é um evento, fechar uma janela é um outro evento. Eventos ocorrem a todo instante nos aplicativo modernos e, portanto devemos compreender como tratá-los. Quando um usúario interage com um objeto da interface gráfica, um evento é enviado automaticamente para o programa, na expectativa de que ele seja identificado e convenientemente tratado para produzir algum tipo de resposta à ação realizada sobre o 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 por pacotes do Java, como java.awt.event e javax.swing.event. Há, em Java, diversos tipos de ouvintes de eventos. A interface EventListener, disponibilizada pelo pacote java.util, deriva diversas sub-interfaces que se preocupam em ouvir eventos especí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); } });
  • 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.ActionListener interface java.awt.event.AdjustmentListener interface java.awt.event.AWTEventListener interface java.awt.event.ComponentListener interface java.awt.event.ContainerListener interface java.awt.event.FocusListener interface java.awt.event.HierarchyBoundsListener interface java.awt.event.HierarchyListener interface java.awt.event.InputMethodListener interface java.awt.event.ItemListener interface java.awt.event.KeyListener interface java.awt.event.MouseListener interface java.awt.event.MouseMotionListener interface java.awt.event.MouseWheelListener interface java.awt.event.TextListener interface java.awt.event.WindowFocusListener interface java.awt.event.WindowListener interface 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 sua definição: public Interface ActionListener { public void actionPerformed(ActionEvent e) } GERENCIADORES DE LAYOUT. Na tentativa de facilitar as coisas para os programadores, Java oferece classes que especificam como os componentes devem ser posicionados em um contêiner. Essas classes são conhecidas como gerenciadores de layout. Os tipos propostos pela linguagem são : Border Layout , Flow Layout, Grid Layout, Box, Card, GridBag e Null Layout (que na verdade não é um gerenciador mas sim a falta de um). Vamos falar sobre alguns deles.
  • Border Layout. Gerenciador padrão dos objetos JFrame, de acordo com esse gerenciador 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 ser inserido , podendo esse novo objeto um conteiner com o seu próprio gerenciador de layout. Border Layout Flow Layout. Gerenciador de layout baseado em fluxo, sendo a disposição dos objetos adicionados da esquerda para a direita e , em seguida, centralizados na ordem que são adicionados ao conteiner. Flow Layout
  • 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.
  • Grid Layout. Define um layout em forma de grade, com o número de linhas necessárias para conter os objetos. O detalhe é que os objetos serão sempre do mesmo tamanho e se ajustarão automaticamente a qualquer variação no tamanho da janela. Grid Layout. Grid Layout. A exemplo do gerenciador GridLayout, também organiza objetos em uma grade. Entretanto trata-se de um gerenciador muito mais flexível, poderoso e complexo, permitindo alinhar objetos vertical e horizontalmente, sem impor que todos os objetos tenham o mesmo tamanho. GridBag Layout
  • 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.html http://java.sun.com/products/jlf/at/book/ http://java.sun.com/developer/techDocs/hi/repository/ http://java.sun.com/products/jlf/ed2/guidelines.html http://java.sun.com/developer/techDocs/hi/repository/TBG_Text.html http://java.sun.com/products/jfc/tsc/articles/jlf-metal-report/ http://java.sun.com/developer/techDocs/hi/repository/TBG_Table.html http://java.sun.com/developer/techDocs/hi/repository/TBG_Navigation.html http://java.sun.com/developer/techDocs/hi/repository/TBG_Media.html http://java.sun.com/developer/techDocs/hi/repository/TBG_Development.html http://java.sun.com/products/jlf/ed2/book/HIG.Visual.html http://java.sun.com/products/jlf/ed2/book/HIG.Visual2.html