• Nenhum resultado encontrado

SLIDES - AULA 7 - SWING

N/A
N/A
Protected

Academic year: 2021

Share "SLIDES - AULA 7 - SWING"

Copied!
182
0
0

Texto

(1)

SWING

Cleyton Caetano de Souza IFPB – Campus Monteiro

(2)

Roteiro

• JOptionPane • SWING

– Containers: JFrame e Jpanel

– Componentes: JLabel, JTextField, JButton, etc.

• Eventos e Ouvintes

(3)

Interação com o Usuário

• A interação com o usuário é uma parte fundamental da maioria dos programas. • Entrada e Saída

– O usuário pode inserir dados no programa – O programa pode exibir dados ao usuário

(4)

Entrada e Saída via Console

• Usamos para interagir com o usuário • Saída

– System.out.println(“”);

• Entrada

(5)

Entrada e Saída gráficas

• Uma alternativa simples e mais “atraente” de interação é o uso de “janelas de diálogo”

(6)

JOptionPane

• Classe em Java que implementa as janelas de diálogo.

• Pacote

– Javax.swing

• Possui uma série de métodos estáticos, ou seja, não é preciso instanciar objetos para utilizar o JoptionPane

(7)
(8)

Método: showMessageDialog

• Função:

– Exibir mensagens de texto

• Exemplo • Resultado

(9)

Analisando a caixa de diálogo

Título da caixa de diálogo

Ícone da caixa de diálogo

(10)

Analisando a caixa de diálogo

Título da caixa de diálogo

Ícone da caixa de diálogo

Mensagem da caixa de diálogo

(11)

Método: showMessageDialog

• ShowMessageDiaolog é um método sobrecarregado

(12)

Método: showMessageDialog

• ShowMessageDiaolog é um método sobrecarregado

– O que isso significa?

– Resposta: Que existem diferentes versão dele dentro da mesma classe

• Existe uma versão do showMessageDialog que nos permite alterar cada um desses

(13)

Método: showMessageDialog

• Assinatura

• Exemplo de uso • Resultado

(14)

Tipos de Mensagem

• O parâmetro messageType define o ícone que aparecerá na janela, podendo assumir

(15)

Ícone

• Ainda é possível trocar o ícone que será

exibido por qualquer outra imagem utilizando outra versão do showMessageDialog.

(16)

Método: showConfirmDialog

• O método anterior serve apenas para exibir mensagens na tela

• O showConfirmDialog retorna um valor resultante da interação com usuário

(17)

Método: showConfirmDialog

• O showConfirmDialog disponibiliza botões padrões para que o usuário possa interagir

– Há um botão para OK, CANCEL, YES e NO

• O método retorna o botão que o usuário apertou

– Na verdade um código numérico que representa esse botão

(18)

Método: showConfirmDialog

(19)

Método: showConfirmDialog

• Todos os elementos destacados podem ser configurados, utilizando as versões

(20)

Método: showConfirmDialog

Mensagem

Título

Opções de Botões

(21)

OptionType

• Possíveis valores para o parâmetro

OptionType, que define os botões que aparecerão no confirmDialog

(22)

Retornos

• Possíveis retornos do método confirmDialog

– O retorno corresponde ao botão clicado pelo usuário

(23)

Método: showInputDialog

• Caixa de diálogo que permite que o usuário realize alguma entrada de dados.

– O método retorna uma String representando a entrada do usuário

(24)

Método: showInputDialog

• Exemplo de Uso

• O retorno do método corresponde ao valor digitado pelo usuário, após ele clicar em OK

(25)

Método: showInputDialog

• O showInputDialog é um método sobrecarregado

• Existem diferentes versões dele, as quais

permitem configurar os elementos da caixa de diálogo

– Mensagem – Título

– Ícone

(26)

Método: showInputDialog

• Existe uma versão dele que permite alterar o tipo de entrada

– Ao invés de o usuário digitar texto livre, ele

escolhe uma entre algumas opções disponíveis – O retorno continua sendo uma String!

(27)

Método: showInputDialog

• O retorno dessa variação é um objeto do valor escolhido

