• Nenhum resultado encontrado

Introdução ao

N/A
N/A
Protected

Academic year: 2021

Share "Introdução ao"

Copied!
124
0
0

Texto

(1)

Introdução ao pacote Swing

Prof. Giuliano Prado de Morais Giglio, M.Sc.

[email protected]

A Plataforma Java

Aplicações Visuais com

Swing

(2)

 Peer based

• Delega ao toolkit nativo a criação de elementos gráficos

• Look & feel da plataforma de execução

 Limitações

• Falta de consistência entre plataformas

• “Denominador comum” para atender a todas as plataformas

• “Bugs” diferentes em plataformas diferentes

• “Write once, test everywhere”

(3)

Non-peer-based GUI toolkit

 Conjunto maior de elementos

• Mais funcionalidade

 Maior consistência de uso entre plataformas

• Mais “robusto”, maior portabilidade

 Pacote javax.swing

• Pacote de extensão no Java 1.1

• Incorporado como pacote básico no Java 2

(4)

 Componentes leves

 Não substitui integralmente o AWT

• Estende o AWT

• Diagramadores & Listeners

 Look& Feel configurável

• Windows, Motif, Metal

 Double-buffering automático

 Arquitetura MVC

(5)

 O Swing adota uma arquitetura conhecida como Model-View-Controller (MVC)

 Modelo = dados/conteúdo

• estado de um botão, texto

 Visão = aparência

• cor, tamanho

 Controle = comportamento

• reação a eventos

(6)

Qualquer componente, antes de ser exibido em uma interface, precisa ser adicionado em um contêiner.

Conteiner nada mais é um “componente que pode conter outros componentes”

O contêiner mais simples do Swing é o painel:

JPanel.

Exemplo:

(7)

 Todo programa que utiliza componentes Swing tem pelo menos um TLC

• raiz de uma “containment hierarchy”

 Todo TLC possui um “content pane” que contém os elementos visíveis

• opcionalmente, uma “menu bar”

 JFrame, JDialog, JApplet

• aplicações tipicamente possuem pelo menos uma hierarquia com um JFrame como raiz (janela

principal)

(8)
(9)
(10)

1. Crie um projeto Java normal (Aplicação Java)

2. Desmarque a opção “Criar a Classe Principal...”

3. Crie pacotes para organizar seu projeto.

Sugestão:

I. classes

II. forms

(11)
(12)

Logo acima da área de design, há uma barra de controle que alterna entre a área de Código-Fonte (onde se programa as rotinas do formulário) e a área de design da tela Projeto.

Ao lado observe que tem um botão (com um

olhinho verde), onde pode-se visualizar como o

formulário está ficando.

(13)

 Primeiro passo: criar uma classe que

representa a interface gráfica com o usuário (JWindow ou JFrame);

 O mais indicado de todos os conteiners para representar uma “janela” ou formulário visual no swing é o JFrame.

 Criação:

public class Janela extends JFrame {

....

}

(14)

 O construtor da classe deve tratar das seguintes tarefas:

• Chamar o construtor de uma superclasse

para dar um título ao frame e tratar de outros procedimentos de configuração;

• Definir o tamanho da janela de um frame;

• Decidir o que fazer se um usuário fechar a janela;

• Exibir o frame;

(15)

 Clique com o botão direito em cima do pacote ‘forms’ e escolhe a opção Novo >

Form JFrame

Área de Desenho

(16)

 Título

• JFrame(String) – construtor

setTitle(String)

 Tamanho

• setSize(int,int) – largura,altura

• pack( ) - mantém a disposição dos elementos

• setBounds(int,int,int,int) – x,y,largura,altura

(17)

 Exibição

• setVisible(boolean)

• show( )

• hide( )

 Comportamento

• setDefaultCloseOperation( argumento )

 EXIT_ON_CLOSE = sai da aplicação;

 DISPOSE_ON_CLOSE = fecha o frame, descarta o objeto e segue a aplicação;

 DO_NOTHING_ON_CLOSE = mantém o frame aberto

 HIDE_ON_CLOSE = fecha o frame e continua

executando;

(18)

Todos esses métodos podem ser acessados através das propriedades

dos componentes que possuem essa

característica, mudar os aspectos visuais do

componente;

(19)

 Abaixo estão listados as propriedades mais importantes (ou mais comumente acessadas) para um JFrame

defaultCloseOperation: define o comportamento da janela ao ser fechada;

title: define o título da janela que aparece no seu cabeçalho

