1. Introdução

1.1 Resumo

Este trabalho foi realizado na cadeira de Linguagens de programação, do 2º ano nocturno do curso de Engenharia informática, do Instituto Superior de Engenharia do Porto, no segundo semestre ano lectivo de 2002/2003.

Pretende-se com este trabalho falar de componentes swing mais concretamente dos componentes de texto e suas características.

1.2 Motivação Para a Escolha do Trabalho

O que me levou à escolha deste trabalho foi o facto dos componentes de texto serem bastante utilizados em praticamente todas as aplicações gráficas que se pretenda desenvolver.

1.3 Metodologia Usada

Para a realização deste trabalho foi necessário a pesquisa na Internet para obtenção de textos. Foram também consultadas alguns livros.

A realização deste trabalho pode ser dividida em três partes:

- Recolha

Nesta fase foram recolhidos textos.

- Análise

Nesta fase o material recolhido foi analisado e filtrado o de maior interesse para a realização do trabalho.

- Elaboração

Depois da recolha e análise procedeu-se à realização do trabalho.

1.4 Limitações do Estudo

O factor tempo foi o principal condicionador deste trabalho.

1.5 Esquema do Relatório

O trabalho está dividido em partes distintas.

 

2. Componentes de texto

Os componentes de texto permitem aos utilizadores verem e editarem texto numa aplicação. O componente de texto mais simples é a etiqueta que apresenta informação apenas para leitura. Uma etiqueta é normalmente associada a outro componente e descreve a sua função. Um campo de texto é uma área rectangular que exibe uma única linha de texto que pode ser editável ou não editável. Um campo de password é um campo de texto editável que exibe caracteres de máscara em vez dos caracteres que o utilizador digita.

Figura 1 Componentes de Texto

Outros componentes de texto mostram múltiplas linhas de texto. Uma área de texto exibe texto numa única fonte, tamanho e estilo. Pode-se configurar um pane editor para exibir tipos diferentes de texto através do uso de um plug-in editor. Os editores das JFC (Java Foundation Classes) incluem editor de texto simples, um editor de texto de estilos, um editor RTF (rich text format) e um editor HTML (Hypertext Markup Language). Convém explicar que na hierarquia de classes enquanto um campo de texto (JTextField), uma área de texto (JTextArea) ou um editor pane (JEditorPane) herdam directamente da classe componentes de texto (JTextComponent) e o campo de password (JPasswordField) e o texto pane (JTextPane) herdam indirectamente da classe componentes de texto (JTextComponent), o mesmo não acontece com a etiqueta (JLabel) que herda directamente da classe de componentes (JComponent), no entanto neste trabalho a etiqueta é abordada e vista como um componente de texto, já que numa aplicação onde existam componentes de texto encontramos quase de certeza etiquetas, quero dizer com isto que existe uma ligação muito forte entre componentes de texto e etiquetas, essa ligação ficará demonstrada neste trabalho.

Torna-se mais fácil entender a hierarquia de classes faladas anteriormente através do seguinte esquema :

Figura 2 JTextComponent e Subclasses

 

2.1 Etiquetas

Uma etiqueta consiste num texto somente de leitura, gráficos, ou ambos.

As etiquetas tem duas funções numa aplicação:

Os utilizadores não podem seleccionar uma etiqueta ou qualquer uma das suas partes.

2.1.1 Etiquetas Que Identificam Controles

Figura 3 Etiqueta Que Descreve o Uso de Uma Barra Deslizante (Slider)

Pode-se associar uma etiqueta com um componente (como um campo de texto (textfield), barra deslizante (slider), ou caixa de verificação (checkbox)) para descrever o uso do componente. Na Figura seguinte, a etiqueta Peso do Trabalho na Nota deixa o utilizador saber que podem usar o a barra deslizante para ajustar o peso que o trabalho tem na nota.

Pode-se também usar uma etiqueta para descrever um grupo de componentes.

Figura 4 Etiqueta que descreve um grupo de botões de rádio

Na Figura 3, a etiqueta Cor descreve um grupo de três botões de rádio. O outro texto (Preto, Branco e Verde) fazem parte dos botões e não um componente separado. A etiqueta de Cor não é um componente separado com a finalidade de navegação.

