24
Programação Orientada a Objetos Alexandre César Muniz de Oliveira Entrada e Saída Parte IV

Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

  • Upload
    vuque

  • View
    237

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

1

Programação Orientada a Objetos

Alexandre César Muniz de Oliveira

Entrada e Saída

Parte IV

Page 2: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

2

Entrada e Saída

Módulo de Interface com o usuárioDividir trabalhoSeparar processamento de E/S

Entrada e Saída

Em Java, E/S é tratada por objetos streams.

Page 3: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

3

Entrada e SaídaBufferedReader x = new BufferedReader (new InputStreamReader (System.in));

http://java.sun.com/j2se/1.4.2/docs/api/java/io/package-tree.htmlclass java.lang.Object

* class java.io.File (implements java.lang.Comparable, java.io.Serializable)(...)* class java.io.Reader

o class java.io.BufferedReadero class java.io.CharArrayReadero class java.io.FilterReadero class java.io.InputStreamReadero class java.io.PipedReadero class java.io.StringReader

• class java.io.StreamTokenizer (...)

Page 4: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

4

Entrada e Saída

Lendo números (Class BufferedReader)String inputString = new String();System.out.println(“Quanto você correu? ");inputString = input.readLine(); double miles = Double.parseDouble(inputString);System.out.println(“Quanto tempo? ");inputString = input.readLine(); double minutes = Double.parseDouble(inString); System.out.println(“Seu pique foi de " +

miles/minutes + "km/h");

Entrada e Saídaimport java.io.*;public class KeyboardReader

{ private BufferedReader reader;public KeyboardReader() {

reader = new BufferedReader (new InputStreamReader(System.in)); }public String getKeyboardInput(){

return readKeyboard();} ...

Page 5: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

5

Entrada e Saídapublic int getKeyboardInteger()

{ return Integer.parseInt(readKeyboard());

}public double getKeyboardDouble(){

return Double.parseDouble(readKeyboard()); }public void prompt(String s){

System.out.print(s); }public void display(String s){

System.out.print(s); } ...

Entrada e Saída...private String readKeyboard()

{ String line = ""; try{

line = reader.readLine(); } catch (IOException e) { e.printStackTrace(); }return line;

}}

Page 6: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

6

Interface gráficaComponentes de Interface Gráfica (GUI)

Um componente possui atributos e métodos Definem um comportamento conhecido Podem ser conectados formando componentes de alto-nível, formando a interface com o usuário

Pacotes separados, mas interrelacionadosjava.awt e javax.swingComponente java.awt.Button foi substituído pelo javax.swing.JButton

Interface gráficaExemplos de componentes

JLabel é simplesmente uma string de texto mostrado na GUIJTextField é um elemento de entrada que armazena uma única linha de texto. JTextArea é um componente de saída que mostra múltiplas linhas de textoJButton é um elemento de controle rotulado que permite a interação do usuário com o programaJFrame é um container de alto-nível que pode conter outros componentes

Page 7: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

7

Interface gráfica

JLabel

JTextField

JTextArea

JButton