alwaysOnTop: se a janela permanecerá fixa no topo da tela ou não

resizable: se a janela poderá ser redimensionada pelo

usuário ou não (recomenda-se deixa-la desativada)

(20)

Na área designada por “Código” da paleta de propriedades, possuem características adicionais de um componente.

No caso do JFrame, ali se encontra as opções de tamanho padrão para o formulário:

Política de Tamanho de Form: qual o padrão adotado pelo formulário em relação ao seu tamanho, podendo ser:

Gerar Pack(): admite o tamanho ajustado dos componentes que estão dispostos em sua área;

Gerar Código de Redimensionamento: mantém o tamanho designado pelo designer

Gerar Código de Redimensionamento: mantém o tamanho

designado nas propriedades de dimensão, independente do que

foi estabelecido pelo designer.

(21)

 Ainda na opção “Código”

Se a opção escolhida para o tamanho for Gerar Código de Redimensionamento, você pode escolher a opção Gerar Centralizado para que o formulário apareça no centro da tela.

Para que o formulário ocupe toda a tela (maximizado),

basta preencher a propriedade extendedState com o

valor 6

(22)

 Se o desejo for iniciar o JFrame de forma maximizada via código-fonte, basta fazer:

this.setExtendedState(this.MAXIMIZED_BOTH);

ATENÇÃO USUÁRIOS DE LINUX, use:

this.setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize());

this é a referência ao próprio JFrame corrente.

(23)

 Caso você fez todos os procedimentos anteriores e

o formulário não apareceu maximizado,

desmarque a opção Gerar Tamanho da aba de

propriedades Código

(24)

Diagramadores

Como definir o layout dos componentes

Prof. Giuliano Prado de Morais Giglio, M.Sc.

[email protected]

A Plataforma Java

Aplicações Visuais com

Swing

(25)

 Arrumam um grupo de elementos (ou os componentes) quanto à sua disposição no JFrame;

 Estão associados a todos os containers

 Há diferentes estilos de arrumação

• como fluxo de texto

• orientada pelas bordas

• em forma de grade

• e outros...

(26)

 Coloca os componentes lado a lado, uma linha após a outra

 Alinhamento: centralizado (default), à esquerda ou à direita

 Default para o JPanel

(27)

Divide o container em 5 áreas: norte, sul, leste, oeste e centro

Default para contentPane do JFrame

(28)

Células do mesmo tamanho especificadas pelo

número de linhas e colunas

(29)

Como ele é um container,

precisa-se definir seu

layout

(30)

 Fora as opções já mencionadas, o NetBeans oferece algumas opções interessantes e importantes:

Desenho Livre: você tem toda liberdade de colocar o componente em qualquer local do seu form, porém, ele oferece um algumas guias de orientação e combinação com os demais componentes dispostos;

Layout Absoluto: mantém a questão da liberdade de disposição, porém, sem as guias (promove maior liberdade ainda).

Layout Nulo: semelhante ao Absoluto.

(31)

JPanel é um container que pode delimitar uma

área dentro de um JFrame em diversos

formatos (borda):

(32)

Conhecendo os primeiros e mais básicos

componentes Swing

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma Java

Aplicações Visuais com

Swing

(33)

Vamos conhecer os componentes e seus funcionamentos da melhor maneira: NA PRÁTICA!

Para isso, vamos construir uma aplicação-

exemplo de autenticação de usuário (famoso

“login”)

Vamos trabalhar com o arquivo

Aula_Visual_Login.pdf que possui o passo-a-

passo de nossa aplicação.

(34)

Indicado para colocar uma informação textual no form, tal como uma descrição de um

campo ou mensagem de texto qualquer;

Propriedades mais importantes:

◦ text: texto que será exibido;

◦ background: cor de fundo (do próprio botão)

◦ foreground: cor do texto;

◦ font: configurações da fonte do texto (tipo, cor,

estilo, etc);

(35)

Indicado para que o usuário preencha com uma informação textual (ex: nome, endereço, cidade, etc) em uma linha de edição.

Propriedades mais importantes:

◦ text: texto que será exibido (não é uma prática);

◦ background: cor de fundo (do próprio botão)

◦ foreground: cor do texto;

◦ font: configurações da fonte do texto (tipo, cor, estilo, etc);

◦ editable: se estará impedida a edição ou preenchimento, ou não

◦ enabled: se ele estará habilitado para edição ou não

(36)

Métodos mais importantes para

manipulação do componente dentro do código:

getText( ): captura o texto do campo