O texto de uma etiqueta deve ser resumido, e a terminologia usada deve ser familiar para o utilizador.

2.1.2 Etiquetas disponíveis e Indisponíveis

Pode-se fazer uma etiqueta disponível ou indisponível de forma que o seu estado seja igual ao componente que descreve. Etiquetas disponíveis são desenhadas numa determinada cor (uma cor forte como por exemplo preto). Etiquetas indisponíveis são desenhadas noutra cor (uma cor fraca por exemplo cinzento). A figura seguinte mostra uma etiqueta disponível e indisponível.

Figura 5 Etiquetas Disponíveis e Indisponíveis

Coloque uma etiqueta indisponível quando o componente que descreve está indisponível.

2.1.3 Mnemónica em Etiquetas

Pode-se especificar uma Mnemónica para uma etiqueta. Quando a mnemónica é activada, dá o focus ao componente que a etiqueta descreve. Esta técnica é frequentemente usada com uma etiqueta que acompanha um campo de texto editável. Na figura seguinte, o campo de texto adquire o focus quando o utilizador pressiona ALT-N.

Figura 6 Etiqueta Com uma Mnemónica

Se não se pode associar uma mnemónica directamente ao componente que necessita de uma, como no caso de um campo de texto editável, coloca-se a mnemónica na etiqueta do componente.

A propriedade displayedMnemonic pode ser usada para especificar a mnemónica numa etiqueta.

A propriedade labelFor pode ser usada para associar uma etiqueta a outro componente de forma que o componente ganhe o focus quando a mnemónica da etiqueta é activada. A propriedadelabelFor é facilmente definida usando o método JLabel.setLabelFor ().

2.1.4 Etiquetas Que Comunicam Estados e Outras Informações

Pode-se usar uma etiqueta para comunicar o estado ou dar informações aos utilizadores. A barra de progresso na Figura seguinte usa duas etiquetas que mudam como o progresso da operação. A aplicação muda a etiqueta superior para reflectir o ficheiro que está a actualmente a ser copiado, e actualiza a etiqueta inferior à medida que a barra de progresso se preenche.

Figura 7 Etiquetas Que Clarificam o Significado de uma Barra de Progresso

Para assegurar que a informação numa etiqueta de estado é acessível a todos os utilizadores, a propriedade accessibleDescription da janela que contém a etiqueta deveria ser definida com o texto da etiqueta. Sempre que a etiqueta muda, um evento VISIBLE_PROPERTY_CHANGE é gerado sugerir à tecnologia assistida para ler a etiqueta novamente.

2.1.5 Exemplo de Implementação

public class LabelPanel extends JPanel {
  public LabelPanel() {
    // Cria e acrescenta uma etiqueta ao painel (JPanel)
    JLabel EtiquetaSimples = new JLabel("Etiqueta pequena e simples");
    add(EtiquetaSimples); 
    // Cria uma segunda etiqueta
    JLabel EtiquetaCaprichada = new JLabel("Etiqueta grande e         caprichada"); 
    // Instanciação de um objecto Font para usar com a etiqueta
    Font EtiquetaFont = 
      new Font("Serif", Font.BOLD | Font.ITALIC, 32);
    // Associação da font com a etiqueta
    EtiquetaCaprichada.setFont(EtiquetaFont);
    // Criação de um Icon
    Icon tigerIcon = new ImageIcon("pikaju.gif"); 
    // Colocação do Icon na etiqueta
    EtiquetaCaprichada.setIcon(tigerIcon);
    // Alinhamento do texto à direita do Icon
    EtiquetaCaprichada.setHorizontalAlignment(JLabel.RIGHT); 
    // Acrescenta a etiqueta ao painel (panel / JPanel)
    add(EtiquetaCaprichada);
  }
}

Figura 8 Exemplo de Implementação de Etiquetas

 

2.2 Campos de Texto

Um campo de texto é uma área rectangular que exibe uma única linha de texto. Um campo de texto pode ser editável ou não.

2.1.1 Campos de Texto Não Editáveis