(28)

Método: showOptionDialog

• O showOptionDialog é uma combinação do três anteriores, pois

– Ele pode ser usado apenas exibir uma mensagem – Ele retorna o índice representando o botão que foi

clicado

– Ele permite configurar a lista de botões que será apresentada

(29)

Método: showOptionDialog

• Assinatura

• Esse método não é sobrecarregado

• O método retorna um valor que representa a opção escolhida pelo usuário

– Caso a lista de opções seja nula, é retornado o código do botão pressionado

(30)

Método: showOptionDialog

(31)

Documentação

• Para mais informações, acesse a documentação

– http://docs.oracle.com/javase/7/docs/api/javax/s wing/JOptionPane.html

(32)

Interface Gráfica em Java

• Infância da API gráfica em Java

– Abstract Window Toolkit (AWT) – Pacote: java.awt

– Pacote de ferramentas gráficas em Java

(33)

Interface Gráfica em Java

• SWING

– Consiste pacote de classes que nos fornece os componentes necessários para elaborar a interface gráfica das nossas aplicações

– Pacote: java.swing

– Execução independente de plataforma

(34)

Editores Visuais

• Existem IDEs que fornecem editores visuais do estilo clique e arraste para montar essas

(35)

Editores Visuais

• Embora seja tentador utilizar esses editores visuais, eles também tem suas desvantagens

– A automação na geração do código torna o desenvolvedor refém do editor visual

– Em geral, o jovem programador usa o editor visual como muleta e deixa de entender como as classes funcionam

(36)

Editores Visuais

• Embora seja tentador utilizar esses editores visuais, eles também tem suas desvantagens

– A automação na geração do código torna o desenvolvedor refém do editor visual

– Em geral, o jovem programador usa o editor visual como muleta e deixa de entender como as classes funcionam

• Por isso, vamos aprender a codificar essas telas usando código, ao invés de editores visuais

(37)

Hierarquia de Classes

(38)

Hierarquia de Classes

• Existem dois grupos principais de classes • Você consegue identificá-los?

(39)

Hierarquia de Classes

• Existem dois grupos principais de classes • Você consegue identificá-los?

(40)

Hierarquia de Classes

• Containers

– É utilizado para conter componentes

• Componentes

– São combinados dentro dos containers para formar as telas da nossa aplicação

(41)

Hierarquia das Classes

(42)

JFrame

• JFrame é uma classe que fornece os recursos para criar uma Janela

(43)

JFrame

• O que é uma janela?

– Consiste em uma área em branco

– Com os botões de minimizar, maximizar e fechar – Título

– Espaço para adicionar componentes

(44)

JFrame

• Como criar uma Janela?

– Devemos configurar alguns parâmetros para a Janela ter alguma identidade

• setSize: configura as dimensões da janela • setVisible: torna a janela visível

• setDefaultCloseOperation: determina o que acontecerá quando o botão fechar for pressionado

(45)

JFrame

• Outros elementos que podem ser configurados

– setTitle – configura o título da janela

– setResibleVisible – determina se a janela pode ser redimencionada – setLocationRelativeTo – determina o ponto de referência para o centro

(46)

JFrame

• Na verdade, essa não é a forma “mais” correta para criarmos nossas telas

– Por quê?

• Resposta: Porque se precisarmos usar essa janela em outra parte do código, teremos que configurar todos os parâmetros de novo.

(47)

JFrame

• Na verdade, essa não é a forma “mais” correta para criarmos nossas telas

– Por quê?

• Resposta: Porque se precisarmos usar a mesma janela em outra parte do código, teremos que configurar

todos os parâmetros de novo.

– Qual a forma mais recomendada?

• Resposta: Utilizar herança. Criamos uma classe que representará a tela com as características que

desejamos e sempre que precisarmos usá-la

(48)

JFrame

Impede a janela de ser

redimensionada Faz com que a

janela apareça no centro da janela. Remove o

configurador de layout da janela

(49)

Gerenciadores de Layout

• O gerenciador de Layout vai decidir

automaticamente onde os componentes devem ser posicionados na tela em branco