setText(String): coloca um texto no campo

getSelectedText( ):captura o texto do campo que foi selecionado.

setEditable(boolean): tornar ou não o campo editável

isEditable( ): retorna true ou false, se o campo

é ou não editável

(37)

Cada componente deverá ser identificado no código-fonte para que ocorra sua manipulação, tais como pegar o que foi preenchido pelo usuário ou selecionado, bem como trocar suas características durante sua execução.

Para isso você deverá renomear o nome do componente, daquele que já é dado pelo Netbeans (que é jTextField1, jTextField2, jButton1, etc)

Esta opção só está disponível acessando via botão direito do

mouse em cima do componente:

(38)

Define as características de um botão;

Principais propriedades:

◦ text: define o texto que será exibido no botão;

◦ icon: define um ícone;

◦ background: cor de fundo (do próprio botão)

◦ foreground: cor do texto;

◦ font: configurações da fonte do texto (tipo, cor, estilo, etc);

◦ enabled: se estará habilitado ou não;

(39)

Maiores propriedades e características de

um botão poderá ser conhecido quando da

manipulação de BARRA DE FERRAMENTAS,

onde exploraremos melhor outras

propriedades interessantes!

(40)

 Usado em botões e outros componentes para adicionar ícones;

 Apesar de ser uma classe específica para isso, os componentes possuem uma agregação com essa classe para adicionar a imagem, descrita pela

propriedade icon;

(41)

 Ao incluir uma imagem no botão, pode-se desejar modificar a posição do texto em relação a imagem. Logo, podemos mudar as propriedades do botão:

CENTER TOP BOTTOM

LEFT CENTER RIGHT

(42)

 Podemos usar um ícone para inserir uma imagem

num formulário, por exemplo. O macete é utilizar

um Label para isso.

(43)
(44)

 Enviar o foco para um componente específico:

jComponente.requestFocus();

(45)

 Extende (herda) de JTextField, ou seja, possui as mesmas propriedades, porém com um

comportamento diferente de “esconder” os dados que estão sendo digitados;

 Mesmos métodos de sua classe “pai”;

(46)

 Depois de montada a interface, como fazemos para programar o seu funcionamento?

Faremos um programa main() com começo - meio - e fim?

 Repare que agora não temos mais um “fluxo contínuo” de um programa único, e sim

componentes (por exemplo, os botões) que respondem ao serem acionados.

 Para continuarmos então, precisamos conhecer o

que são EVENTOS!

(47)

Trabalhando com Eventos

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma Java

Aplicações Visuais com

Swing

(48)

Um modelo de programação que tornou-se bastante difundido com o uso de interfaces gráficas foi a programação orientada por eventos.

Segundo esse modelo, o programa deixa de ter o controle do fluxo de execução, que passa a um sistema encarregado de gerenciar a interface.

Assim, o programa passa a ser chamado pelo

sistema quando algum evento é gerado na interface.

(49)

 Para que o programa possa ser chamado pelo sistema, ele deve registrar uma função para cada evento de interface que ele desejar tratar.

 Tais funções são chamadas de callbacks

por serem ‘chamadas de volta’ pelo

sistema.

(50)

 Esse modelo é orientação por

ortogonal ao modelo de objetos. É perfeitamente possível projetar um sistema OO que use o modelo de orientação por eventos para tratar eventos de interface, comunicações, etc.

 Porém, temos um problema: uma linguagem

puramente OO não possui o conceito de

função. Como resolver então?

(51)

A solução é utilizar um objeto que faça o papel de callback. Ou seja, onde registraríamos uma função, passamos a registrar um objeto.

Assim, quando o sistema precisar

executar a callback, ele deverá executar

um determinado método do objeto. Esse

método, então, fará o tratamento do evento.

(52)

 Como Java é uma linguagem OO na qual não existe o conceito de função, callbacks devem ser implementadas através de

objetos

 Um objeto que implementa uma

callback em Java é chamado de listener

(53)

 Os listeners fazem o papel das callbacks.

Listeners são definidos por interfaces e podem estar aptos a tratar mais de um tipo de evento.

 Quando um listener tem um de seus métodos

chamados, ele recebe um parâmetro que

descreve o evento ocorrido. Esse parâmetro é um

objeto: existem classes para modelar diferentes

grupos de eventos.

(54)

 Definem interfaces que representam um grupo de callbacks

 São registrados junto aos componentes

 Exemplo: java.awt.event.MouseListener

