Prévia do material em texto
1 SwingCriando Interfaces Gráficas com JavaComponentes Linguagem de Programação - JavaProfessora: Mariana O. Silva, Esp., MeContato: mariana.silva@uniandrade.edu.br 2 Posicionamento de Janelas 3 4 Componentes Básicos • JFrame - É um container (formulário) para outros componentes GUI. • JLabel - Área em que podem ser exibidos texto não-editável ou ícones. JTextField - Área em que o usuário insere dados pelo teclado. • JButton - Área que aciona um evento quando o usuário clica. 5 Componentes Básicos • JCheckBox - Possui dois estados: selecionado ou não-selecionado. • JComboBox - Lista de itens que o usuário pode fazer uma seleção clicando em um item na lista ou digitando na caixa. 6 Componentes Básicos • JList - Área em que uma lista é exibida, possibilitando a seleção clicando em qualquer item da lista. • JPanel - Container em que os componentes podem ser colocados 7 javax.swing.JFrame - Métodos • JFrame() e JFrame(String title): Construtores • void setDefaultCloseOperation(intoperation) Altera a operação padrão a ser executada quando o usuário fechar o Jframe• public void setExtendedState(intstate) Altera o estado do JFrame: maximizado, minimizado, ...) 8 javax.swing.JFrame - Métodos • void pack() Redimensiona a janela para encaixar-se ao tamanho dos seus subcomponentes • void show(): exibe o janela do Jframe• void setIconImage(Image image): altera o ícone do canto superior esquerdo 9 javax.swing.JFrame - Métodos • void setResizable(booleanresizable): define se a janela poderá ser redimensionada • void setTitle(String title): altera o título da janela 10 Crie a classe JanelaAvancada Não esqueça dos imports 11 Crie a classe JanelaAvancada 12 Mas e o que acontece quando é acionado o botão da tela? Nada!? É necessário relacionar uma ação a este botão. 13 Modelo de Tratamento de Eventos• Eventos são gerados quando o usuário interage com a interface. Os pacotes que implementam eventos são: java.awt.event e javax.swing.event• O mecanismo de tratamento de eventos é composto por: • event source: refere-se ao componente origem do evento • event object: encapsula as informações sobre o evento ocorrido • event listener: quem monitora e responde ao evento 14 Modelo de Tratamento de Eventos 15 Exemplos de eventos e seus correspondentes • Listeners Clicar em um botão, menu ou pressionar Enter --> ActionListener• Fechar um Frame --> WindowListener Pressionar o botão do mouse --> MouseListener * • Mover o mouse sobre um componente --> MouseMotionListener• Componente torna-se visível --> ComponentListener *• Componente recebe o foco --> FocusListener * • Seleção em tabela ou lista --> ListSelectionListener• Pressionar uma tecla --> KeyListener * • Alterar a posição do cursor em um texto --> CaretListener• Mudança do estado da janela --> WindowStateListener 16 Implementação - "Executor de eventos" (Event Handler) • Declaração da classe executora do evento public class MyClass implements ActionListener { ... • Código que registra uma instância do executor de eventos componente.addActionListener(instância_de_MyClass); • Código que implementa os métodos da interface public void actionPerformed(ActionEvent e) { ...//código refente a ação } //actionPerfomed 17 Tratando o botão button button.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null, "Texto Digitado: "+ textField.getText()); }}); 18 Tratando o comboBox comboBox.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Índice do ComboBox: "+comboBox.getSelectedIndex()+" "+comboBox.getSelectedItem()); }}); 19 Tratando o checkBox checkBox.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {boolean isSelecionado = checkBox.isSelected();JOptionPane.showMessageDialog(null, "Status CheckBox: "+ isSelecionado); }}); 20 javax.swing.text.JTextComponent -Métodos Superclasse direta dos componentes de edição de texto: JTextField, JTextArea e JEditorPane 21 Mais informações sobre os componentes.... 22 JTextArea package com.edu.br.uniandrade.componentes; import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; import javax.swing.*; public class JTextAreaExemplo { private JFrame mainFrame;private JLabel headerLabel;private JLabel statusLabel;private JPanel controlPanel; public JTextAreaExemplo(){prepareGUI();} public static void main(String[] args){JTextAreaExemplo swingControlDemo = new JTextAreaExemplo(); swingControlDemo.showTextAreaDemo();} private void prepareGUI(){mainFrame = new JFrame("Exemplo de JTextArea");mainFrame.setSize(400,400);mainFrame.setLayout(new GridLayout(3, 1)); mainFrame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent windowEvent){System.exit(0);} }); } headerLabel = new JLabel("", JLabel.CENTER); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); controlPanel = new JPanel();controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel);mainFrame.add(controlPanel);mainFrame.add(statusLabel);mainFrame.setVisible(true); } private void showTextAreaDemo(){headerLabel.setText("Controle em uso: JTextArea"); JLabel commentlabel= new JLabel("Texto: ", JLabel.RIGHT); final JTextArea commentTextArea = new JTextArea("Este é um exemplo de uso de JtextArea",5,20); JScrollPane scrollPane = new JScrollPane(commentTextArea); JButton showButton = new JButton("Mostrar Mensagem"); showButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) { statusLabel.setText( commentTextArea.getText()); }}); controlPanel.add(commentlabel);controlPanel.add(scrollPane); controlPanel.add(showButton);mainFrame.setVisible(true); }} 23 javax.swing.text.JTextComponent -Métodos • void copy(): copia para a área de transferência o texto selecionado • void cut(): move para a área de transferência o texto selecionado • void paste(): transfere o conteúdo da área de transferência para o componente 24 javax.swing.text.JTextComponent -Métodos • String getSelectedText(): retorna o texto selecionado • int getSelectionStart() e intgetSelectionEnd(): retorna o início e o final da seleção • String getText() e String getText(intoffs, int len): retorna o texto 25 javax.swing.text.JTextComponent -Métodos • void select(int selectionStart, intselectionEnd) e void selectAll(): seleciona o texto • void setEditable(boolean b): permite editar ou não o conteúdo do componentevoid• void setText(String t): altera o texto 26 Gerenciamento de Layout• Definição: é o processo de determinar o tamanho e o posicionamento dos componentes. • Todo container tem um gerenciador de layout - um objeto responsável pela organização dos componentes GUI em um container para fins de apresentação. • É possível trabalhar sem utilizar um gerenciador de layout, para isso é necessário setá-lo para null. 27 Tipos de Gerenciadores de Layout• FlowLayout: Organiza os componentes sequencialmente na ordem em que forem adicionados. • BorderLayout: Organiza os componentes em cinco áreas: norte, sul, leste, oeste e centro. • GridLayout: Organiza os componentes em linhas e colunas. • BoxLayout: Organiza os componentes da esquerda para a direita ou de cima para baixo. 28 Tipos de Gerenciadores de Layout• CardLayout: Organiza os componentes em forma de pilha, somente o componente no topo é visível. • GridBagLayout: Organiza os componentes sobre uma grade, permitindo especificar tamanho, ocupação, posição, ... 29 Processo básico para utilizar layouts:• Obter uma referência para o container: getContentPane() • Criar um novo gerenciador de layout Alterar o layout: setLayout() • Adicionar os componentes: add() 30 Processo básico para utilizar layouts: Exemplo: 31 32 Han dsOn ! 33 Exercício 1 Escrever uma aplicação Java usando GUI para converter graus Celsius em Fahrenheit. 34 Exercício 2 Crie um programa com uma interface gráfica em Java que permita calcular o peso de uma pessoa em vários planetas. O programa deve receber o peso do usuário na terra, o planeta desejado (de acordo com a tabela abaixo) e exibir na tela o peso do usuário no respectivo planeta. 35 Exercício 2 36 Exercício 3 Implemente a calculadora abaixo 37 Exercício 4 implementar o programa a seguir. O programa deverá ter uma classe com o nome FrmCombo e deverá apresentar todos os componentes da figura abaixo. 38 Exercício 5 Escreva um programa em Java que implemente uma interface gráfica para o jogo pedra, papel, tesoura. Neste jogo, o usuário e o computador escolhem entre pedra, papel ou tesoura. Sabendo que pedra ganha de tesoura, papel ganha de pedra e tesoura ganha de papel, exiba na tela o ganhador: usuário ou computador. Para essa implementação, assuma que o número 0 representa pedra, 1 representa papel e 2 representa tesoura. O seu programa deve permitir que o jogador possa escolher entre pedra, papel e tesoura através de um grupo de RadioButtons. Exemplo: 39 Exercício – Desafio** 40 O brigada! 41