• Ao setar esse atributo para null, “apagamos” o gerenciador de layout e para adicionar

componentes somos obrigados a dizer onde o componente deve ser posicionado.

(50)

Componentes

• Vamos estudar alguns componentes e adicioná-los na tela em branco

– JLabel

– JTextField – JButton

– JMenuBar, JMenu, JMenuItem – JComboBox

– JFormattedTextField – JTable

(51)

JLabel

• javax.swing.JLabel;

• Consiste na classe que representa rótulos de texto na interface.

• Construtores

– JLabel()

– JLabel(texto)

– JLabel(icone, alinhamento)

– JLabel(texto, icone, alinhamento) – JLabel(texto, alinhamento)

(52)
(53)

JLabel – Exemplo de Utilização

O método setBounds é um método que todo componente possui. Os dois primeiros parâmetros determinam a posição em que o componente será renderizado. Os dois últimos representam as dimensões que o componente terá.

(54)
(55)

Documentação

• Para mais informações sobre o JLabel, consulte a documentação.

– http://docs.oracle.com/javase/7/docs/api/javax/s wing/JLabel.html

(56)

JTextField

• javax.swing.JTextField

• Consiste em um campo de texto livre, onde o usuário pode inserir alguma informação na

forma de uma String

• Construtores

– JTextField()

– JTextField(tamanho) – JTextField(texto)

(57)
(58)

JTextField

• É possível recuperar o texto digitado na

campo de texto chamando o método getText()

– Esse método retorna uma String, que

(59)

Documentação

• Para mais informações sobre o JTextField, consulte a documentação.

– http://docs.oracle.com/javase/7/docs/api/javax/s wing/ JTextField.html

(60)

JButton

• javax.swing.Jbutton

• Corresponde a um botão, onde o usuário pode clicar! • Construtores – JButton() – JButton(icone) – JButton(texto) – JButton(icone, texto)

(61)
(62)

Documentação

• Para mais informações sobre o JButton, consulte a documentação.

– http://docs.oracle.com/javase/7/docs/api/javax/s wing/JButton.html

(63)

JButton

(64)

JButton

• Para que serve um botão?

– Botões servem para ser clicados

• O que acontecerá quando clicarmos nesse botão?

(65)

JButton

• Para que serve um botão?

– Botões servem para ser clicados

• O que acontecerá quando clicarmos nesse botão?

(66)

Ações

• Para que aconteça algo quando o botão for

clicado é necessário criar uma classe chamada “ouvinte” que vai ficar prestando atenção no botão

– Esses ouvintes seguem um padrão de projeto chamado Observer

– O ouvinte vai “observar” o botão

• Quando ele for clicado, o ouvinte vai perceber e realizar alguma ação

(67)

Listeners

• Nossa classe ouvinte do botão deve

obrigatoriamente implementar a interface

(68)

Listeners

• Por essa razão, ela será obrigada a implementar um método chamado actionPerformed

(69)

Listeners

• Esse é o método que será executado sempre que o botão que ela estiver “observando” for clicado

(70)

Listener

• Agora, precisamos

– (1)criar um objeto do nosso ouvinte e

– (2) dizer ao botão quem o está observando

• A partir desse momento, sempre que o botão for clicado o método

actionPerformed do nosso ouvinte será invocado

(71)

ActionEvent

• O método actionPerformed recebe como parâmetro um objeto do tipo ActionEvent • Por meio desse objeto, podemos obter

algumas informações interessantes relacionadas ao evento

(72)

ActionEvent

Objeto que representa o evento que acabou de acontecer (o clique no botão).

Esse objeto possui atributos que representam as características do evento: instante, titulo do botão, próprio botão, etc.

(73)

Eventos e Ouvintes

• Para cada tipo de evento, existe um tipo

específico de ouvinte e atributos específicos que podem ser solicitados

– Existe um evento que representa o clique do botão, existe um ouvinte interessado em ouvir cliques do botão

– Existe um evento que representa o clique de uma tecla, existe um evento interessado em ouvir

cliques do teclado – Etc...