public abstract void mouseClicked(MouseEvent e) public abstract void mousePressed(MouseEvent e) public abstract void mouseReleased(MouseEvent e) public abstract void mouseEntered(MouseEvent e) public abstract void mouseExited(MouseEvent e)

Evento ocorrido que é um evento de mouse Métodos do Listener

que tratam os eventos

(55)

 Modela a callback de um evento do tipo ActionEvent.

 Esse tipo de evento é o mais simples e significa a ação principal do componente, tal como um clique do botão, seleção de um item num combo, etc.

public abstract void actionPerformed(ActionEvent e)

(56)

 Trazem informações sobre o evento ocorrido

 São passados aos listeners (callbacks)

(57)

Modela o evento que representa uma ação executada sobre um componente.

O significado depende do componente.

Esse tipo de evento é o mais simples e pode significar a ação principal do componente, tal como:

Exemplos:

◦ “um clique do botão”

◦ “seleção de um item num combo,”

◦ “botão pressionado“

◦ “entrada de texto finalizada”

◦ • …

(58)

Modela os eventos que podem ocorrer em uma janela.

Essa classe declara constantes que identificam os diversos eventos

WINDOW_OPENED: quando a janela é aberta

WINDOW_CLOSING : quando a janela está sendo fechada

WINDOW_CLOSED : quando a janela foi fechada

WINDOW_ICONIFIED : quando a janela é maximizada

WINDOW_DEICONIFIED : quando a janela é minimizada

WINDOW_ACTIVATED: quando a janela é ativada (mostrada)

WINDOW_DEACTIVATED: quando a janela é desativada.

(59)

Modela os eventos que podem ocorrer com mouse. Essa classe declara constantes que identificam os diversos eventos de mouse:

MouseClicked(MouseEvent e): quando o mouse é clicado (clica e solta) MousePressed(MouseEvent e): quando o mouse é pressionado (aperto) MouseReleased(MouseEvent e): quando se passa o mouse sobre

MouseEntered(MouseEvent e): quando o foco chega ao mouse

MouseExited(MouseEvent e): quando solta o botão do mouse

(despressiona)

(60)

Modela os eventos que podem ocorrer de foco. Essa classe declara constantes que identificam os diversos focos ao componente:

FocusGained(FocusEvent evt): quando um componente recebe o foco

FocusLost(FocusEvent evt): quando um componente perde o foco

(61)

Modela os eventos que podem ocorrer com digitação de texto. Essa classe declara constantes que identificam os diversos eventos de teclado:

KeyPressed(KeyEvent evt): quando se aperta uma tecla

KeyReleased(KeyEvent evt): quando se digita pelo menos dois caracteres (pois um seria o evento anterior)

KeyTyped(KeyEvent evt): quando se digitou um caracter (apertou e

soltou). Pode-se utilizar para verificar o que foi digitado pelo usuário.

(62)

Basta clicar com o botão direito do mouse em cima de cada componente e acessar a opção “Eventos” e depois qual

categoria de eventos para aquele componente você deseja;

Exemplo: acessando

eventos de um Botão

(63)

Observe que a categoria Action significa a ação para aquele componente, no caso, o Botão;

Ao acessa-la, você visualiza o Listener previsto que é o actionPerformed que significa “acionar o botão” ou

simplesmente “clica-lo”.

Clicando no Listener, ele cria o método para o evento na área

de código para você programar como convier:

(64)

Agora você já pode dar funcionalidade à

sua interface, fazendo a manipulação

(programação) dos eventos que desejar de

seus componentes relacionados!

(65)

Caixas de Diálogos

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma Java

Aplicações Visuais com

Swing

(66)

A entrada de dados pelo dispositivo padrão pode ser um problema;

Vamos ver uma alternativa, tanto para entrada como para saída de dados;

Para tanto utilizaremos Caixas de Diálogo

implementadas através da classe JOptionPane;

(67)

import javax.swing.JOptionPane; // Importa a Classe JOptionPane

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

// Mostra uma mensagem na tela // Primeiro parâmetro é sempre null

// Segundo parâmetro é a mensagem que se deseja exibir

JOptionPane.showMessageDialog (null, "Para continuar clique no botão \"OK\"!");

System.exit(0); // Termina o programa

} A Classe System faz parte do

pacote java.lang, que é automaticamente importado em

todo programa Java.

(68)

ÍCONE

BOTÕES DE

OPÇÃO

CAMPO DE

ENTRADA MENSAGEM

TÍTULO

68

(69)

A Classe JOptionPane possui os seguintes métodos:

showMessageDialog

Mostra algum aviso ao usuário

showConfirmDialog

Solicita uma confirmação do tipo SIM/NÃO/CANCELAR

showInputDialog

Solicita alguma entrada

showOptionDialog

É uma unificação dos três métodos anteriores

(70)

JOptionPane.showMessageDialog (...);

showMessageDialog (null, “mensagem”);

showMessageDialog (null, “mensagem”, “título”, messageType);

showMessageDialog (null, “mensagem”, “título”, messageType, icone);

Tipo do ícone

(71)

messageType

JOptionPane.ERROR_MESSAGE

JOptionPane.INFORMATION_MESSAGE

JOptionPane.WARNING_MESSAGE

JOptionPane.QUESTION_MESSAGE

JOptionPane.PLAIN_MESSAGE

(72)

int resultado;

resultado = JOptionPane.showConfirmDialog (...);

showConfirmDialog (null, “mensagem”);

showConfirmDialog (null, “mensagem”, “título”, optionType);

showConfirmDialog (null, “mensagem”, “título”, optionType, messageType);

showConfirmDialog (null, “mensagem”, “título”, optionType, messageType, “ícone”);

Botões desejados

(73)

optionType

JOptionPane.DEFAULT_OPTION (botão de Ok)

JOptionPane.YES_NO_OPTION

JOptionPane.YES_NO_CANCEL_OPTION

JOptionPane.OK_CANCEL_OPTION

(74)

showInputDialog (“mensagem”);

showInputDialog (null, “mensagem”);

showInputDialog (null, “mensagem”, “título”, messageType);

showInputDialog (“mensagem”, “valorInicial”);

showInputDialog (null, “mensagem”, “valorInicial”);

showInputDialog (null, “mensagem”, “título”, messageType, ícone , valoresSelecao[] , valoresSelecao[1]);

String resultado;

resultado = JOptionPane.showInputDialog (...);

(75)

int resultado;

resultado = JOptionPane.showOptionDialog (...);

showOptionDialog (null, “mensagem”, “título”, optionType, messageType, icone, opcoes[], opcoes[1]);

(76)

Conhecendo os demais componentes Swing

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma Java

Aplicações Visuais com

Swing

(77)

O componente JFormattedTextField, similar a uma caixa de texto JTextField, fornece a possibilidade da validação e exibição de dados formatados em tempo real, ao seja, à medida que seu conteúdo é inserido.

• Esse componente é conhecido nas linguagens Visual Basic, Delphi, C++ como MaskEdit, ou simplesmente caixa de texto tipo máscara.

A vantagem de usar uma caixa de texto tipo máscara é

que o usuário é forçado a digitar os dados no formato

especificado. O controle não aceita conteúdo que não

siga os padrões predefinidos.

(78)

Para configurar a máscara (no NetBeans): propriedade

formatterFactory:

(79)

Antes de usar o componente JFormattedTextField, é preciso entender o funcionamento da classe

MaskFormatter (do pacote javax.swing.text).

Essa classe é usada para especificar a máscara que

será usada na caixa de texto.

(80)

 Para pegar os dados com a máscara:

getText()

(Classe especifica)getValue()  faz-se o casting

 Para pegar os dados sem a máscara:

Exemplo:

String str = jFormattedTextField1.getText();

String result = str.replace(".","").replace("-", "");

(81)

Vamos conhecer os demais componentes através de outro exemplo prático!

Para isso, vamos construir uma aplicação- exemplo de controle de automóveis.

Vamos trabalhar com o arquivo

Aula_Visual_Automovel.pdf que possui o passo-

a-passo de nossa aplicação.

(82)

Semelhante ao Campo de Tetxo, porém, permite que a inserção de texto seja em mais linhas (e colunas);

Proporciona maior autonomia e quantidade de texto, tais

como um corpo de mensagem de um email, ou campo

de observações, dentre outros.

(83)

Basicamente possui propriedades para configurar como as barras de rolagem (vertical e horizontal) aparecerão e se comportarão no componente;

As propriedades para se definir esse padrão são:

horizontalScrollBarPolicy (para barra horizontal) e verticalScrollBarPolicy (para barra vertical)

Valores que podem assumir:

◦ ALWAYS: as barras sempre estão aparecendo;

◦ AS_NEEDED: somente quando extrapolar a área (vertical ou horizontal);

◦ NEVER: as barras não aparecem em hipótese alguma.

