Swing Módulo II Tiago Alves de Oliveira Tiago Alves de Oliveira 1
Componentes GUI Componentes Swing GUI: 1.Declarado no pacote javax.swing. 2.A maioria dos componentes Swing são componentes Java puros, ou seja, escritos, manipulados e exibidos em Java. 3.Fazem parte das Java Foundation Classes (JFC) bibliotecas do Java para desenvolvimento de GUI para múltiplas plataformas. Tiago Alves de Oliveira 2
Componentes GUI Swing versus AWT Abstract Window Toolkit (AWT): Precursor do Swing. Declarado no pacote java.awt. Não fornece aparência e comportamento consistentes para diversas plataformas. Tiago Alves de Oliveira 3
Componentes GUI Os componentes Swing são implementados no Java. Sendo assim, eles são mais portáveis e flexíveis do que os componentes Java GUI originais de pacotes java.awt, que foram baseados nos componentes GUI da plataforma subjacente. Por essa razão, os componentes Swing GUI geralmente são preferidos. Tiago Alves de Oliveira 4
Componentes GUI Ao se utilizar os componentes GUI, é importante ter uma compreensão sobre a hierarquia de herança do javax.swing e do java.awt, pacotes onde estão as classes que serão utilizadas para o desenvolvimento de aplicações gráficas. Estude os atributos e comportamentos das classes na hierarquia de classe da figura do próximo slide. Essas classes declaram os recursos que são comuns à maioria dos Tiago Alves de Oliveira 5 componentes Swing.
Hierarquia de Classe Tiago Alves de Oliveira 6
Hierarquia de Componente JButton JCheckBoxMenuItem AbstractButton JMenuItem JMenu JComboBox JRadioButtonMenuItem JComponent JLabel JList JToggleButton JCheckBox JRadioButton JMenuBar JPanel JPopupMenu JScrollBar JScrollPane JEditorPane JTextPane JTextComponent JTextArea JTextField JPasswordField Tiago Alves de Oliveira 7
Componentes GUI Componente Descrição JLabel JTextField JButton JCheckBox JComboBox JList JPanel Exibe texto não-editável ou ícones. Permite ao usuário inserir dados do teclado. Tambémpode ser utilizado para exibir texto editável ou não editável. Desencadeia umevento quando o usuário clicar nele como mouse. Especifica uma opção que pode ser ou não selecionada. Fornece uma lista drop-down de itens a partir da qual o usuário pode fazer uma seleção clicando emumitemou possivelmente digitando na caixa. Fornece uma lista de itens a partir da qual o usuário pode fazer uma seleção clicando emqualquer itemna lista. Múltiplos elementos podemser selecionados. Fornece uma área emque os componentes podemser colocados e organizados. Tambémpode ser utilizado como uma área de desenho para imagens gráficas. Tiago Alves de Oliveira 8
Rótulos - JLabel Rótulos são componentes que contém texto. Eles não têm decorações (por exemplo, não tem limites). Também não reagem a entradas do usuário. É possível usar um rótulo para identificar componentes. Diferente de botões, os campos de texto não têm um rótulo para identificá-los. Para rotular um componente que não acompanha um identificador: Primeiro: construa o JLabel com o texto correto; Segundo: coloque-o bem perto do componente para o usuário ver que o rótulo identifica aquele componente. Tiago Alves de Oliveira 9
Rótulos - JLabel O construtor para um JLabel permite especificar o texto ou o ícone inicial e, se desejar, o alinhamento do conteúdo: JLabel rotulo = new JLabel( Texto, JLabel.RIGHT); Algumas das constantes para o alinhamento do texto podem ser: JLabel.RIGHT alinhamento à direita; JLabel.LEFT alinhamento à esquerda; JLabel.CENTER alinhamento centralizado Tiago Alves de Oliveira 10
Exemplo Tiago Alves de Oliveira 11
Exemplo Tiago Alves de Oliveira 12
Rótulo - Curiosidade Podemos utilizar textos simples e HTML em botões, rótulos e itens de menu. Não é recomendável usar HTML em botões, pois interfere na aparência. HTML em rótulos pode ser muito eficaz, basta cercar a sequência do rótulo com <html>...</html/>, exemplo: rotulo = new JLabel( <html><b>texto</b></html/> ); Obs: o primeiro componente com um rótulo HTML demora um pouco para ser exibido, porque o código HTML será carregado. Tiago Alves de Oliveira 13
JTextComponent A classe JTextComponent é uma abstração de um componente que recebe inserções de textos do usuário. Ela é a super-classe abstrata de duas classes com funcionalidades em comum: JTextField, JPasswordField e JTextArea tem seus métodos e atributos são compartilhados pela classe JTextComponent. Tiago Alves de Oliveira 14
JTextComponent public String gettext(): Retorna um objeto da classe String contendo o texto correspondente ao que o usuário digitou no objeto JTextComponent. public void settext(string texto): Define o texto do objeto JTextComponent conforme o valor do objeto String texto passado como parâmetro. public void seteditable(boolean estado): Define o objeto JTextComponent como editável ou não. Tiago Alves de Oliveira 15
JtextComponent Os métodos listados acima, podem ser utilizados nos 3 componentes que herdam de JTextComponent (JTextFields, JPasswordFields e JTextArea). A seguir será apresentado cada um dos componentes de JTextComponent. Tiago Alves de Oliveira 16
JTextField Um objeto da classe JTextField é um campo texto na forma de uma linha na qual textos podem ser digitados pelo usuário através do teclado. A classe JTextField é uma sub-classe de JTextComponent, portanto pode-se aplicar nesta todos os métodos vistos anteriormente na classe JTextComponent. Tiago Alves de Oliveira 17
JTextField public JTextField(): constrói um objeto do tipo campo de texto. public JTextField(int colunas): constrói um objeto campo de texto vazio com o número especificado de colunas. public JTextField(String texto): constrói um objeto campo de texto com o texto fornecido no parâmetro texto. public JTextField(String s, int colunas): constrói um objeto campo de texto com o texto fornecido no parâmetro texto com o número especificado de Tiago Alves de Oliveira 18 colunas.
Exemplo Tiago Alves de Oliveira 19
Exemplo Tiago Alves de Oliveira 20
JPasswordField JPasswordField s também é uma área de uma única linha em que o texto pode ser inserido pelo usuário pelo teclado ou o texto pode ser simplesmente exibido. A diferença deste componente para o JTextField é que o JPasswordField mostra que um caractere foi digitado quando o usuário insere os caracteres, mas oculta os caracteres assumindo que eles representam uma senha que deve permanecer conhecida apenas para o usuário. Tiago Alves de Oliveira 21
JPasswordField A classe JPasswordField estende a classe JTextComponent e adiciona vários métodos que são específicos para o processamento de senhas. Adiciona o caractere de eco para ocultar a entrada de texto no componente. Tiago Alves de Oliveira 22
Exemplo Tiago Alves de Oliveira 23
Exemplo Tiago Alves de Oliveira 24
JTextArea Um objeto da classe JTextArea é um campo texto na forma de várias linhas nas quais textos podem ser digitados pelo usuário através do teclado. A classe JTextArea é também uma sub-classe de JTextComponent, portanto pode-se aplicar nesta todos os métodos vistos anteriormente na classe JTextComponent. Utilizado comumente com um JScrollPane (barra de rolagem) e possui dois métodos para tratamento de quebra de linha. Tiago Alves de Oliveira 25
JTextArea: Construtores public JTextArea(): constrói um objeto do tipo campo de texto com possibilidade para várias linhas. public JTextArea(int linhas, int colunas): constrói um objeto JTextArea vazio com o número especificado de colunas e linhas. public JTextArea(String texto): constrói um objeto JTextArea com o texto fornecido no parâmetro texto. public JTextArea(String texto, int linhas, int col): constrói um objeto JTextArea com o texto especificado e número especificado de colunas e Tiago Alves de Oliveira 26 linhas.
JTextArea: Métodos public void setcolumns(int c): define o número de colunas visíveis para o objeto JTextArea. public int getcolumns(): devolve o número de colunas visíveis já definidas para o objeto JTextArea. public void setrows(int r): define o número de linhas visíveis para o objeto JTextArea. public int getrows(): devolve o número de linhas visíveis já definidas para o objeto JTextArea. Tiago Alves de Oliveira 27
JTextArea: Métodos append(string str): adiciona o texto no final do JTextArea. insert(string str, int pos): insere o texto na posição especificada. setlinewrap(boolean): quando recebe true, realiza a quebra de linha automática quando chegar ao final do tamanho horizontal do JTextArea, caso contrário, a linha só se encerrará no \n ou pela tecla enter. setwrapstykeword(boolean): ao realizar a quebra de linha automática, se a opção for true, a palavra será inteira será passada para a próxima linha, caso contrário, a palavra ficará separada sem nenhum critério gramatical. Tiago Alves de Oliveira 28
JscrollPane Barra de Rolagem As mais sofisticadas interfaces de usuários utilizam áreas com barras de rolagem. O Swing inclui um conjunto de componentes em uma classe JScrollPane que atende estas demandas. Caso as características fornecidas pela classe JScrollPane não sejam suficientes, será possível criar novos componentes através da interação direta com os componentes da classe JScrollBar. Tiago Alves de Oliveira 29
JScrollPane: Construtores JScrollPane(): cria um JScrollPane vazio (nenhuma viewport) onde as áreas de scrollbar horizontal e vertical aparecem quando necessário. JScrollPane (Component view): cria um JScrollPane que exibe o conteúdo de um componente específico, onde os scrollbars horizontal e vertical aparecem quando o conteúdo do componente é maior do que o campo de visão. Tiago Alves de Oliveira 30
JScrollPane: Construtores JScrollPane (Component view, int vsbpolicy, int hsbpolicy): cria um JScrollPane que exibe um campo de visão em uma viewport cuja posição do campo de visão pode ser controlada de acordo com as constantes da scrollbar. JScrollPane (int vsbpolicy, int hsbpolicy): cria um JScrollPane vazio (sem viewport) de acordo com constantes scrollbar especificadas. Tiago Alves de Oliveira 31
JScrollPane: Métodos sethorizontalscrollbarpolicy (int policy): determina quando a scrollbar horizontal aparecerá na scrollpane. setverticalscrollbarpolicy (int policy): determina quando a scrollbar veritcal aparecerá na scrollpane. setviewportview(component view): Creates a viewport if necessary and then sets its view. Tiago Alves de Oliveira 32
Algumas Constantes VERTICAL_SCROLLBAR_AS_NEEDED VERTICAL_SCROLLBAR_NEVER VERTICAL_SCROLLBAR_ALWAYS HORIZONTAL_SCROLLBAR_AS_NEEDED HORIZONTAL_SCROLLBAR_NEVER HORIZONTAL_SCROLLBAR_ALWAYS Tiago Alves de Oliveira 33
Exemplo Tiago Alves de Oliveira 34
Exemplo Tiago Alves de Oliveira 35
JFormattedTextField Um objeto da classe JFormattedTextField permite construir campos de texto préformatados, ou seja, podemos criar máscaras para as entradas de texto, e este componente herda de JTextField. Por meio da classe MaskFormatter criamos nossas máscaras, é útil para padrões de entrada de texto de tamanho fixo que contém alguns caracteres constantes e alguns variáveis... Tiago Alves de Oliveira 36
JFormattedTextField Por exemplo: o número de um CPF 000.012.487-21 Pode ser formatado como: new MaskFormatter( ###.###.###-## ); O Caractere # denota um único dígito, sendo este apenas para entradas numéricas, na tabela a seguir mostra os símbolos possíveis de se utilizar na construção de máscaras. Tiago Alves de Oliveira 37
JFormattedTextField Caractere Descrição # Qualquer número válido Caractere de escape, usado para o escape de qualquer caractere de formato especial U Qualquer caractere, todas as letras minúsculas são transformadas em maiúsculas L Qualquer caractere, todas as letras são transformadas em minúsculas A Qualquer caractere ou número? Qualquer caractere * Qualquer coisa H Qualquer caractere hexadecimal Tiago Alves de Oliveira 38
JFormattedTextField Para se criar uma máscara você deve observar: // Exemplo para CEP: 35.570-000 try{ MaskFormatter formato = new MaskFormatter( ##.###-## ); formato.setplaceholdercharacter( _ ); JFormattedTextField mascara = new JFormattedTextField(mascara); } catch(java.text.parseexception exc){} O método setplaceholdercharacter(), serve para preencher a máscara com o caractere setado quando a máscara está vazia. Tiago Alves de Oliveira 39
Exemplo Tiago Alves de Oliveira 40
Exemplo Tiago Alves de Oliveira 41