Num campo de texto não editável, os utilizadores podem seleccionar e copiar o texto para colar noutro lugar (algo que não pode ser feito com etiquetas), mas não podem mudar o texto. Apenas a aplicação pode mudar os conteúdos de um campo de texto não editável. No tema por defeito, a cor de fundo é o cinzento, como mostrado na figura seguinte.

Figura 9 Campo de Texto Não Editável

 

2.2.2 Campos de Texto Editáveis

Num campo de texto de editável, os utilizadores podem escrever ou editar uma única linha de texto. Por exemplo, uma caixa de diálogo de pesquisa tem um campo de texto no qual os utilizadores escrevem a cadeia de texto que querem procurar. Quando um campo de texto recebe o focus do teclado, exibe uma barra a piscar que indica o local de inserção. Quando os utilizadores digitam um texto que é muito longo para caber no campo, o texto desliza horizontalmente. Por defeito, o fundo de um campo de texto editável é branco. A figura seguinte mostra um campo de texto editável com o focus do teclado. A etiqueta Cadeira é um componente separado do campo de texto.

Figura 10 Campo de Texto Editável Com a Barra a piscar

Num campo de texto de editável, os utilizadores podem:

Figura 11 Campo de Texto Editável Com Texto Seleccionado

Quando um focus do teclado entra num campo de texto que não seja através do clique do rato, o conteúdo do campo de texto é seleccionado. (Esta situação pode acontecer se o utilizador navega no campo de texto com mnemónicas ou com a tecla TAB. Os utilizadores podem começar por escrever caracteres para substituir o texto existente, ou podem pressionar a tecla TAB para passar ao próximo campo e deixar o texto original intacto. Quando o texto é seleccionado, pressionando as teclas seta (teclas do cursor) para a esquerda ou direita des-seleccionam o texto e movem o ponto de inserção (se possível), permitindo ao utilizador corrigir o texto usando apenas o teclado. Claro que, se os utilizadores clicarem num campo de texto, colocam o ponto de inserção o mais perto possível do local onde clicaram, sem seleccionar texto.

Para associar uma mnemónica a um campo de texto, é preciso atribuir ao campo de texto uma label (etiqueta). Pode-se então depois atribuir uma mnemónica à etiqueta, e fazer com que a mnemónica dê o focus ao campo de texto. Para detalhes, veja Mnemónicas em Etiquetas. Para operações de teclado destinadas a campos de texto, veja a tabela 1.

Dependendo do tipo de dados, é possível verificar os caracteres individualmente para detectar erro á medida que são escritos por exemplo, se os utilizadores tentam escrever uma letra em um campo de texto que deveria conter apenas números. Neste caso, não mostra o carácter no campo. Em vez disso, imite um som, um beep do sistema. Se o utilizador escreve três caracteres ilegais seguidos, exibe uma caixa Erro de alerta que explica as entradas permitidas para o campo de texto.

Se for preciso executar uma acção baseado na string do campo de texto (como procurar uma string ou executar um cálculo), comece a acção quando o utilizador assinalam que completaram a entrada pressionando Entre ou movendo o focus do teclado para fora do campo de texto. Não comece a acção antes do utilizador completar a entrada de texto.

Para operações com o teclado para campos de texto editáveis, veja a Tabela 1.

 

2.2.3 Exemplo de Implementação

public class ExemploCaixaTexto extends JPanel {

public ExemploCaixaTexto() {

// Instancia uma caixa de texto

JTextField tf2 = new JTextField("Campo Texto");

add(tf2);

}

}

 

Figura 12 Exemplo de Implementação de Campo de Texto

2.3 Campos de Password

Os campos de password (palavra chave) são campos de texto editáveis que exibem um carácter como máscara em vez dos carácter que o utilizador digita. Os asteriscos são os caracteres exibidos por defeito num campo de password. É possível designar qualquer carácter de Unicode como caracter de máscara (também chamado "seguro "), mas é preciso ter a certeza o carácter está disponível na fonte actual. O campo de password é normalmente usado numa caixa de diálogo de login, como mostrado na Figura seguinte. A etiqueta de password é um componente separado do campo password.

Figura 13 Campo de Password

 

Um campo de password fornece ao utilizador algumas das capacidades de edição de um campo de texto editável, mas não as operações de copiar e colar. Para as operações com teclado apropriadas aos campos de password, veja tabela 1.

O método de setEchoChar pode ser usado para mudar o carácter mascarando--por exemplo, de asteriscos para cardinais.

 

2.3.1 Exemplo de Implementação

class ExemploCaixaPassword extends JPanel {
 ExemploCaixaPassword() {
    JPasswordField pass1 = new JPasswordField(20);
    JPasswordField pass2 = new JPasswordField(20);
    pass2.setEchoChar ('#');
    add(pass1);
    add(pass2);
  }
}

Figura 14 Exemplo de Implementação de Campo de Password

2.4 Áreas de texto

Uma área de texto fornece um espaço rectangular no qual o utilizador pode ver, digitar, e editar múltiplas linhas de texto. As JFC mostram texto numa única fonte, tamanho, e estilo como mostrado na figura seguinte.

Figura 15 Área de Texto

 

O utilizador pode digitar e substituir texto numa área de texto. Veja o tópico Campos de Texto para uma descrição das características de edição de texto fornecidas pelas JFC. Para operações de teclado destinadas a áreas de texto, veja tabela 2. É possível envolver o texto de forma a que o texto envolvido passe para a próxima linha quando é atingido a extremidade da área de texto, como mostrado na figura procedida. É possível permitir o scrolling (deslocamento) colocando a área de texto dentro de um scroll pane. Neste caso, o texto desloca-se horizontalmente ou verticalmente quando é muito longo para caber na área de texto.

A figura seguinte mostra uma área de texto dentro de um scroll pane.

Figura 16 Área de Texto Num Scroll Pane

Caso se coloque uma área de texto num scroll pane, convém assegurar-se sempre que a barra de deslocamento vertical está lá e utilizar uma barra de deslocamento horizontal apenas se necessário. Este não é o comportamento por defeito dos scroll panes.

Se a área de texto contém prosa, convém permitir o envolvimento das palavras (word weap). Se a área de texto contém informação para a qual as mudanças de linha num local exacto é importante, como código ou poesia, deve-se usar a barra de deslocamento horizontal.

As propriedades lineWrap e wrapStyleWord das área de texto podem ser definidas para true permitindo assim que a mudança de linha sempre que o texto atinge a extremidade da área de texto.

 

2.4.1 Exemplo de Implementação

public class ExemploAreaTexto extends JPanel {

public ExemploAreaTexto() {

// Instancia uma área de texto

JTextArea ta = new JTextArea();

// Inicializa o texto da área de texto

ta.setText("JTextArea\n permite várias linhas");

add(ta);

}

}

Figura 17 Exemplo de Implementação de Área de Text

o

2.5 Editor Panes

Um editor pane é como uma área de texto múltiplo que usa um conjunto de edição para exibir um tipo específico de texto, como RTF (rich text format) ou HTML (Hypertext Markup Language). Um conjunto de edição é capaz de exibir todas as fontes incluídos com o AWT. As JFC fornecem quatro conjuntos que se pode colocar dentro de um pane editor:

É possível também criar o nosso próprio Kit ou usar Kits de terceiros.

O método setEditable pode ser usado para permitir ou não a edição do texto num conjunto de edição.

2.5.1 Default editor kit

Pode-se usar o Default editor kit para editar e exibir texto numa única fonte, tamanho e estilo. Este KIT é funcionalmente equivalente a uma área de texto.

2.5.2 Styled text editor kit

Pode-se embutir imagens e componentes (como tabelas) .

Pode também editar e exibir várias fontes, tamanhos, e estilos, como mostrado em Figura seguinte.

Figura 18 Styled Text Editor Kit

 

2.5.3 RTF editor kit

Pode-se usar um RTF editor kit para ler, escrever, e exibir textos RTF, como mostrado na figura seguinte. Este editor oferece todas as capacidades do Styled text editor kit e mais.

Figura 19 RTF Editor Kit

 

2.5.4 HTML Editor Kit

Pode-se usar um HTML Editor Kit para exibir texto em HTML 3.2. Os utilizadores podem clicar num link na página HTML e gerar um evento que pode ser usado para substituir os conteúdos no pane.

Figura 20 HTML Editor Kit

 

3. Conclusões

Na fase de recolha de dados para fazer o trabalho cheguei à conclusão que
os componentes de texto (JTextComponent) e as suas subcasses têm demasiadas características para serem descritas na totalidade num trabalho deste tipo.
Devido às muitas características dos componentes de texto e suas subclasses e devido também ao factor tempo, tentei falar, implementar e mostrar exemplos dos componentes de texto que normalmente se usam mais quando se desenvolve uma aplicação gráfica.

Um exemplo de um componente de texto que existe e não foi abordado aqui por ser recente e não trazer nenhuma novidade, apesar da sua utilidade é o campo de texto formatado (JFormattedTextField).

O JFormattedTextField foi introduzido na versão 1.4 do java e permite ao programador indicar o conjunto permitido de caracteres que podem ser inseridos num campo de texto.

Antes da versão 1.4 do java a formatação de campos de texto exigia mais trabalho.

Figura 21 JTextComponent e Subclasses (mais completo)

 

Uma representação mais completa do que aquela apresentada na parte inicial deste trabalho sobre a hierarquia de classes que herdam directamente ou indirectamente da classe JTextComponent é o seguinte :Por fim concluo que o objectivo a que me propus que foi o de abordar os componentes de texto mais usados e principais características, foram atingidos.Concluo também que este trabalho me fará sentir mais à vontade quando na aplicação gráfica que é necessário desenvolver nesta mesma cadeira, tiver a necessidade de implementar um componente de texto.

4. Anexos

4.1 Campos de Texto

A tabela seguinte lista as operações com teclado para campos de texto.

Operações Com Teclado

Acção

Seta direita

Move o ponto de inserção um caracter para a direita

Seta esquerda

Move o ponto de inserção um caracter para a esquerda

Ctrl-seta direita

Move o ponto de inserção para o inicio da palavra seguinte

Ctrl-seta esquerda

Move o ponto de inserção para o inicio da palavra actual, ou, se o ponto de inserção já está no inicio da palavra actual, move-o para o inicio da palavra anterior

Home

Move o ponto de inserção para o inicio do campo de texto

End

Move o ponto de inserção para o fim do campo de texto

Shift-Home

Estende a selecção até ao inicio da linha

Shift-End

Estende a selecção até ao fim da linha

Shift-seta esquerda

Estende a selecção um caracter para a esquerda

Shift-tecla direita

Estende a selecção um caracter para a direita

Ctrl-Shift—seta esquerda

Estende a selecção até à palavra anterior

Ctrl-Shift—seta direita

Estende a selecção até à próxima palavra

Ctrl-A

Selecciona todos os caracteres do campo de texto

Tabela 1 Operações Com o Teclado Para Campos de Texto

4.2 Áreas de Texto, Padrões e Conjuntos de Edição de Estilos de Texto

 

A tabela seguinte lista as operações de teclado para áreas de texto, padrões e conjuntos de edição de estilos de texto.

Operações Com Teclado

Acção

Seta cima

Move o ponto de inserção uma linha acima

Seta baixo

Move o ponto de inserção uma linha abaixo

Seta esquerda

Move o ponto de inserção para o componente ou caracter à esquerda

Seta direita

Move o ponto de inserção para o componente ou caracter à direita

Page Up

Move-se um ecrã de informação para cima

Page Down

Move-se um ecrã de informação para baixo

Ctrl-PgUp

Move-se um ecrã de informação para a esquerda

Ctrl-PgDn

Move-se um ecrã de informação para a direita

Home

Move-se para o inicio da linha

End

Move-se para o fim da coluna ou linha

Ctrl-Home

Move-se para o inicio dos dados

Ctrl-End

Move-se para o fim dos dados

Ctrl-seta esquerda

Move-se para o inicio da palavra anterior

Ctrl-seta direita

Move-se para o inicio da palavra seguinte

Ctrl-A, Ctrl-/

Selecciona tudo

Ctrl-\

Des-selecciona tudo

Shift-seta cima

Estende a selecção uma linha acima

Shift-seta baixo

Estende a selecção uma linha abaixo

Shift-seta esquerda

Estende a selecção um caracter à esquerda

Shift-seta direita

Estende a selecção um caracter à direita

Shift-PgUp

Estende a selecção para cima um pane de informação

Shift-PgDn

Estende a selecção para baixo um pane de informação

Ctrl-Shift-PgUp

Estende a selecção para a esquerda um pane de informação

Ctrl-Shift-PgDn

Estende a selecção para a direita um pane de informação

Shift-Home

Estende a selecção até ao inicio da linha

Shift-End

Estende a selecção até ao final da linha

Ctrl-Shift-Home

Estende a selecção até ao inicio de dados

Ctrl-Shift-End

Estende a selecção até ao fim dos dados

Ctrl-Shift-seta direita

Estende a selecção até á próxima palavra

Ctrl-Shift-seta esquerda

Estende a selecção até á palavra anterior

Tabela 2 operações de teclado para áreas de texto, padrões e conjuntos de edição de estilos de texto.

 

5. Referências

Livros

Aprenda Java Já, de Stepen R. Davis, McGraw-Hill

 

Sites

Creating a GUI with JFC/Swing http://java.sun.com/docs/books/tutorial/uiswing/index.html

Fundamentals of JFC/Swing: Part I, By MageLang Institute

http://www.magelang.com/

Java Look and Feel Design Guidelines, second edition

http://java.sun.com/products/jlf2/guidelines.html

JavaTM 2 Platform, Standard Edition, v 1.4.1 API Specification

http://java.sun.com/j2se/1.4.1/docs/api/ index.htm

 

1. Introdução *

1.1 Resumo *

1.2 Motivação Para a Escolha do Trabalho *

1.3 Metodologia Usada *

1.4 Limitações do Estudo *

1.5 Esquema do Relatório *

2. Componentes de texto *

2.1 Etiquetas *

2.1.1 Etiquetas Que Identificam Controles *

2.1.2 Etiquetas disponíveis e Indisponíveis *

2.1.3 Mnemónica em Etiquetas *

2.1.4 Etiquetas Que Comunicam Estados e Outras Informações *

2.1.5 Exemplo de Implementação *

2.2 Campos de Texto *

2.1.1 Campos de Texto Não Editáveis *

2.2.2 Campos de Texto Editáveis *

2.2.3 Exemplo de Implementação *

2.3 Campos de Password *

2.3.1 Exemplo de Implementação *

2.4 Áreas de texto *

2.4.1 Exemplo de Implementação *

2.5 Editor Panes *

2.5.1 Default editor kit *

2.5.2 Styled text editor kit *

2.5.3 RTF editor kit *

2.5.4 HTML Editor Kit *

3. Conclusões *

4. Anexos *

4.1 Campos de Texto *

4.2 Áreas de Texto, Padrões e Conjuntos de Edição de Estilos de Texto *

5. Referências *

 

Figura 1 Componentes de Texto *

Figura 2 JTextComponent e Subclasses *

Figura 3 Etiqueta Que Descreve o Uso de Uma Barra Deslizante (Slider) *

Figura 4 Etiqueta que descreve um grupo de botões de rádio *

Figura 5 Etiquetas Disponíveis e Indisponíveis *

Figura 6 Etiqueta Com uma Mnemónica *

Figura 7 Etiquetas Que Clarificam o Significado de uma Barra de Progresso *

Figura 8 Exemplo de Implementação de Etiquetas *

Figura 9 Campo de Texto Não Editável *

Figura 10 Campo de Texto Editável Com a Barra a piscar *

Figura 11 Campo de Texto Editável Com Texto Seleccionado *

Figura 12 Exemplo de Implementação de Campo de Texto *

Figura 13 Campo de Password *

Figura 14 Exemplo de Implementação de Campo de Password *

Figura 15 Área de Texto *

Figura 16 Área de Texto Num Scroll Pane *

Figura 17 Exemplo de Implementação de Área de Texto *

Figura 18 Styled Text Editor Kit *

Figura 19 RTF Editor Kit *

Figura 20 HTML Editor Kit *

Figura 21 JTextComponent e Subclasses (mais completo) *