SWING
Cleyton Caetano de Souza IFPB – Campus Monteiro
Roteiro
• JOptionPane • SWING
– Containers: JFrame e Jpanel
– Componentes: JLabel, JTextField, JButton, etc.
• Eventos e Ouvintes
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
Entrada e Saída via Console
• Usamos para interagir com o usuário • Saída
– System.out.println(“”);
• Entrada
Entrada e Saída gráficas
• Uma alternativa simples e mais “atraente” de interação é o uso de “janelas de diálogo”
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
Método: showMessageDialog
• Função:
– Exibir mensagens de texto
• Exemplo • Resultado
Analisando a caixa de diálogo
Título da caixa de diálogo
Ícone da caixa de diálogo
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
Método: showMessageDialog
• ShowMessageDiaolog é um método sobrecarregado
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
Método: showMessageDialog
• Assinatura
• Exemplo de uso • Resultado
Tipos de Mensagem
• O parâmetro messageType define o ícone que aparecerá na janela, podendo assumir
Ícone
• Ainda é possível trocar o ícone que será
exibido por qualquer outra imagem utilizando outra versão do showMessageDialog.
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
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
Método: showConfirmDialog
Método: showConfirmDialog
• Todos os elementos destacados podem ser configurados, utilizando as versões
Método: showConfirmDialog
Mensagem
Título
Opções de Botões
OptionType
• Possíveis valores para o parâmetro
OptionType, que define os botões que aparecerão no confirmDialog
Retornos
• Possíveis retornos do método confirmDialog
– O retorno corresponde ao botão clicado pelo usuário
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
Método: showInputDialog
• Exemplo de Uso
• O retorno do método corresponde ao valor digitado pelo usuário, após ele clicar em OK
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
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!
Método: showInputDialog
• O retorno dessa variação é um objeto do valor escolhido
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
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
Método: showOptionDialog
Documentação
• Para mais informações, acesse a documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s wing/JOptionPane.html
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
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
Editores Visuais
• Existem IDEs que fornecem editores visuais do estilo clique e arraste para montar essas
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
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
Hierarquia de Classes
Hierarquia de Classes
• Existem dois grupos principais de classes • Você consegue identificá-los?
Hierarquia de Classes
• Existem dois grupos principais de classes • Você consegue identificá-los?
Hierarquia de Classes
• Containers
– É utilizado para conter componentes
• Componentes
– São combinados dentro dos containers para formar as telas da nossa aplicação
Hierarquia das Classes
JFrame
• JFrame é uma classe que fornece os recursos para criar uma Janela
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
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
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
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.
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
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
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.
Componentes
• Vamos estudar alguns componentes e adicioná-los na tela em branco
– JLabel
– JTextField – JButton
– JMenuBar, JMenu, JMenuItem – JComboBox
– JFormattedTextField – JTable
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)
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á.
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
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)
JTextField
• É possível recuperar o texto digitado na
campo de texto chamando o método getText()
– Esse método retorna uma String, que
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
JButton
• javax.swing.Jbutton
• Corresponde a um botão, onde o usuário pode clicar! • Construtores – JButton() – JButton(icone) – JButton(texto) – JButton(icone, texto)
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
JButton
JButton
• Para que serve um botão?
– Botões servem para ser clicados
• O que acontecerá quando clicarmos nesse botão?
JButton
• Para que serve um botão?
– Botões servem para ser clicados
• O que acontecerá quando clicarmos nesse botão?
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
Listeners
• Nossa classe ouvinte do botão deve
obrigatoriamente implementar a interface
Listeners
• Por essa razão, ela será obrigada a implementar um método chamado actionPerformed
Listeners
• Esse é o método que será executado sempre que o botão que ela estiver “observando” for clicado
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
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
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.
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...
Eventos e Ouvintes
• Para cada tipo de evento, existe um tipo
específico de ouvinte e atributos específicos que podem ser solicitados
“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.
“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.
“Reagindo” a outros tipos de eventos
• Crie o ouvinte do evento em que você está interessado.
Esses objetos representam a mudança de foco.
“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.
“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.
“Reagindo” a outros tipos de eventos.
Conectando o ouvinte ao objeto que ele “prestará atenção”.
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
JMenuBar
JMenu
JMenuItem
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
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”
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.
Exemplo de Uso
Adicionando o mesmo ouvinte nas duas opções
JMenuItem + Listeners
• É possível fazer com que comportamentos diferentes sejam executados para o cada opção do menu que for clicada.
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.
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.
Exemplo 2
Usamos o objeto que representa o evento para decidir qual ação realizar.
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
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
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
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
MaskFormater
• Para mais informações, consulte a documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s wing/text/MaskFormatter.html
Documentação
• Para mais informações, consulte a documentação
– https://docs.oracle.com/javase/7/docs/api/javax/ swing/JFormattedTextField.html
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)
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.
Documentação
• Para mais informações, acesse a documentação
– http://docs.oracle.com/javase/7/docs/api/java/a wt/TextArea.html
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)
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
Documentação
• Para mais informações, consulte a documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s wing/JPasswordField.html
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)
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
JComboBox
• E se eu precisar criar uma lista de pessoas? De datas? De telefones? De tarefas? De objetos?
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.
Documentação
• Para mais detalhes, consulte a documentação
– https://docs.oracle.com/javase/6/docs/api/javax/ swing/JComboBox.html
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)
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.
Documentação
• Para mais informações, consulte a documentação
– https://docs.oracle.com/javase/7/docs/api/javax/ swing/JCheckBox.html
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
JRadioButton
Essa operação define quais botões farão parte do grupo.
Documentação
• Para mais informações, consulte a documentação
– https://docs.oracle.com/javase/7/docs/api/javax/ swing/JRadioButton.html
JTable
• JTable é a classe que vai representar as nossas tabelas
• Para poder criar uma tabela, entretanto, precisaremos da “ajuda” de outra classe: DefaultTableModel
DefaultTableModel
• DefaultTableModel é a classe que
representará o modelo de dados da tabela • i.e., Definirá as características da tabela
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?
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?
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.
Tabela – Exemplo de Uso
Tabela – Exemplo de Uso
Tabela – Exemplo de Uso
Tabela – Exemplo de Uso
• 1º Passo – Fazer o modelo descrever a tabela
Descrevi as colunas que minha tabela terá!
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
Tabela – Exemplo de Uso
• 2º Passo – Adicionar as linhas da tabela em um modelo.
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
Tabela – Exemplo de Uso
Resultado - Tabela
Notem que a tabela apareceu sem o nome das colunas.
Como fazer com que o nome das colunas apareçam?
Tabela – Exemplo de Uso
• 4º Passo – Cria-se um JScrollPane (um tipo de conteiner) e adiciona-se a tabela dentro deste objeto.
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
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
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,
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
Documentação
• Para mais informações, consulte a documentação
– http://docs.oracle.com/javase/7/docs/api/java/a wt/BorderLayout.html
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)
GridLayout – Resultado da Execução
3 l inh as 2 colunas } espaçamento vertical } es paç ame n to hori zon talDocumentação
• Para mais informações, consulte a documentação
– http://docs.oracle.com/javase/7/docs/api/java/a wt/GridLayout.html
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”.
FlowLayout
• No construtor é possível definir o alinhamento que os elementos terão.
– Construtores • FlowLayout() • FlowLayout(alinhamento) – FlowLayout.LEFT – FlowLayout.CENTER – FlowLayout.RIGHT
Documentação
• Para mais informações, consulte a documentação
– http://docs.oracle.com/javase/7/docs/api/java/a wt/FlowLayout.html
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
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
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?
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!
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)
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
Exemplo de Combinação de Painéis
A Janela é gerenciada pelo BoxLayout – empilhando componentes no eixo Y
Exemplo de Combinação de Painéis
Combinando Painéis
O painel desse JFrame é gerenciado por um
Combinando Painéis
JPanel painel = (JPanel) this.getContentPane();
BoxLayout gerenciador = new BoxLayout(painel, BoxLayout.Y_AXIS);
Combinando Painéis
Esse é um outro painel, gerenciado por
um FlowLayout (centralizado)
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);
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
Combinando Painéis
JPanel painelCodigoEBotao = new JPanel();
painelCodigoEBotao.setLayout(new GridLayout(1, 2));
painelCodigoEBotao.setBackground(Color.BLUE);
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
Combinando Painéis
Um label e um campo de texto
Um painel gerenciado por um Flowlayout que alinha os elementos a esquerda Inserindo os
Combinando Painéis
PainelFormulario painelFormularioCodigo = new PainelFormulario("Código", 10);
painelFormularioCodigo.setBackground(Color.CYAN);
Combinando Painéis
JPanel painelBotaoConsultar = new JPanel();
painelBotaoConsultar.setLayout(new FlowLayout(FlowLayout.RIGHT));
painelBotaoConsultar.add(new JButton("Consultar"));
painelBotaoConsultar.setBackground(Color.GREEN);
Combinando Painéis
Todos esses painéis são “Painéis de Formulário”, a classe que
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);
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);
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"));