JFrame{

Interface gráfica

Classes SwingSuperiores às suas similares do AWT. Projeto orientado a objetos sofisticadoArquitetura model-view-controller (MVC) Exemplo:

AWT Button = “string”Swing JButton = Image.bmp

Page 8: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

8

Interface gráfica

Classes SwingComponentes escritos em JavaPortabilidadeAparência independe de S.O. Diferentes look-and-feelUtilização de componentes é feito por herança

Interface gráfica

Page 9: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

9

Interface gráfica

Subclasse de JFrameespecializa sua funcionalidade para uma aplicação específica

Interface gráficaimport javax.swing.*;public class SimpleGUI extends JFrame{ public SimpleGUI(String title)

{ setSize(200,150);setLocation(100, 150);setTitle(title);setVisible(true); // Displays the JFrame

} public static void main(String args[]){ new SimpleGUI("My GUI"); }}

Page 10: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

10

Interface gráfica

ControleSaídaEntrada

Interface gráfica

Exemplo:JTextField aceita entrada do usuárioJTextArea mostra a saída do programaJButton permite uma ação de controleJLabel aviso para o JTextField.

Page 11: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

11

Interface gráficaprivate JLabel prompt;private JTextField inField;private JTextArea display;private JButton goButton;

prompt = new JLabel(“Por favor, digite seu nome aqui: ");inField = new JTextField(10); // tamanho de 10 charsdisplay = new JTextArea(10, 30); // 10 lin x 30 colgoButton = new JButton(“Clique para saudação");

Interface gráfica

Outros métodos

Page 12: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

12

Interface gráficaComponentes adicionados a um JFrame através de content panes.

add(Component comp) add(Component comp, int index) add(String region, Component

comp)

"North", "South", "East", "West", or"Center".

Interface gráfica

Apenas um componente por área

Container contentPane = getContentPane();contentPane.add("Center",display);

JPanels podem ser usados para encapsular componentes relacionados

Page 13: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

13

Interface gráficaprompt = new JLabel(“Por favor, digite seu nome aqui: ");inField = new JTextField(10); display = new JTextArea(10, 30); goButton = new JButton(“Clique para saudação");JPanel inputPanel = new JPanel();

inputPanel.add(prompt); inputPanel.add(inField); inputPanel.add(goButton);

Container contentPane = getContentPane();contentPane.add("South", inputPanel);

EventosProgramação orientada a eventosEventos são gerados pelo hardware Componentes chamados listeners. Um “ouvinte”monitora eventos

Page 14: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

14

EventosProgramação orientada a eventos

Laço de eventoOuvindo eventosTomada uma ação

Repeat forever or until the program is stoppedListen for eventsif event-A occurs, handle it with event-A-handlerif event-B occurs, handle it with event-B-handler

Eventos

Page 15: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

15

EventosExemplos:

Clique do mouseAcionamento de teclaFoco do mouse

Java cria um objeto ActionEvent contendoinstantetipo de evento

O usuário pode tratar (dar ações) os eventos que desejarPara tanto Java opera com o conceito de Interface

Interface para eventosInterface

Tipo de classe especial em JavaContém apenas métodos e constantes (variáveis do tipo final)Não podem conter variáveis de instância

Uma classe define um comportamentoInterface

Define apenas o “protocolo de comportamento” a ser implementadoObriga a implementação de um protocolo ou conjunto de métodos

Page 16: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

16

Interface para eventosInterface ActionListener

public abstract interface ActionListener extends EventListener

{ public abstract void actionPerformed(ActionEvent e); }

A classe interessada em processar um evento deve implementar esta interfaceQualquer classe implementando actionPerformed() pode funcionar como um ouvinte de eventos.

Interface para eventosDeve-se dar uma implementação para actionPerformed() dentro da classe GreeterGUI

…public void actionPerformed(ActionEvent e){ if (e.getSource() == goButton)

{ String name = inField.getText();display.append(greeter.greet(name) + "\n");

}}...

} // classQuando goButton é clicado o código em ActionPerformed() é executado

Page 17: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

17

Interface para eventosDeve-se Informar que GreeterGUI será ActionListenerpara goButton.

public class GreeterGUI extends Frame implements ActionListener