(74)

Eventos e Ouvintes

• Para cada tipo de evento, existe um tipo

específico de ouvinte e atributos específicos que podem ser solicitados

(75)

“Reagindo” a outros tipos de eventos

• Crie o ouvinte do evento em que você está interessado.

Esse ouvinte se interessa por mudança de foco nos componentes.

(76)

“Reagindo” a outros tipos de eventos

• Crie o ouvinte do evento em que você está interessado.

Quando um componente de texto ganhar ou perder o foco, esses métodos serão invocados.

(77)

“Reagindo” a outros tipos de eventos

• Crie o ouvinte do evento em que você está interessado.

Esses objetos representam a mudança de foco.

(78)

“Reagindo” a outros tipos de eventos

• Crie o ouvinte do evento em que você está interessado.

Quando o campo de texto recebe o foco, ele muda seu conteúdo atual.

(79)

“Reagindo” a outros tipos de eventos

• Crie o ouvinte do evento em que você está interessado.

Quando o campo de texto perde o foco, ele muda seu estilo dependendo do conteúdo que estiver digitado nele.

(80)

“Reagindo” a outros tipos de eventos.

Conectando o ouvinte ao objeto que ele “prestará atenção”.

(81)

Documentação

• Para mais informações sobre os ouvintes e

eventos existentes, consulte a documentação

– https://docs.oracle.com/javase/7/docs/api/java/u til/EventListener.html

(82)

JMenuBar

(83)

JMenu

(84)

JMenuItem

(85)

JMenuBar, JMenu, JMenuItem

• Esses itens devem ser combinados a fim de formar a barra de menus

• Os elementos dos botões funcionam como botões, para atribuir uma ação a eles é

necessário criar e cadastrar um ouvinte que representa a ação da opção do Menu

(86)
(87)

Exemplo de Utilização

Cria a barra de menu.

Cria o menu “Novo”

Cria as opções Nova Tarefa e Novo Evento no menu “Novo”

(88)

JMenuItem + Listeners

• As opções do menu funcionam como botões • Para fazer com que as opções realizem ações

deve-se adicionar ouvintes para as opções do menu.

(89)

Exemplo de Uso

Adicionando o mesmo ouvinte nas duas opções

(90)

JMenuItem + Listeners

• É possível fazer com que comportamentos diferentes sejam executados para o cada opção do menu que for clicada.

(91)

JMenuItem + Listeners

• É possível fazer com que comportamentos

diferentes sejam executados para cada opção do menu que for clicada.

• Como fazer isso?

– Resposta: Uma solução é criar dois ouvintes diferentes, uma para cada opção do menu.

(92)

JMenuItem + Listeners

• É possível fazer com que comportamentos

diferentes sejam executados para cada opção do menu que for clicada.

• Como fazer isso?

– Resposta 1: Uma solução é criar dois ouvintes diferentes, uma para cada opção do menu.

– Resposta 2: Outra solução é dependendo do menu clicado executar uma ação diferente.

(93)
(94)

Exemplo 2

Usamos o objeto que representa o evento para decidir qual ação realizar.

(95)

Documentação

• Para mais informações, consulte a documentação

– JMenuBar: https://docs.oracle.com/javase/6/docs/api/javax/swin g/JMenuBar.html – JMenu: https://docs.oracle.com/javase/6/docs/api/javax/swin g/JMenu.html – JMenuItem: – https://docs.oracle.com/javase/6/docs/api/javax/swin g/JMenuItem.html

(96)

JFormattedTextField

• O JFormattedTextField (campo formatado para texto) é um tipo especial de campo de texto

• A formatação do campo texto é definida por um objeto do tipo MaskFormater

(97)
(98)

Exemplo

O construtor da classe MaskFormatter recebe

como parâmetro a máscara que será utilizada no campo

Se essa máscara for inválida, é lançada uma ParserException, logo, é necessário tratar a exceção colocando esse construtor

(99)

MaskFormater

• Esse objeto exige a definição da máscara caractere por caractere (não é possível usar expressão regular).

– Código para números #

