Faculdade Cotemig


Treinar


Downloads

Plano de Ensino

Imagens das peças de Xadrez

AI (25/09) 30,0 pontos - Materia da prova: APPLETS, FRAMES (init(), paint(), ...); GRAPHICS (drawLine(), drawRect(), drawString(), drawImage() ); GUI, EVENTOS ( componentes e eventos )

 

 

 

01 - Frames

Exemplo Frame

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


public class Exemplo extends JFrame {
	
	public Exemplo() {
		super ("Um programa simples");
		setSize( 600, 300 );
	    setVisible(true);
	  
	}

   	public void paint (Graphics g)
	{
		super.paint(g);

		g.drawString("oi mundo", 100, 100);  
		g.drawLine(100, 100, 200, 200);  

	}

	public static void main(String[] args) {
		Exemplo app = new Exempo4();

	    app.addWindowListener( new WindowAdapter() {
           	public void windowClosing( WindowEvent e ) {
        		System.exit( 0 );
        	}
        });

	}	
}
02 - Applets

JApplets

  • Applets são programas escritos em Java que podem ser incluídos em uma página HTML;
  • Sua visualização é possível graças a um plug-in Java, instalado no navegador;

Download dos códigos-fontes desta página

disquete 01 Applet.zip

Criando um applet

import java.awt.Graphics;
import javax.swing.JApplet;

public class OiMundo extends JApplet {
        public void paint(Graphics g) {
                g.drawString("Oi mundo!", 50, 25);
        }
}

Compilando e executando um applet

  • hand 1. Salve o código-fonte acima em um arquivo OiMundo.java e compile.
  • hand 2. Acrescente em um arquivo HTML o applet.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<center>
<applet
code = "OiMundo.class"
width = "150"
height = "25"></applet>
</center>
</body>
</html>

  • hand 3. Execute o applet utilizando o appletviewer.
 appletviewer oimundo.html

Funcionamento do applet

  • Um applet possui quatro métodos:
    • init():
      • Inicializar uma applet;
    • start():
      • Após a execução do init() este método é chamado;
    • stop():
      • É chamado quando a página HTML é fechada no navegador;
    • destroy():
      • É executado quando o navegador termina normalmente;

Exemplo applet como os seus métodos

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

public class Status extends JApplet {
        
        StringBuffer sb = new StringBuffer();
        
        public void init() {
                System.out.println(sb.append("init "));
        }
        
        public void start() {
                System.out.println(sb.append("start "));
        }
        
        public void stop() {
                System.out.println(sb.append("stop "));
        }
        
        public void destroy() {
                System.out.println(sb.append("destroy "));
        }
        
        public void paint(Graphics g) {
                g.drawString(sb.toString(), 10, 10);
        }
}

Segurança

  • Sempre que uma applet tenta violar as regras de segurança, o gerenciador de segurança lança uma exceção SecurityException;
  • Uma applet também não pode:
    • executar programas na máquina do usuário;
    • comunicar com outros computadores;
    • ler ou gravar arquivos no sistema operacional do usuário;
    • ler informações da máquina do usuário

Passando parâmetros para applets

  • Para passar parâmetros a uma applet, usa-se a tag PARAM:
import javax.swing.JApplet;
import java.awt.Graphics;
import java.awt.Font;

public class Parametro extends JApplet {
        
        String font;
        int size;
        
        public void init() {
                font=getParameter("font");
                size=Integer.parseInt(getParameter("size"));
        }
        
        public void paint(Graphics g) {
                g.setFont(new Font(font, Font.PLAIN, size));
                g.drawString("Oi Mundo!!!", 5, 15);
        }
}

Janelas e Applets

  • É possível lançar janelas a partir de uum applet em uma página HTML.
import javax.swing.JFrame;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import java.awt.Toolkit;
import java.awt.Dimension;

public class FrameDesktop extends JFrame {
        public FrameDesktop() {

                super("Frames Interno");
                this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                
                //Dimensiona a janela principal
                int inset = 50;
                Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                this.setBounds(inset, inset, screenSize.width - inset*2,
                screenSize.height-inset*2);
                
                JDesktopPane desktop = new JDesktopPane();
                
                JInternalFrame frame1 = new FrameInterno("Janela 1");
                frame1.setVisible(true);
                frame1.setLocation(50, 50);
                
                JInternalFrame frame2 = new FrameInterno("Janela 2");
                frame2.setVisible(true);
                frame2.setLocation(360, 50);
                
                desktop.add(frame1);
                desktop.add(frame2);
                this.setContentPane(desktop);
                
                this.setVisible(false);
        }
        
        public static void main(String[] args) {
                new FrameDesktop();
        }
        
