Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Documentos relacionados
Programação Orientada a Objectos - P. Prata, P. Fazendeiro

. Uma instância da classe JTextField gera uma instância da classe ActionEvent quando o objecto está activo e o utilizador pressiona a tecla ENTER.

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Caso não exista nenhum listener registado no objecto que gera o evento, este não terá qualquer efeito.

Programação Gráfica em Java Alguns Componentes javax.swing

Elaborando as Interfaces dos trabalhos das aulas 28, 29 e 30.

Universidade Federal de Uberlândia Faculdade de Computação GGI030 Programação Orientada a Objetos 2o. Semestre de 2017 Prof.

Elaborando as Interfaces Aulas 31, 32 e 33

Interfaces Gráficas com Swing. Professor Leonardo Larback

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 16, 17, e 18

Introdução à Programação Gráfica em Java

Criando interfaces com o usuário. Continuação

Desenvolvimento de Aplicações Desktop

Lista de Exercícios da disciplina Aplicações de Linguagem de Programação Orientada a objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 1- Interfaces Gráficas com Swing

Aplicações de Linguagem de Programação Orientada a Objeto

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Nona aula

Aula 2 Even e to t s d o M ouse

A classe JTextField

MÓDULO 4 SWING Parte 3

Programação Java. Construção de Interface gráfica. Processo Básico: OO + Eventos. Exemplo

Arquivos. Prof. Leonardo Barreto Campos 1

Exercício 1: Criar um programa que utiliza que desenha uma interface gráfica tal como descrito na Figura 1.1.

Componentes GUI A aparência e maneira como um usuário pode interagir com componentes AWT diferem de acordo com a plataforma. Componentes Swing permite

Adding User Interaction

Elaborando as Interfaces Aulas 43, 44 e 45

Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Criação de Aplicações GUI. Java JFC / Swing

MANIPULAÇÃO DE EVENTOS

Layout. Programação Orientada a Objetos Java. Prof. Geraldo Braz Junior. Baseado em material original de João Carlos Pinheiro CEFET/MA

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 4- Tratamento de Eventos em Interfaces Gráficas

Gerenciadores de Layout

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1

Aula 12 POO 1 Interface Gráfica no Java. Profa. Elaine Faria UFU

Componentes Parte 01

TIC - Programação Visual. Componentes. Prof. Edwar Saliba Júnior Setembro de Unidade 14 Componentes 1

1) Responda de acordo com os conceitos de orientação a objetos (0,5).

Elaborando as Interfaces dos trabalhos das aulas 25, 26 e 27.

Programação III. Interface Gráfica - Swing. Interface Gráfica Swing Jocélio Passos joceliodpassos@bol.com.br. Interface Gráfica - Swing

Vector Java. Empregado.java

(INFORMAÇÕES PARA LABORATÓRIOS VIRTUAIS) Nome do laboratório: Laboratório de Programação (INFORMAÇÕES PARA FERRAMENTA)

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 16, 17, e 18

JTextArea JMenuBar JTable JDesktopPane e JInternalFrame

Tiago Alves de Oliveira. Tiago Alves de Oliveira

Interfaces Gráficas POO. Prof. Márcio Delamaro

CONTEÚDO PROGRAMÁTICO

Programação Orientada a Objetos

Aula Prática Criando Views e Controles

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

Escrito por Sex, 14 de Outubro de :26 - Última atualização Seg, 05 de Dezembro de :59

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Encerrando Introdução a Objetos e Classes Redefinição de Métodos (1)

PROGRAMAÇÃO ORIENTADA A OBJETOS -INTERFACES GRÁFICAS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Principais Classes Swing AWT

Componente JOptionPane Layout Null Tratamento de Eventos. Action Listener

COM220 Aula 17: Interface Gráfica Containers Swing

4 Conceito de Herança

Input / Output na linguagem java. Para isso usamos um dos construtores da classe java.io.file:

Orientação a Objetos

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Introdução Interfaces (revisão) Delegação de eventos Tratamento de eventos Classes Adaptadoras Capturando Eventos nos Componentes Swing

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Interface gráfica em Java: Swing e SWT

TRATAMENTO DE EVENTOS EM JAVA USANDO SWING. George Gomes Cabral

