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
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
import java.awt.Graphics;
import javax.swing.JApplet;
public class OiMundo extends JApplet {
public void paint(Graphics g) {
g.drawString("Oi mundo!", 50, 25);
}
}
<!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>
appletviewer oimundo.html
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);
}
}
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);
}
}
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;
}
}
}
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);
}
}1 - Qual é a função das ferramentas:
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();
}
}
03 - Eventos
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.
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.
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.
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.
* 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() ] );
}
}
}
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 );
}
}
);
}
}
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
* 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 é um objeto simples que mostra uma linha simples de texto.
c1 = new JLabel("Rótulo");
c.add(c1);
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);
É 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 );
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 é 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 );
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 é um objeto mais completo que permite a digitação de várias linhas dentro dele.
O List é um tipo de ComboBox, mas que permite a seleção múltipla dentro da lista de opções.
Canvas é uma tela de fundo (papel de parede) aonde irão ser adicionados componentes.
Cria uma instância do fluxo do gerente de layout, aonde é colocado o Frame.
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.
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.
Este método torna os elementos visíveis no frame.
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.
É mais complexo do que o Flow Layout Manager, pois fornece componentes que possibilitam manusear o posicionamento do elemento dentro do container.
Você pode criar linha e colunas dentro de seu container.
Permite a você criar duas interfaces semelhantes a botões, sendo entretanto, o painel completo.
É uma armação aonde são inseridos diversos elementos como: botões, labels, etc.
São recipientes aonde são inseridos diversos elementos como: botões, labels, etc.
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)
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