        class FrameInterno extends JInternalFrame {
                private String titulo;
                public FrameInterno(String titulo) {

                        super(titulo,true,true,true,true);
                        this.titulo=titulo;
                        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                        this.setSize(300,200);
                }
                
                public String getTitle() {
                        return titulo;
                }
        }
}

Criando a applet que chama a janela acima:

import javax.swing.JButton;
import javax.swing.JApplet;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LancarFrameApplet extends JApplet implements ActionListener {
        private JFrame frame = new FrameDesktop();
        public void init() {
                JButton botao = new JButton("Chamar Janela");
                botao.addActionListener(this);
                getContentPane().add(botao);
                frame.setVisible(false);
        }
        
        public void actionPerformed(ActionEvent evt) {
                if (frame.isVisible())
                frame.setVisible(false);
                else
                frame.setVisible(true);
        }
}

Links indicados

  • http://java.sun.com/applets/
    • Excelente página da Sun onde é possível encontrar vários links para informações sobre Applets, como exemplos e documentos.

Exercícios de revisão

1 - Qual é a função das ferramentas:

  • appletviewer
  • htmlconverter

2 - Por que o Java Plug-in se tornou essencial para a execução de applets java em navegadores?

3 - Quais são as principais diferenças entre aplicações stand-alone e applets?

4 - Adapte o exemplo de aplicação stand-alone de menu simples abaixo, criando um applet que o lança automaticamente:

import javax.swing.*;
public class TesteMenuSimples {
        public static void main(String[] args) {

                // Criando itens de menu
                JMenuItem menuItem1 = new JMenuItem("Abrir");
                JMenuItem menuItem2 = new JMenuItem("Salvar");
                JMenuItem menuItem3 = new JMenuItem("Fechar");
                
                // Criando um menu e inserindo os itens de menu
                JMenu menu= new JMenu("Arquivo");
                menu.add(menuItem1);
                menu.add(menuItem2);      
                menu.add(menuItem3);      
                
                // Criando uma barra de menus e inserindo o menu
                JMenuBar menuBar = new JMenuBar();      
                menuBar.add(menu);
                
                // Inserindo a barra de menus na janela
                JFrame f = new JFrame();
                f.setJMenuBar(menuBar);
                f.setSize(100,100);
                f.setLocation(200,200);
                f.setVisible(true);
        }
}

5 - Adapte o código de aplicação java que faz a escrita em arquivo, transformando-o em um applet que tenta gravar um arquivo:

import java.io.*;

public class GravaArquivo {
        public static void main(String[] args) throws IOException {
                PrintWriter pw = new PrintWriter(new FileOutputStream("teste.txt"));
                pw.println("ola!");
                pw.close();
        }
}

  • Verifique:
    • Se houve realmente gravação de arquivo;
    • Se houve mensagem de erro e onde apareceram;
03 - Eventos

EVENTOS

O que é um evento? 

Quando o usuário executa uma ação à interface de usuário, isto causa um evento a ser emitido. Eventos são objetos que descrevem o que aconteceu. Vários tipos diferentes de classes de eventos existem para descrever categorias gerais diferentes de ação de usuário.

Fontes de evento  

Uma fonte de evento (ao nível de interface de usuário) é o resultado de alguma ação de usuário em um componente. Por exemplo, um clque de mouse em um componente de botão irá gerar um ActionEvent. 

Manipuladores de evento  

Quando um evento acontece, o evento é recebido pelo componente com o que o usuário interagiu; por exemplo, o botão, campo de texto, e assim por diante. Um manipulador de evento é um método que recebe o objeto de Evento de forma que o programa pode processar a interação do usuário.

Como são processados Eventos 

No modelo de evento de delegação, são enviados eventos a componentes, onde cada componente registrar  uma rotina de manipulação de eventos (listener) para receber o evento. Deste modo o manipulador de eventos pode estar em uma classe separada do componente. A manipulação do evento é delegada então à classe separada.

Modelo de delegação

* Não são dirigidos eventos acidentalmente.  

* É possível criar filtro (adaptador) de classes para classificar ações de evento.  

* O modelo de delegação é muito melhor para a distribuição de trabalho entre classes.  


	private class BotaoEvento implements ActionListener	{
	   public void actionPerformed( ActionEvent e ) {
	      JOptionPane.showMessageDialog( null, "Clicou no botão" );
	   }
	}

	private class Eventos implements ItemListener {
	   public void itemStateChanged( ItemEvent e ) {
	      if ( e.getSource() == c5 ) {
	         if ( e.getStateChange() == ItemEvent.SELECTED ) 
	            JOptionPane.showMessageDialog( null, "Marcado" );
	         else
	            JOptionPane.showMessageDialog( null, "Desmarcado" );
	      }
	      if ( e.getSource() == c6 ) {
	         c1.setText("marcou 1" );
			}
		  if ( e.getSource() == c7 ) {
	         c1.setText("marcou 2" );
			}
	      if ( e.getSource() == c9 ) {
	         c1.setText( c10[ c9.getSelectedIndex() ] );
	      }
	   }
	}	