Como tratar eventos - A interface ActionListener e o método actionperformed

Java Swing: Netbeans

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

LSD LSD PICC. Manuela Sousa

AULA 10 - CCT0024 Linguagem de Programação Objetivos da aula. Janelas para leitura e exibição de textos

Formulário Principal no NetBeans

Programação Gráfica em Java.

Prof. Fernando V. Paulovich 25 de julho de SCC Programação Orientada a Objetos

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 19, 20 e 21

Interface Gráfica. Disciplina: Desenvolvimento de Sistemas. Professor: Thiago Silva Prates

Interfaces Gráficas: Interações Complexas

Módulo 7. Interface Gráfica com o Usuário GUI - Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

HABILITANDO A IDE DO ECLIPSE

Introdução à Tecnologia Java 02/2012. Java Aula 04 MDI. 05/09/2012 Celso Olivete Júnior.

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: Font size Animation FACULDADE DE TECNOLOGIA SENAC PELOTAS

Processo Básico: OO + Eventos. Java First-Tier: Aplicações. Construção de Interface gráfica. Exemplo. Exemplo. Exemplo. Hierarquia de Composição

Técnicas de Programação II

Programação Orientada a Objetos II

Linguagem de programação 2 GUI

Java First-Tier: Aplicações. Abstract Window Toolkit (AWT) Construção de Interfaces com Swing (I) Swing: Características

1) De acordo com o trecho de código escrito na linguagem JAVA, responda a questão abaixo:

Interfaces Gráficas (GUIs) em Java usando Swing

Aplicação Linguagem de Programação Orientada a Objeto

Cadastro de Cargos, Departamentos e Funcionários

Criação de interfaces gráficas

Interface Gráfica - Swing

JFC/Swing. LPGII - Java Interface Gráfica JFC/Swing. Introdução JFC / Swing. Introdução JFC / Swing

Prof. Msc. Vladimir Camelo

JMENU, JDESKTOPPANE E JINTERNALFRAME

Agenda. JFC (Java FoundaNon Classes) Interfaces Gráficas: layout manager JFC. Componentes do Swing. Pluggable Look and Feel

Orientação a Objetos

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Aula 15 Interface Gáfica. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Prof. Responsáveis Wagner Santos C. de Jesus

Modulo I Swing Básico

Transcrição:

Graphical user Interfaces Objetivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs - Utilizar as classes JFrame, JButton, JLabel, ImageIcon, JTextField, JTextArea e JMenu do package javax.swing - Usar um modelo de programação por eventos ( Java s delegation-based event model ) UBI, Departamento de Informática 1

Os componentes gráficos da linguagem Java estão definidos nos packages: java.awt e javax.swing (surge com a versão Java2 SDK1.2) As classes Swing permitem maior portabilidade entre diferentes sistemas operativos. (totalmente implementadas em Java) UBI, Departamento de Informática 2

Alguns componentes gráficos do package javax.swing UBI, Departamento de Informática 3

Definição de uma janela (JFrame) - Um objeto do tipo JFrame contém os elementos básicos para manipularmos uma janela: abrir, fechar, mover e redimensionar - A uma janela poderemos adicionar outros componentes gráficos UBI, Departamento de Informática 4

import javax.swing.*; public class Janela { public static void main (String [] args){ JFrame janela = new JFrame(); janela.setvisible(true); } } UBI, Departamento de Informática 5