(84)

 Possui as mesmas propriedades do Campo de Texto: getText( ), setText( ), getSelectedText( );

 A propriedade lineWrap, quando acionada, permite que o texto quebre automaticamente quando chegar à margem (inclusive aparecendo automaticamente a barra de rolagem)

Métodos principais e expecíficos:

append(String texto) – acrescenta linha no final

insert(String texto,int posição) – insere linha numa posição;

setLineWrap(boolean) – determina se o texto quebrará

automático quando chegar a margem final

(85)

 Também identificada como Lista Drop-Down, é um componente de seleção de itens previamente definidos;

 Sua vantagem em relação aos demais

componentes de seleção é o espaço reduzido que

ocupa num formulário e a facilidade de manipulação

via código-fonte;

(86)

 Para montagem de seus itens, acessa-se via

propriedade model, que abrirá uma caixa para

inserção dos itens:

(87)

Para manipular os itens da caixa, é preciso saber que a lista de itens funciona como um “vetor” e cada item ocupa uma posição e, portanto, possui um índice;

Este índice é automático e cada item possui seu valor de acordo com a posição que está na lista, sendo o primeiro a começar de zero e segue sequencialmente até o final.

Logo, este índice pode ser utilizado em alguns métodos para acessar valores selecionados ou “selecionar” um item específico.

0 1

2 3

(88)

 Principais métodos para manipulação do componente no código-fonte:

addItem(Object): acrescenta itens;

getItemAt(int): retorna o texto do item na posição de índice especificada pelo argumento inteiro;

getItemCount( ): retorna o nº de itens;

getSelectedIndex( ): retorna a posição do índice do item selecionado;

getSelectedItem( ): retorna o texto do item selecionado;

setSelectedIndex(int): seleciona na lista o item na

posição de índice indicada;

(89)

São também componentes para seleção de itens, onde estes aparecem dispostos inteiramente no formulário (portanto, ocupam mais espaço);

Possuem o mesmo comportamento, porém a principal diferença entre eles é:

◦ Botão de Radio: permite somente a seleção de UM item somente;

◦ Caixa de seleção: permite a seleção de mais de um item

Radio

Check

(90)

Todos possuem as propriedades comuns aos demais campos, com a mesmas características: foreground, background, text, icon, font.

Porém, como se trata de um campo de seleção, pode ter situações que um determinado item possa se apresentar já selecionado para o usuário;

Esta propriedade é selected: basta selecionar o item

desejado e marcar essa opção.

(91)

 Vários métodos em comum:

setSelected(boolean): seleciona o componente se o argumento for true.

isSelected( ): retorna um booleano se o componente está selecionado.

getText(): pegar o texto do item

(92)

No caso específico dos campos Radio, se você testar sua aplicação verá que não ocorre a exclusão mútua, ou seja, se selecionar um item desmarca automaticamente os demais;

Para que esse comportamento padrão ocorra, precisamos vincular todos os campos Radio a um Grupo de Botões;

Ao arrasta-lo para seu formulário, ele fica invisível, pois é um componente de “comportamento” ao invés de um componente

“visual”;

Você poderá acessa-lo e visualiza-lo através da área Navegador

do NetBeans (canto inferior esquerdo)

(93)

No NetBeans

Selecionar todos para que eles estejam submetidos ao mesmo Grupo de Botões

(94)

 O uso de Grupo de Botões facilita a manipulação global dos Radios, como por exemplo:

Para limpar o grupo de RadioButtons

buttongroup1.clearSelection();

(95)

Preparando os campos Radio para definir qual valor será capturado quando a opção for selecionada, podendo ser o próprio texto da opção.

Para isso, precisamos definir a propriedade

actionCommand (que já deve ter o texto colocado na

propriedade text)

(96)

Vamos clicar no botão de 3 pontinhos ao lado e abrirá a

janela de definição da propriedade

(97)

Iremos escolher a opção Código Personalizado, pois é

ali que definiremos qual valor do Radio será capturado

quando for marcado:

(98)

Observe que foi selecionado o Radio da opção ‘Casado’.

Basta preencher no campo designado o valor que se

queira capturar quando for selecionado. Nesse caso,

iremos manter o texto de identificação do campo, mas

poderia ser qualquer valor desejado.

(99)

Com todos os campos Radio definidos os valores que serão capturados em cada opção:

Para pegar a opção selecionada, usamos o buttonGroup:

String valor;

valor = buttonGroup1.getSelection().getActionCommand();

valor terá o texto colocado em actionCommand da opção

selecionada

(100)