Eventos do Teclado

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

public class Teclado extends JFrame implements KeyListener {
   private String linha1 = "", linha2 = "", linha3 = "";
   private JTextArea texto;

   public Teclado()
   {
      super( "Eventos do teclado" );

      texto = new JTextArea( 10, 15 );
      texto.setText( "Pressione qualquer tecla..." );
      texto.setEnabled( false );

      addKeyListener( this );

      getContentPane().add( texto );  

      setSize( 350, 100 );
      show();
   }

   public void keyPressed( KeyEvent e )
   {
      linha1 = "Tecla: " + e.getKeyText( e.getKeyCode() );
      setLinhas2e3( e );
   }

   public void keyReleased( KeyEvent e )
   {
      linha1="Última tecla pressionada:"+e.getKeyText( e.getKeyCode() );
      setLinhas2e3( e );
   }

   public void keyTyped( KeyEvent e )
   {
      linha1 = "Tecla que está sendo pressionada: " + e.getKeyChar();
      setLinhas2e3( e );
   }

   private void setLinhas2e3( KeyEvent e )
   {
      linha2="A tecla: "+(e.isActionKey()?" é uma " : "não é uma " ) + 
               "tecla de ação";

      String temp = e.getKeyModifiersText( e.getModifiers() );

      linha3 = "Tecla modificadora pressionada: " +
               ( temp.equals( "" ) ? "nenhuma" : temp );

      texto.setText( linha1 + "n" + linha2 + "n" + linha3 + "n" );
   }

   public static void main( String args[] )
   {
      Teclado app = new Teclado();

      app.addWindowListener(
         new WindowAdapter() {
            public void windowClosing( WindowEvent e )
            {
               System.exit( 0 );
            }
         }
      );
   }
}
  

Eventos do Mouse

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

public class 
   Mouse extends JFrame implements MouseListener, MouseMotionListener {
   private JLabel barraDeStatus;

   public Mouse()
   {
      super( "Eventos do mouse" );

      barraDeStatus = new JLabel();
      getContentPane().add( barraDeStatus, BorderLayout.SOUTH );
    
      addMouseListener( this );
      addMouseMotionListener( this );

      setSize( 275, 100 );
      setVisible(true);
   }

   public void mouseClicked( MouseEvent e )
   {
      barraDeStatus.setText( "Clicado em [" + e.getX() +
                         ", " + e.getY() + "]" );
   }

   public void mousePressed( MouseEvent e )
   {
      barraDeStatus.setText( "Sendo pressionado em [" + e.getX() +
                         ", " + e.getY() + "]" );
   }

   public void mouseReleased( MouseEvent e )
   {
      barraDeStatus.setText( "Posição do mouse alterada para [" + e.getX() +
                         ", " + e.getY() + "]" );
   }

   public void mouseEntered( MouseEvent e )
   {
      barraDeStatus.setText( "Mouse dentro da janela" );
   }

   public void mouseExited( MouseEvent e )
   {
      barraDeStatus.setText( "Mouse fora da janela" );
   }

   public void mouseDragged( MouseEvent e )
   {
      barraDeStatus.setText( "Movendo para [" + e.getX() +
                         ", " + e.getY() + "]" );
   }

   public void mouseMoved( MouseEvent e )
   {
      barraDeStatus.setText( "Movido para [" + e.getX() +
                         ", " + e.getY() + "]" );
   }

   public static void main( String args[] )
   { 
      Mouse app = new Mouse();

      app.addWindowListener(
         new WindowAdapter() {
            public void windowClosing( WindowEvent e )
            {
               System.exit( 0 );
            }
         }
      );
   }
}
  

 

04 - Componentes GUI

COMPONENTES DA BIBLIOTECA AWT E SWING

* Reconheça os componentes chaves da biblioteca AWT e SWING.  

Java fornece o pacote java.awt e o pacote javax.swing que contêm as classes para a geração de componentes gráficos. Os programas em Java utilizam o objeto Graphics para que possam traçar linhas ou escrever textos na tela.

Posição dos componentes

A posição dos componentes no container é determinado pelo gerente de layout. O tamanho dos componentes é também de responsabilidade do gerente de layout.