– Código para letras em caixa baixa L – Código para letras em caixa alta U – Código para qualquer tipo de letra ? – Qualquer letra ou número A

– Código para qualquer tipo de caractere *

• No máximo, é possível configurar caracteres válidos e inválidos

– setInvalidCharacters – setValidCharacters

(100)

MaskFormater

• Para mais informações, consulte a documentação

– http://docs.oracle.com/javase/7/docs/api/javax/s wing/text/MaskFormatter.html

(101)

Documentação

• Para mais informações, consulte a documentação

– https://docs.oracle.com/javase/7/docs/api/javax/ swing/JFormattedTextField.html

(102)

JTextArea

• Corresponde a uma área de texto com múltiplas linhas

– Da mesma forma que o JTextField, o JTextArea possui um método getText para recuperar o valor digitado

• Construtores

– TextArea()

– TextArea(linhas, colunas) – TextArea(texto)

(103)

Exemplo de Uso

Esse o método determina que as linhas

serão puladas automaticamente.

Esse método determina que se uma palavra não couber na linha, ela será colocada na próxima linha.

(104)

Documentação

• Para mais informações, acesse a documentação

– http://docs.oracle.com/javase/7/docs/api/java/a wt/TextArea.html

(105)

JPasswordField

• É um campo de texto que oculta a informação que está sendo digitada

– Ideal para ser utilizado em uma janela de login e senha, por exemplo.

• Construtores

– JPasswordField()

– JPasswordField(tamanho)

(106)
(107)

JPasswordField

• Embora o JPasswordField possua um método getText para recuperar o valor digitado no campo de texto, recomenda-se o uso do método getPassword para tanto

– Esse método retorna uma array de char, que deve ser transformado em String

(108)

Documentação

• Para mais informações, consulte a documentação

– http://docs.oracle.com/javase/7/docs/api/javax/s wing/JPasswordField.html

(109)

JComboBox

• Apresenta uma lista de elementos, entre os quais o usuário pode escolher uma opção • O JComboBox grava o índice da opção

escolhida pelo usuário. • Construtores

– JComboBox()

– JComboBox<T>(T[] items)

(110)
(111)

JComboBox

• Para recuperar o índice da opção escolhida, usa-se o método getSelectedIndex

• Para recuperar o item escolhido usa-se o método getSelectedItem

– O retorno do método getSelectedItem é um Object, por isso é necessário fazer o casting

(112)

JComboBox

• E se eu precisar criar uma lista de pessoas? De datas? De telefones? De tarefas? De objetos?

(113)
(114)

JComboBox

• O JComboBox imprime na tela o resultado da chamada do método toString

• Ao sobrescrevermos o método para uma representação mais apurada do objeto, o resultado será mais satisfatório

Método toString sobrescrito.

(115)
(116)

Documentação

• Para mais detalhes, consulte a documentação

– https://docs.oracle.com/javase/6/docs/api/javax/ swing/JComboBox.html

(117)

JCheckBox

• É um componente que pode ser marcado ou desmarcado e que apresenta seu estado para o usuário

• Construtores

– JCheckBox(Icon icon) – JCheckBox(String text)

– JCheckBox(String text, boolean selected) – JCheckBox(String text, Icon icon)

(118)
(119)

JCheckBox

• O checkbox possui o método isSelected que retorna true se o

componente está

“marcado” ou false se não está marcado.

• Na prática, o JCheckBox é um tipo “especial” de

botão

– É possível definir ações que acontecerão quando ele mudar de estado, como em um botão.

(120)

Documentação

• Para mais informações, consulte a documentação

– https://docs.oracle.com/javase/7/docs/api/javax/ swing/JCheckBox.html

(121)

JRadioButton

• Outro tipo especial de botão, muito parecido com o checkbox, é o radio button

• Conceitualmente, um radio button deve fazer parte de um grupo

– Dentro desse grupo, apenas um radio button pode estar selecionado

• Construtores

(122)

JRadioButton

Essa operação define quais botões farão parte do grupo.

(123)

Documentação

• Para mais informações, consulte a documentação