{ ...public void buildGUI(){ ...

goButton = new JButton(“Clique aqui para saudação!");goButton.addActionListener(this);...

}...

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

public class GreeterGUI extends JFrame implementsActionListener

{ private JTextArea display;private JTextField inField;private JButton goButton;private Greeter greeter;

Page 18: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

18

Exemplo

public GreeterGUI(String title){ greeter = new Greeter();buildGUI();setTitle(title);pack(); // java.awt Class Window: ajuste de janela

setVisible(true);} // construtor

Exemploprivate void buildGUI(){ Container contentPane = getContentPane();

contentPane.setLayout(new BorderLayout());display = new JTextArea(10,30);inField = new JTextField(10);goButton = new JButton(“Clique aqui para saudação!");goButton.addActionListener(this);JPanel inputPanel = new JPanel();inputPanel.add(new JLabel(“Nome: "));inputPanel.add(inField);inputPanel.add(goButton);contentPane.add("Center", display);contentPane.add("South", inputPanel); } // buildGUI()

Page 19: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

19

Entrada e Saída

Exemplo

public void actionPerformed(ActionEvent e){ if (e.getSource() == goButton){ String name = inField.getText();

display.append(greeter.greet(name) + "\n");}

} // actionPerformed() } // GreeterGUI class

Page 20: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

20

Exemplopublic class GreeterApplication{ public static void main(String args[])

{ new GreeterGUI("Greeter"); }}

import javax.swing.*;public class GreeterApplet extends JApplet{ public void init()

{ new GreeterGUI("Greeter"); }}

Exercício

Faça JTextField se tornar ouvinte de eventosAo teclar <enter> o usuário causa o mesmo efeito de um clique de mouseDesigne inField como um ActionListenerAlterações em buildGUI() e actionPerformed()

Page 21: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

21

Exercício

Aceita ou cancela

ACEITOU !!!

Exercícioimport javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class PanelWithComponents {

public static void main(String[] a) {JPanel panel = new JPanel();JButton okButton = new JButton("OK");panel.add(okButton);JButton cancelButton = new JButton("Cancel");panel.add(cancelButton);JFrame frame = new JFrame(“Exemplo Aceita ou Cancela");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.add(panel);frame.setSize(300, 200);frame.setVisible(true);

} }

Page 22: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

22

Casos

Menu

Casospublic class Interface extends javax.swing.JFrame {

private JPopupMenu jPopup = new JPopupMenu();private JMenuItem cortar1 = new JMenuItem();private JMenuItem copiar1 = new JMenuItem();private JMenuItem colar1 = new JMenuItem();private JMenuItem selecionarTudo1 = new JMenuItem();private JScrollPane jScrollPane1= new JScrollPane();private JTextArea jTextArea1 = new JTextArea();private JTextField jTextField1 = new JTextField();private JMenuBar barraDeMenu = new JMenuBar();private JMenu arquivo = new JMenu();private JMenuItem novoArquivo = new JMenuItem();private JMenuItem abrirArquivo = new JMenuItem();private JMenuItem salvarArquivo = new JMenuItem();private JMenuItem sair = new JMenuItem();

...

Page 23: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

23

Casosprivate void Menus() {

cortar1.setText("Cortar");jPopup.add(cortar1);copiar1.setText("Copiar");jPopup.add(copiar1);colar1.setText("Colar");jPopup.add(colar1);selecionarTudo1.setText("Selecionar Tudo");jPopup.add(selecionarTudo1);setTitle("Estrutura de Dados - Tabela Hash");inserir.setText("Inserir");inserir.setEnabled(false);menuResultado.add(inserir);

Casosprivate class TrataEventos implements ActionListener{public void actionPerformed(ActionEvent actionEvent){

if(actionEvent.getSource()== novoArquivo){jTextArea1.setText(null);textoResultado.setText(null);setarFalseSubMenus();jTextField1.setText("Pronto...");

}else if(actionEvent.getSource()== abrirArquivo){jTextField1.setText("Abrindo Arquivo...");textoResultado.setText(null);setarFalseSubMenus();int resultado = escolher.showOpenDialog(null); ...

Page 24: Programação Orientada a Objetos - DEINF/UFMAacmo/temp/CEAPS2007_POOACMO_ESDADOS.pdf · zPara tanto Java opera com o conceito de Interface Interface para eventos ... ouvinte de eventos

24

Casosprivate void adicionaListenerEFiltro(){

TrataEventos evento = new TrataEventos();novoArquivo.addActionListener(evento);abrirArquivo.addActionListener(evento);salvarArquivo.addActionListener(evento);sair.addActionListener(evento);cortar.addActionListener(evento);copiar.addActionListener(evento);colar.addActionListener(evento); selecionarTudo.addActionListener(evento); ...