Alguns métodos da classe JFrame: - atribuir um título settitle ( My First Subclass"); -dimensionar a janela setsize ( 300, 200 ); (300 pixels de largura e 200 pixels de altura) - posicionar a janela no ponto de coordenadas (150, 250) setlocation ( 150, 250 ); - requerer que o programa termine quando a janela é fechada setdefaultcloseoperation ( EXIT_ON_CLOSE ); UBI, Departamento de Informática 6

UBI, Departamento de Informática 7

Para construir uma interface gráfica podemos definir uma subclasse de JFrame. Nessa subclasse iremos adicionar o comportamento necessário à interface que pretendemos. A classe Janela1 define uma janela com as características anteriores e com o fundo branco: UBI, Departamento de Informática 8

import javax.swing.*; import java.awt.*; public class Janela1 extends JFrame { private static final int FRAME_WIDTH = 300; private static final int FRAME_HEIGHT = 200; private static final int FRAME_X_ORIGIN = 150; private static final int FRAME_Y_ORIGIN = 250; UBI, Departamento de Informática 9

public Janela1(){ settitle ( Subclasse de JFrame com fundo branco" ); setsize (FRAME_WIDTH, FRAME_HEIGHT ); setlocation (FRAME_X_ORIGIN, FRAME_Y_ORIGIN ); setdefaultcloseoperation( EXIT_ON_CLOSE ); alterarcorfundo( ); } //continua UBI, Departamento de Informática 10

private void alterarcorfundo() { Container contentor = getcontentpane(); contentor.setbackground(color.white); } public static void main(string[] args) { Janela1 j = new Janela1(); j.setvisible(true); } }// fim da classe Janela1 UBI, Departamento de Informática 11

UBI, Departamento de Informática 12

Painel de conteúdos content pane Designa a área da janela em que se pode mostrar conteúdo como texto, imagem, etc. (i. é, toda a área, com exceção do título, da barra de menus e do bordo da janela) Para aceder ao painel de conteúdos de uma janela usamos o método: Container getcontentpane(), definido na classe JFrame O método devolve um objeto do tipo Container, classe do package java.awt UBI, Departamento de Informática 13

Adicionar botões, objetos do tipo JButton, ao painel de conteúdos de uma janela Há duas formas de adicionar objetos gráficos no painel de conteúdos de uma janela: 1 usar um objeto do tipo LayoutManager para controlar a colocação dos objetos 2 explicitar o tamanho e a posição específica onde queremos o objeto (posicionamento absoluto) UBI, Departamento de Informática 14

Para usarmos a segunda possibilidade devemos desativar o layout manager, da classe Container, invocando o o método: void setlayout(layoutmanager mgr) com o valor null contentor.setlayout(null); Para colocar o botão numa dada posição usamos o método da classe JButton: void setbounds ( x, y, width, height); UBI, Departamento de Informática 15

Container contentor = getcontentpane(); JButton botao = new JButton( Oi ); contentor.setlayout(null); botao.setbounds ( 70, 125, 80, 30 ); //Finalmente, vamos colocar o botão na janela: contentor.add( botao ); UBI, Departamento de Informática 16

Vamos agora ver como fazer o programa reagir a um click sobre o botão... UBI, Departamento de Informática 17

Programação por eventos Um evento ocorre quando o utilizador interage com um objeto gráfico:. manipular um botão com o rato;. introduzir texto num campo de texto. selecionar um item de menu.... Num modelo de programação por eventos, programam-se objetos ( event listeners ) que reagem a alterações no estado de outros objetos ( event sources ). Um event listener inclui um método que será executado em resposta ao (aos) evento(s) gerado(s). UBI, Departamento de Informática 18

Para tratar um evento é necessário associar (registar) um ou vários listeners ao objeto que gera o evento. Quando um evento é gerado o sistema de execução notifica o objeto de escuta ( listener ) correspondente, invocando o método que trata o evento. Caso não exista nenhum listener registado no objecto que gera o evento, este não terá qualquer efeito. UBI, Departamento de Informática 19

Para cada tipo de evento temos um listener correspondente. Um objeto pode ser registado como um listener se for uma instância de uma classe que implementa uma determinada interface. interface ActionListener interface MouseListener interface KeyListener... UBI, Departamento de Informática 20

Exemplo: public interface ActionListener { public void actionperformed(actionevent e); } } import java.awt.event.*; public classe TrataBotao implements ActionListener { public void actionperformed ( ActionEvent e ){ //... Tratar evento } UBI, Departamento de Informática 21

Para registar um objeto ActionListener no objeto que gera o evento, usamos o método: void addactionlistener ( ActionListener ) b1 = new JButton ( "OK ); TrataBotao tb= new TrataBotao( ); b1.addactionlistener ( tb ); UBI, Departamento de Informática 22

Obs. Um único listener pode ser associado a múltiplos objetos geradores de eventos. Vários listeners podem ser associados a um único evento Suponhamos a seguinte janela com dois botões: UBI, Departamento de Informática 23

Tratar eventos Queremos que o título da janela mude consoante o botão que for pressionado. O método que vai tratar o evento terá a seguinte estrutura: public void actionperformed ( ActionEvent e ){ (1) String textodobotao = aceder ao texto do objeto que gerou o evento; } (2) JFrame janela = aceder à janela que contém o objeto gerador do evento janela.settitle ( Pressionou o botão + textodobotao ); UBI, Departamento de Informática 24

(1) Pode obter-se de duas formas: a) pelo método String getactioncommand(), da classe ActionEvent: String textodobotao = e.getactioncommand (); b) através do método Object getsource(), da classe ActionEvent: JButton botaoclicado = (JButton) e.getsource(); String textodobotao = botaoclicado.gettext(); UBI, Departamento de Informática 25

(2) Para obtermos a janela que contém o gerador do evento, é necessário:. Obter o painel que contém o objeto gerador do evento. Obter a janela que contém o painel. JRootPane rootpane = botaoclicado.getrootpane(); JFrame frame = (JFrame) rootpane.getparent(); Uma janela pode conter vários painéis encadeados. O painel de topo é o root pane UBI, Departamento de Informática 26

A própria janela pode ser o listener dos objetos gráficos que contém. public class Janela2 extends JFrame implements ActionListener { private JButton b1, b2;... public Janela2(){... Container contentor = getcontentpane(); b1 = new JButton("OK"); b2 = new JButton("Cancelar"); UBI, Departamento de Informática 27

//registar o listener em cada botão b1.addactionlistener(this); b2.addactionlistener(this); } contentor.add(b1); contentor.add(b2); //Continua UBI, Departamento de Informática 28

public void actionperformed(actionevent e){ String textodobotao; textodobotao = e.getactioncommand(); settitle("pressionou o botão " + textodobotao); } public static void main(string[] args) { Janela2 j = new Janela2(); j.setvisible(true); } } // fim da classe Janela2 UBI, Departamento de Informática 29

UBI, Departamento de Informática 30

A classe JLabel. Permite mostrar texto não editável public class Janela3 extends JFrame { private JLabel l;... public Janela3(){... l = new JLabel("Vingança!!!!"); l.setbounds(205,100,70,20); contentor.add(l); UBI, Departamento de Informática 31

li = new JLabel (new ImageIcon ("d://_poo/rato.jpg")); li.setbounds(0,0,200,200); contentor.add(li); UBI, Departamento de Informática 32

A classe JTextField. Um campo de texto, permite ao utilizador introduzir uma única linha de texto. Uma instância da classe JTextField gera uma instância da classe ActionEvent quando o objeto está ativo e o utilizador pressiona a tecla ENTER. Suponhamos que queremos construir a janela seguinte: UBI, Departamento de Informática 33

Tratando os eventos gerados quando o utilizador pressiona a tecla ENTER em cada um dos campos de texto. UBI, Departamento de Informática 34

public class Janela4 extends JFrame implements ActionListener{... private JLabel lnome, lidade, lnome2, lidade2; private JTextField nome, idade; private Container contentor; public Janela4(){... contentor = getcontentpane(); contentor.setlayout(null); UBI, Departamento de Informática 35

// criar a etiqueta com a 1º pergunta lnome = new JLabel("Oi, como te chamas? "); lnome.setbounds(50,20,125,25); contentor.add(lnome); // criar o campo de texto para o nome nome = new JTextField(); nome.setbounds(180,20, 50,25 ); contentor.add(nome); // registar o listener no campo de texto nome.addactionlistener(this); // repetir para a 2ª pergunta (atenção às coordenadas)... } UBI, Departamento de Informática 36

public void actionperformed(actionevent evt){ JTextField campotexto = (JTextField) evt.getsource(); int w = campotexto.getwidth(); String texto = campotexto.gettext(); if (w==50) mostranome(texto); else mostraidade(texto); } UBI, Departamento de Informática 37

public void mostranome(string n){ lnome2 = new JLabel("Olá " + n +","); lnome2.setbounds(10,120,100,25); contentor.add(lnome2); } public void mostraidade(string n){ int i = Integer.parseInt(n); lidade2 = new JLabel("como te sentes com "+ i + primaveras?"); lidade2.setbounds(10,150,250,25); contentor.add(lidade2); } UBI, Departamento de Informática 38

A classe JTextArea. Uma área de texto permite introduzir várias linhas de texto Suponhamos a seguinte janela: UBI, Departamento de Informática 39

Cada linha de texto introduzida no campo de texto será adicionada à área de texto sempre que, o utilizador pressionar a tecla RETURN ou o botão Adicionar. Quando pressionado o botão Apagar será eliminado todo o conteúdo da área de texto. UBI, Departamento de Informática 40

private JButton botaoapagar; private JButton botaoadicionar; private JTextField linha; private JTextArea texto; // no construtor criar a área de texto texto = new JTextArea(); texto.setbounds(50,5,200, 135); UBI, Departamento de Informática 41

// por omissão a área de texto não é delimitada texto.setborder(borderfactory.createlineborder (Color.red)); texto.seteditable(false); contentor.add(texto); Para adicionar texto à área de texto usamos o método void append (String) da classe JTextArea Para substituir o texto da área de texto usamos o método void settext (String) da classe JTextArea UBI, Departamento de Informática 42

public void actionperformed(actionevent evt){ if ( evt.getsource() instanceof JButton ) { JButton botao = (JButton) evt.getsource(); if ( botao == botaoadicionar ) { adicionartexto ( linha.gettext() ) ; }else { apagartexto(); } } else {// event source: linha adicionartexto(linha.gettext() ); } } UBI, Departamento de Informática 43

private void adicionartexto(string s){ texto.append( s + "\n"); linha.settext(""); } private void apagartexto(){ texto.settext(""); linha.settext(""); } UBI, Departamento de Informática 44

Scroll bars Para permitir a visualização de um texto que exceda as margens, UBI, Departamento de Informática 45

modificamos o código anterior onde criámos a área de texto englobando esta num objeto do tipo JScrollPane : texto = new JTextArea(); texto.seteditable(false); JScrollPane elevador = new JScrollPane (texto); elevador.setbounds (50,5,200, 135); elevador.setborder ( BorderFactory.createLineBorder (Color.red)); contentor.add(elevador); UBI, Departamento de Informática 46

As classes JMenuBar, JMenu, JMenuItem. Uma barra de menus (JMenuBar) é a barra onde são colocados os menus. Um menu (JMenu) é um item de uma barra de menus. Um item de menu (JMenuItem) é uma das opções de um menu Quando um item de um menu é selecionado, é gerado um action event Para processar a seleção de um item de um menu associamos um listener a esse item. UBI, Departamento de Informática 47

Vamos construir uma janela com dois menus: UBI, Departamento de Informática 48

Sequência de passos para criar os menus: 1 criar uma barra de menus e adicionar à janela 2 criar os menus 3 criar os itens de menu e adicionar ao menu correspondente 4 adicionar cada menu à barra de menus public class Janela6 extends JFrame implements ActionListener{... private JLabel resposta; private JMenu filemenu, editmenu; public Janela6(){... UBI, Departamento de Informática 49

// criar a barra de menus JMenuBar barramenus = new JMenuBar(); //criar dois menus e os seus items criarfilemenu(); criareditmenu(); //colocar a barra de menus na janela setjmenubar ( barramenus); // adicionar os menus à barra de menus barramenus.add(filemenu); barramenus.add(editmenu); UBI, Departamento de Informática 50

public void criarfilemenu(){ JMenuItem item; filemenu= new JMenu("File"); item = new JMenuItem( "New"); item.addactionlistener(this); filemenu.add(item); item = new JMenuItem( "Open"); item.addactionlistener(this); filemenu.add(item); UBI, Departamento de Informática 51

item = new JMenuItem( "Save"); item.addactionlistener(this); filemenu.add(item);... filemenu.addseparator(); // linha horizontal item = new JMenuItem( "Quit"); item.addactionlistener(this); filemenu.add(item); } // análogo para o método criareditmenu UBI, Departamento de Informática 52

Tratar a selecção de um item public void actionperformed(actionevent evt){ } String itemseleccionado; itemseleccionado = evt.getactioncommand(); if ( itemseleccionado.equals("quit") ) { System.exit(0); } else { } resposta.settext("o item seleccionado foi " + itemseleccionado ); UBI, Departamento de Informática 53

UBI, Departamento de Informática 54