– https://docs.oracle.com/javase/7/docs/api/javax/ swing/JRadioButton.html

(124)

JTable

• JTable é a classe que vai representar as nossas tabelas

• Para poder criar uma tabela, entretanto, precisaremos da “ajuda” de outra classe: DefaultTableModel

(125)

DefaultTableModel

• DefaultTableModel é a classe que

representará o modelo de dados da tabela • i.e., Definirá as características da tabela

(126)

DefaultTableModel

• DefaultTableModel é a classe que

representará o modelo de dados da tabela • i.e., Definirá as características da tabela

– Quantas colunas a tabela terá? – Qual o nome de cada coluna?

(127)

DefaultTableModel

• DefaultTableModel é a classe que

representará o modelo de dados da tabela • i.e., Definirá as características da tabela

– Quantas colunas a tabela terá? – Qual o nome de cada coluna?

(128)

DefaultTableModel

• Se DefaultTableModel faz tudo isso, para que serve a JTable?

– Resposta: a tabela serve para renderizar o modelo de dados.

• O modelo de dados vai descrever tudo que a JTable deve renderizar

• A JTable vai: (1) receber o modelo de dados, (2) ser inserida na janela.

(129)

Tabela – Exemplo de Uso

(130)

Tabela – Exemplo de Uso

(131)

Tabela – Exemplo de Uso

(132)

Tabela – Exemplo de Uso

• 1º Passo – Fazer o modelo descrever a tabela

Descrevi as colunas que minha tabela terá!

(133)

Tabela – Exemplo de Uso

• 2º Passo – Adicionar as linhas da tabela em um modelo.

– Cada elemento do array pessoas corresponderá a uma linha da tabela

– Para adicionar uma linha chamamos o método addRow – O método addRow recebe um array de Object

(134)

Tabela – Exemplo de Uso

• 2º Passo – Adicionar as linhas da tabela em um modelo.

(135)

Tabela – Exemplo de Uso

• 2º Passo – Adicionar as linhas da tabela em um modelo. Cada elemento do array

pessoas corresponderá a uma linha da tabela

Para adicionar uma linha chamamos o método addRow O método addRow recebe um

array de Object

Cada elemento desse array será um valor da célula

(136)

Tabela – Exemplo de Uso

(137)
(138)

Resultado - Tabela

Notem que a tabela apareceu sem o nome das colunas.

Como fazer com que o nome das colunas apareçam?

(139)

Tabela – Exemplo de Uso

• 4º Passo – Cria-se um JScrollPane (um tipo de conteiner) e adiciona-se a tabela dentro deste objeto.

(140)
(141)

Documentação

• Para saber mais, acesse a documentação das classes – DefaultTableModel • http://docs.oracle.com/javase/7/docs/api/javax/swing/table /DefaultTableModel.html – JTable • http://docs.oracle.com/javase/7/docs/api/javax/swing/JTabl e.html – JScrollPane • http://docs.oracle.com/javase/7/docs/api/javax/swing/JScro llPane.html

(142)

Gerenciadores de Layout

• São objetos que podem ficar responsáveis pelo posicionamento dos elementos dentro do

contêiner.

• Cada contêiner pode ser gerenciado por um único gerenciador

• Principais gerenciadores de layout

– BorderLayout – GridLayout – FlowLayout – BoxLayout

(143)

Gerenciadores de Layout

• São objetos que podem ficar responsáveis

pelo posicionamento dos elementos nas telas. • Principais gerenciadores de layout

– BorderLayout – GridLayout – FlowLayout – BoxLayout

Nesses dois gerenciadores, o componente é dimensionado para ocupar todo o

espaço destinado a ele

Nesses dois gerenciadores, o componente ocupa o espaço que ele “deseja” ocupar,

(144)

BorderLayout

• Divide a tela em 5 áreas: norte, sul, leste, oeste e centro.

• Deve-se definir explicitamente a região em que cada elemento será inserido na tela.

• Cada região pode conter apenas um elemento • Recomendado para projetos simples

(145)
(146)
(147)

Documentação

• Para mais informações, consulte a documentação