* Use os componentes gráficos para construir interfaces de usuário para programas reais.

	import javax.swing.*;
	import java.awt.*;
	import java.awt.event.*;
	public class Gui extends JFrame {
		private JLabel c1;
		private JTextField c2;
		private JPasswordField c3;
		private JButton c4;
		private JCheckBox c5;
		private JRadioButton c6;
		private JRadioButton c7;
		private ButtonGroup c8;
		private JComboBox c9;
		private String c10[] = { "opcao 1","opcao 2", "opcao 3" };
				
		public Gui() {
			super("Teste");
			Container c = getContentPane();
			c.setLayout ( new FlowLayout() );
			
			// acrescente os componentes no container c
	
			setSize(500,300);
			setVisible(true);
		}
		
		public static void main(String args[]) {
			Gui app = new Gui();
			app.addWindowListener (
				new WindowAdapter() {
					public void windowClosing
					( WindowEvent e) {
						System.exit(0);
					}
				}
			);
		}
		
		// acrescente aqui as classes internas para tratar os eventos
	
	}

Label

Label é um objeto simples que mostra uma linha simples de texto.

	c1 = new JLabel("Rótulo");
	c.add(c1);

TextField e PasswordField

TextField e PasswordField são objetos simples que permitem a digitação dentro dele.

	c2 = new JTextField(10);
	c.add(c2);
	c3 = new JPasswordField(10);
	c.add(c3);

Buttons

É uma das interfaces básicas, que é ativa após ser pressionada.

	c4 = new JButton("Clique aqui");
	c.add(c4);

	BotaoEvento be = new BotaoEvento();
	c4.addActionListener( be );

Checkboxes

Checkbox fornece uma interface simples, aonde as opções possíveis são “on/off”.

	Eventos ie = new Eventos();
	c5 = new JCheckBox("Marcar");
	c.add(c5);
	c5.addItemListener( ie );

RadioGroups

RadioGroups é um tipo de botão especial, diferenciando do anterior pelo sinal de seleção, no caso uma bolinha, e aonde apenas uma opção poderá ser marcada.

	Eventos ie = new Eventos();
	c6 = new JRadioButton("Radio 1", true );
	c.add(c6);
	c7 = new JRadioButton("Radio 2", false );
	c.add(c7);
	c6.addItemListener(ie);
	c7.addItemListener(ie);
	c8 = new ButtonGroup();
	c8.add( c6 );
	c8.add( c7 );

ComboBox

O ComboBox fornece uma seleção simples dentro de uma lista de opções.

	Eventos ie = new Eventos();
	c9 = new JComboBox(c10);
	c.add( c9 );
	c9.addItemListener( ie );

TextArea

TextArea é um objeto mais completo que permite a digitação de várias linhas dentro dele.

List

O List é um tipo de ComboBox, mas que permite a seleção múltipla dentro da lista de opções.

Canvas

Canvas é uma tela de fundo (papel de parede) aonde irão ser adicionados componentes.

O setLayout()

Cria uma instância do fluxo do gerente de layout, aonde é colocado o Frame.

O new Button()

Cria uma instância da classe java.awt.Button. O botão é o local na janela aonde é pressionado para que se tenha uma ação.

O add()

Este método adiciona elementos (botões, caixas de texto, etc.) ao frame.

O pack()

Este método fixa o tamanho dos elementos no frame.

O setVisible()

Este método torna os elementos visíveis no frame.

O Flow Layout Manager

O flow layout para posicionar componentes em uma determinada linha ou conjunto de linhas. A cada instante uma nova linha fica cheia e uma nova linha é começada.

O Border Layout Manager

É mais complexo do que o Flow Layout Manager, pois fornece componentes que possibilitam manusear o posicionamento do elemento dentro do container.

O Grid Layout Manager

Você pode criar linha e colunas dentro de seu container.

O CardLayout

Permite a você criar duas interfaces semelhantes a botões, sendo entretanto, o painel completo.

Frame

É uma armação aonde são inseridos diversos elementos como: botões, labels, etc.

Panels

São recipientes aonde são inseridos diversos elementos como: botões, labels, etc.

Controlando Aspectos Visuais

Colors

Existem dois métodos para controlar as cores:

· SetForeground()

· SetBackground()

Fonts

É utilizado para controlar os tipos de fontes.

Printing

Frame f = new Frame(“Print test”)

Métodos

setLabel() Usado para alterar rótulos de botões

reshape() Usado para alterar a forma e a posição de um botão

getLabel() Usado para obter o rótulo do boltão

show() mostras

ride() esconde

enable() habilita

disable() desabilita

showStatus() mostra um texto na barra de status

setText() define o texto

appendText() anexa um texto

toString() coverte em forma de uma string

 



gerson@plixsite.com