Serão dados vários códigos de exemplo de como manipular campos Radio,

ComboBox, TextField e outros, na seção

DICAS DE IMPLEMENTAÇÃO

mais à frente!

(101)

É um container semelhante a um JPanel, porém com a capacidade de se incluir várias guias (ou “orelhinhas”), que são na verdade subáreas do painel que funcionam como novos containers;

Desta forma podemos ter várias áreas de componentes e

um único componente ou local;

(102)

Incluindo Abas

(103)

O Painel de Guias possui a propriedade border similar a qualquer JPanel para melhorar seu layout.

A propriedade font configura os textos e títulos de todas as

abas (como colocar em negrito, por exemplo)

(104)

A ordem em que as guias aparecem podem ser modificadas no Navegador “puxando”

uma pra cima ou pra baixo de acordo com o

local desejado:

(105)

 Principais métodos para manipulação do componente no código-fonte:

getTabCount( ): retorna o número total de abas;

setEnabledAt(int index, boolean status):

desabilita ou não uma aba específica;

setTitleAt(int index, String titulo): muda o título de uma aba espcífica pelo seu indice;

setSelectedIndex(int): seleciona uma aba específica, sendo a primeira contendo índice 0;

Os demais métodos GET capturam as mesmas

informações que são setadas.

(106)

Também é uma lista drop-down, porém com a

particularidade de se selecionar mais de uma opção;

Destacamos a propriedade selectionMode, que define como será o método de seleção dos itens:

SINGLE: seleciona somente um item selecionado; funciona como um Combo Box

SINGLE_INTERVAL: captura um item do intervalo selecionado;

MULTIPLE_INTERVAL: seleciona vários itens

(107)

 Principais métodos:

setVisibleRowCount(int): define quantas linhas serão exibidas;

getSelectedValues( ): retorna um array de

objetos que contém todos os itens selecionados;

 Os demais métodos são aqueles encontrados

numa Caixa de Combinação.

(108)

Verifique que um componente JList é colocado dentro de um container, que é a Barra de Rolagem

(JScrollPane);

Este componente é responsável por definir as barras de

rolagem de um componente que pode possui-las, que é

o caso do JList e pode ser também do JTextArea.

(109)

Dicas de implementações Úteis para componentes

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma Java

Aplicações Visuais com

Swing

(110)

Limpando todos os campos jTextField de um JFrame de uma só vez:

for (int i=0; i < getContentPane().getComponentCount(); i++) {

Component c = getContentPane().getComponent(i);

if (c instanceof JTextField) {

JTextField field = (JTextField) c;

field.setText(" ");

}

}

(111)

Explicando....

getContetPane(): método do JFrame para acessar TODO o conteúdo (componentes) do container.

Deste conteúdo, o método getComponentCount() fornece a quantidade de componentes que o container possui.

Faze-se um for então em cada um desses componentes, pois eles estão dispostos em uma espécie de vetor.

for (int i=0; i < getContentPane().getComponentCount(); i++) {

}

(112)

Explicando....

Para pegar um componente, acesse-o pelo método

getComponent() passando o índice do mesmo, que é a posição que ele ocupa no “vetor” de componentes

Todo componente swing herda da classe “pai”

Component , porém, por polimorfismo, ele possui a interface de Component , porém ele é um componente específico (JButton, JTextField, etc...)

Component c = getContentPane().getComponent(i);

(113)

Explicando...

Logo precisamos ver qual componente precisamos e, se for (caso do IF abaixo, que procuramos JTextField),

fazemos o casting (ou seja, tiramos a interface

Component para a interface correta do componente) e fazemos o desejado com ele, no caso, limpar o campo de texto.

if (c instanceof JTextField) {

JTextField field = (JTextField) c;

field.setText(" ");

}

(114)

Caso os campos jTextField estejam dentro de um JPanel:

for(int i = 0; i < getContentPane().getComponentCount(); i++) { Component c = getContentPane().getComponent(i);

if ( c instanceof JPanel) {

JPanel p = (JPanel)c;

for(int j = 0; j < p.getComponentCount(); j++) {

Component c2 = p.getComponent(j);

if (c2 instanceof JTextField) {

JTextField field = (JTextField)c2;

field.setText("");

} } } }

O processo é o mesmo que o anterior, porém primeiro eu verifico se os componentes estão em um JPanel e deste eu pego seus componentes internos.

(115)

Podemos fazer um campo de texto só aceitar a digitação de números ou de letras.

Para isso usamos o evento KeyTyped do campo. Vejamos:

String caracteres = "0987654321";

if(!caracteres.contains(evt.getKeyChar()+"")) {

evt.consume();

}

(116)

 Explicando....

Neste código, na variável String estamos determinando quais caracteres devem ser aceitos.

Neste caso estamos apenas aceitando números.

E no if verificamos se o caracter que gerou o evento não está na variável caracteres, caso esteja acionamos a propriedade consume do evento.

Acrescentamos o ! que é a negação do teste, ou

seja se o caractere que gerou o evento NÃO estiver

na lista, esse caractere deve ser removido, no caso

acionando Consume.

(117)

 Explicando....

O método consume( ) pode ser interpretado como:

“consome este evento de modo que não será processado na maneira padrão pela fonte que a originou”.

Traduzindo, este evento não deve ser executado.

Logo, se desejar que somente letras ou símbolos

sejam aceitos, basta então tirar o !

(118)

Para pegar o texto do Radio selecionado:

JRadioButton radio;

String str;

Enumeration jr = buttongroup1.getElements();

while ( jr.hasMoreElements() ) {

radio = (JRadioButton) jr.nextElement();

if (radio.isSelected()) {

str = radio.getText();

}

}

(119)

Explicando...

Enumeration jr = buttongroup1.getElements();

Para pegar os radios de um Grupo de Botões, este possui um método que retorna todos os

elementos internos a ele, que é o getElements(),

que devolve uma Enumeração - jr (parecida com

uma lista) contendo todos os radios.

(120)

while ( jr.hasMoreElements() ) {

}

Explicando...

Percorre-se esta enumeração com o método

hasMoreElements() que devolve true se tem mais

itens ou false, caso contrário;

(121)

radio = (JRadioButton) jr.nextElement();

if (radio.isSelected()) {

str = radio.getText();

}

Explicando...

O método nextElement() pega um radio na

enumeração, porém, precisamos fazer o casting para JRadioButton

Verifica-se se ele está selecionado e, se o for,

pega o texto da sua opção.

(122)

Para marcar um Radio a partir de seu texto:

JRadioButton radio;

String str = “Solteiro”

Enumeration jr = buttongroup1.getElements();

while ( jr.hasMoreElements() ) {

radio = (JRadioButton) jr.nextElement();

if (radio.getText().equals(str)) radio.setSelected(true);

}

(123)

Para selecionar um item na caixa que já foi selecionado (e guardado) antes:

String nome = “Analista”;

for(int i = 0; i < comboBox.getItemCount(); i++) {

if ( comboBox.getItemAt(i).equals(nome) )

comoboBox.setSelectedIndex(i);

}

Está varrendo todo o conjunto de items do comboBox através de

seu índice e acessando cada um, pegando seu texto e verificando

se é o item desejado. Se for, ele o seleciona pelo índice.

(124)

Para não aparecer qualquer opção no comboBox:

comoboBox.setSelectedIndex(-1);

Para capturar o texto do item selecionado:

comoboBox.getSelectedItem().toString();

Referências

Documentos relacionados

Neste contexto, este artigo tem como objetivo investigar o cenário de pesquisas científicas que abordam a aplicação de mecanismos de transferência de tecnologia voltada

Entrando para a segunda me- tade do encontro com outra di- nâmica, a equipa de Eugénio Bartolomeu mostrou-se mais consistente nas saídas para o contra-ataque, fazendo alguns golos

Northern Dancer South Ocean Secretariat Crimson Saint Red God Runaway Bride Raja Baba Away Northern Dancer Special Le Fabuleux Native Partner Cannonade Cold Hearted Pretense Red

Neste trabalho são apresentadas as características granulométricas dos sedimentos siliciclásticos do sistema praia- duna frontal referente à área da folha Sombrio, sul do Estado de

- Cada empresa interessada só pode cadastrar uma única máquina para concorrer ao edital; - O total de recursos destinados para contratar o conjunto das três máquinas é

Luiz é graduado em Engenharia Elétrica com ênfase em Sistemas de Apoio à Decisão e Engenharia de Produção com ênfase em Elétrica pela PUC/RJ e possui Mestrado

Quando recebeu a missão de conduzir a Doutrina aqui na Terra, Tia Neiva se preocupou com a ação dos exus, e decidiu dar um passo perigoso, partindo em busca de cada um deles,

cordões’ espalhadas por toda a fazenda. As matas ciliares situam-se ao longo dos rios Miranda e Abobral, e também ao longo de seus corixos. Interessante salientar que essas áreas