– http://docs.oracle.com/javase/7/docs/api/java/a wt/BorderLayout.html

(148)

GridLayout

• O GridLayout divide a área da janela em um formato de tabela

– As dimensões da tabela são determinadas na instanciação do GridLayout

• Construtores

– GridLayout()

– GridLayout(linhas, colunas)

– GridLayout(linhas, colunas, espaçamento horizontal, espaçamento vertical)

(149)
(150)
(151)

GridLayout – Resultado da Execução

3 l inh as 2 colunas } espaçamento vertical } es paç ame n to hori zon tal

(152)

Documentação

• Para mais informações, consulte a documentação

– http://docs.oracle.com/javase/7/docs/api/java/a wt/GridLayout.html

(153)

FlowLayout

• O FlowLayout funciona como um editor de texto

– Ele vai empilhar, a partir do início da janela, os elementos em uma “linha” e, quando não houver mais espaço para elementos, ele,

automaticamente, pulará uma “linha” e passará a empilhar elementos na próxima “linha”.

(154)

FlowLayout

• No construtor é possível definir o alinhamento que os elementos terão.

– Construtores • FlowLayout() • FlowLayout(alinhamento) – FlowLayout.LEFT – FlowLayout.CENTER – FlowLayout.RIGHT

(155)
(156)
(157)

Documentação

• Para mais informações, consulte a documentação

– http://docs.oracle.com/javase/7/docs/api/java/a wt/FlowLayout.html

(158)

BoxLayout

• O BoxLayout é similar ao FlowLayout, a diferença é que ele não “pula”

automaticamente para a próxima linha

quando não cabem mais elementos na janela • Além disso, é possível definir se o fluxo de

inserção será horizontal ou vertical.

– Construtor

(159)
(160)
(161)

Gerenciadores de Layout

• Esses gerenciadores de layout são relativamente simples e limitados

• Parece impossível criar uma interface gráfica mais elaborada utilizando qualquer um deles

(162)

Gerenciadores de Layout

• Como criar interfaces gráficas elaboradas

fazendo uso desses gerenciadores de layout mais simples?

– Resposta: Combinando eles!

– Como se um container só pode ser gerenciado por um gerenciador?

(163)

Gerenciadores de Layout

• Como criar interfaces gráficas elaboradas

fazendo uso desses gerenciadores de layout mais simples?

– Resposta: Combinando eles!

– Como se um container só pode ser gerenciado por um gerenciador?

• Resposta: Combinando diversos containers com diferentes gerenciadores de layout!

(164)

Painéis

• Para isso, precisaremos trabalhar com painéis! • Um painel é um container, assim como a janela,

entretanto ele não possui os recursos que uma janela possui (botões pré-definidos, área para barra de menus, etc.)

– Ele pode ser entendido como um quadro em branco

• Como containers também são componentes um container (janela) pode conter outros containers (painéis)

(165)

JPanel

• JPanel é a classe que representa um painel • Para interfaces elaboradas, pensamos no seu

design como a combinação de painéis

gerenciados por diferentes gerenciadores de layout

• Inserimos os componentes nos painéis • Inserimos os painéis na janela

(166)

Exemplo de Combinação de Painéis

A Janela é gerenciada pelo BoxLayout – empilhando componentes no eixo Y

(167)

Exemplo de Combinação de Painéis

(168)

Combinando Painéis

O painel desse JFrame é gerenciado por um

(169)

Combinando Painéis

JPanel painel = (JPanel) this.getContentPane();

BoxLayout gerenciador = new BoxLayout(painel, BoxLayout.Y_AXIS);

(170)

Combinando Painéis

Esse é um outro painel, gerenciado por

um FlowLayout (centralizado)

(171)

Combinando Painéis

JPanel painelTopo = new JPanel();

painelTopo.setBackground(Color.RED);

painelTopo.setLayout(new FlowLayout(FlowLayout.CENTER));

painelTopo.add(new JLabel("Cadastro de Cliente")); this.add(painelTopo);

(172)

Combinando Painéis

Esse é um painel que está sendo gerenciado por um GridLayout. Nele estão dois outros painéis, gerenciados por outros gerenciadores de

(173)

Combinando Painéis

JPanel painelCodigoEBotao = new JPanel();

painelCodigoEBotao.setLayout(new GridLayout(1, 2));

painelCodigoEBotao.setBackground(Color.BLUE);

(174)

Combinando Painéis

Esse painel se parece bastante com todos os outros de baixo

(um JLabel seguido por um JTextField, alinhados a esquerda). Criando uma classe

para representar esse tipo de painel, podemos simplificar um

(175)

Combinando Painéis

Um label e um campo de texto

Um painel gerenciado por um Flowlayout que alinha os elementos a esquerda Inserindo os

(176)

Combinando Painéis

PainelFormulario painelFormularioCodigo = new PainelFormulario("Código", 10);

painelFormularioCodigo.setBackground(Color.CYAN);

(177)

Combinando Painéis

JPanel painelBotaoConsultar = new JPanel();

painelBotaoConsultar.setLayout(new FlowLayout(FlowLayout.RIGHT));

painelBotaoConsultar.add(new JButton("Consultar"));

painelBotaoConsultar.setBackground(Color.GREEN);

(178)

Combinando Painéis

Todos esses painéis são “Painéis de Formulário”, a classe que

(179)

Combinando Painéis

PainelFormulario painelNome = new

PainelFormulario("Nome", 20);

painelNome.setBackground(Color.YELLOW); this.add(painelNome);

PainelFormulario painelEstado = new

PainelFormulario("Estado", 20);

painelEstado.setBackground(Color.GRAY); this.add(painelEstado);

PainelFormulario painelCidade = new

PainelFormulario("Cidade", 20);

painelCidade.setBackground(Color.ORANGE); this.add(painelCidade);

(180)

Combinando Painéis

PainelFormulario painelBairro = new

PainelFormulario("Bairro", 20);

painelBairro.setBackground(Color.LIGHT_GRAY); this.add(painelBairro);

PainelFormulario painelLogradouro = new

PainelFormulario("Logradouro", 20);

painelLogradouro.setBackground(Color.PINK); this.add(painelLogradouro);

PainelFormulario painelComplemento = new

PainelFormulario("Complemento", 20);

painelComplemento.setBackground(Color.WHITE); this.add(painelComplemento);

(181)

Combinando Painéis

JPanel painelBotoes = new JPanel();

painelBotoes.setBackground(Color.MAGENTA);

painelBotoes.setLayout(new

FlowLayout(FlowLayout.RIGHT));

painelBotoes.add(new JButton("Novo")); painelBotoes.add(new JButton("Salvar")); painelBotoes.add(new JButton("Apagar"));

(182)

Próxima aula

Referências

Documentos relacionados

i) Atender os usuários do SUS sem efetuar nenhum tipo de cobrança;.. j) Responsabilizar-se única e exclusivamente quanto a quaisquer ônus e obrigações concernentes às legislações

Ao apresentar um plano abrangente e coerente para o ensino, incluindo funda- mentação teórica, indicação de resultados de aprendizagem pretendidos, conhecimen- tos necessários

Produza uma lista mostrando departamento média salarial e quantidade de empregados para cada departamento excluindo a função “ATENDTE”. Exclua departamentos com menos de

professores da escola também atuam como consultores na Inova Consulting, que desenvolve projetos em empresas nas áreas de pesquisa de tendências, cultura de

Na forma de pagamento Pós-Paga ou na hi- pótese de haver a alteração automática da forma de pagamento para Pré-Paga durante o período de Permanência Mínima, no caso de

A partir destes espectros, que são obtidos de forma rápida e não destrutiva, consegue-se construir curvas de calibração para predição de diversas propriedades que podem ser

Sendo o modelo tradicional de grade de programação ainda responsável pela organização dos programas de TV e, portanto, compreendido como o dispositivo por excelência da

• Os sinais elétricos presentes nos terminais do soquete da matriz multi-eletrodo são analógicos, de baixa amplitude (entre 5 uV e 200 mV);.. • Para serem registrados no computador