PROGRAMAÇÃO ORIENTADA A OBJETOS II - IDE NETBEANS Prof. Angelo Augusto Frozza, M.Sc. [email protected] ROTEIRO 2. Programação visual com a IDE Netbeans y Projetos y Tipos de projetos y Desenvolvimento de aplicações rápidas (RAD) y Desenvolvimento visual APLICAÇÕES GRÁFICAS - GUI | Primeiro faça uma análise das seguintes interfaces: y y y ConsoleTeste.java Calculadora.java FrameCalculadora.java Em se tratando de usabilidade, qual das interfaces é a mais atraente e amigável? APLICAÇÕES GRÁFICAS COM A SWING | GUI – Graphical User Interface y | Oferece uma interface mais simples e intuitiva para o usuários. Cada Sistema Operacional pode oferecer GUIs com aparências distintas: y y y y COM da Microsoft; Presentation da IBM; NeWS da Sun; X-Window System da MIT APLICAÇÕES GRÁFICAS COM A SWING | Java no desenvolvimento de aplicações gráficas: y Oferece capacidades únicas que, sem modificações ou recompilação, podem ser executadas em diferentes ambientes gráficos. COMPONENTES E A SWING | Componente GUI: y É um objeto visual com o qual o usuário pode interagir através do teclado ou mouse; y São também chamados de widgets – Window gadgets – dispositivos de janela: Botões | Caixa de entrada de texto | Caixas de lista | Caixas de seleção | Barras de rolagem | etc. | COMPONENTES E A SWING | | | Java oferece uma ampla biblioteca de componentes GUI; Os componentes estão disponíveis na forma de classes pertencentes ao pacote javax.swing; A Swing oferece classes para: y Renderização e obtenção de informações do sistema gráfico. CONSTRUÇÃO | DE UMA APLICAÇÃO GRÁFICA Passos da implementação: y 1º Æ Instanciação do componente selecionado; y 2º Æ Adição do componente na interface; y 3º Æ Registro dos métodos processadores de eventos. CONSTRUÇÃO | DE UMA APLICAÇÃO GRÁFICA 1º Æ Instanciação do componente y Cada componente a ser adicionado na interface deve ser instanciado individualmente. y Exemplo: private Button bt1; private Button bt2; ... bt1 = new Button(“Ok”); bt2 = new Button(“Cancelar”); CONSTRUÇÃO | DE UMA APLICAÇÃO GRÁFICA 2º Æ Adição do componente na interface y Cada um dos componentes deve ser adicionado em um container; É necessário especificar o posicionamento do componente através de um gerenciador de layout; y Exemplo: y add(bt1); //uso do layout default add(bt2, BorderLayout.SOUTH) // uso do Border Layout CONSTRUÇÃO | DE UMA APLICAÇÃO GRÁFICA 3º Æ Registro dos métodos processadores de eventos: y Narrações das interações do usuário com a aplicação através do teclado ou mouse; y Devem ser adicionados métodos especiais (event listeners) na aplicação para processar a interação do usuário; y Os métodos devem ser associados aos componentes que reagem à interação com o usuário. CONSTRUÇÃO | DE UMA APLICAÇÃO GRÁFICA 3º Æ Registro dos métodos processadores de eventos (continuação): y Exemplo: bt1.addActionListener(this); bt2.addActionListener(new ButtonHandler()); CONSTRUÇÃO DE UMA APLICAÇÃO GRÁFICA COMPONENTES BÁSICOS •Frame (janela completa) •Contêineres 9 Jpanel (Painel) 9... •Controles 9JButton (botão) 9JCheckbox (caixa de opção) 9JScrollBar (barra de rolagem) 9JTextField (caixa de entrada de texto) 9... •Janelas 9JDialog (janela de diálogo) 9JScrollPane (lista) 9... •Menus 9JMenuBar (barra de menus) ELEMENTOS DA INTERFACE JFRAME Pacote: javax.swing | Classe: JFrame | | É o principal/primeiro componente; | Utilizado para definir o espaço principal no qual estará a interface com o usuário; | Principais propriedades: y title CONTAINERS Pacote: javax.swing | Classe: JPanel | Todo componente de uma interface deve ser colocado dentro de um container; | Existems vários tipos de containers disponíveis; | | Principais propriedades: y background border y name (nome da variável) y JLABEL Pacote: javax.swing | Classe: JLabel | Veja o Exemplo: FrameLabel.java | Também chamado de rótulo de texto. | Utilizado para mostrar mensagens dentro de quaisquer componentes do tipo container; | Este tipo de componente não permite a edição de valores... É simplesmente utilizado para orientar o usuário do sistema e para mostrar resultados – é um elemento passivo. JLABEL Pacote: javax.swing | Classe: JLabel | | Principais propriedades: y name (nome da variável) y text border y JLABEL | | Existem métodos adequados para capturar e modificar o conteúdo de um Label: y getText() – captura o conteúdo do rótulo y setText(String) – atribui um novo valor ao rótulo Outros métodos são oferecidos para manipular um Label. Veja a API do Java: -Pacote: javax.swing -Classe: JLabel -Métodos JTEXTFIELD Pacote: javax.swing | Classe: JTextField | | Caixa de entrada de texto – caixa de texto; Permite a edição de valores; | O valor sempre será no formato String; | Quando houver a necessidade de tratar o valor em um formato numérico é necessário transformá-lo; | Veja o exemplo: FrameTextField.java JTEXTFIELD Pacote: javax.swing | Classe: JTextField | | Principais propriedades: y name (nome da variável) y text JCOMBOBOX Pacote: javax.swing | Classe: JComboBox | | Permite criar caixas de seleção; | Principais propriedades: y name (nome da variável) y model JBUTTON Pacote: javax.swing | Classe: JButton | | São painéis rotulados com um texto. Podem ser acionados, no sentido de provocar a execução de alguma rotina ou seqüência de comandos; | Para que um botão possa responder alguma ação do usuário é necessário programar o evento (tratamento de eventos). | Veja o Exemplo: FrameButton.java JBUTTON Pacote: javax.swing | Classe: JButton | | Principais propriedades: y name (nome da variável) y text JBUTTON | Para tratar um evento é necessário: y Implementar a classe ActionListener public class FrameBotao extends Frame implements ActionListener {..} y Adicionar o Listener ao objeto passível de sofrer uma ação: button1 = new Button(“Pressione aqui”); button1.addActionListener(this); add(button1); JBUTTON | Para tratar um evento é necessário y (continuação): Implementar o método actionPerformed() e verificar a origem do evento: public void actionPerformed(ActionEvent e) { // o if irá testar onde ocorreu o evento if (e.getSource() == button1) { count++; label1.setText("Botão já foi usado " + count + " vez(es)."); } } JBUTTON | E como seria o tratamento de dois (2) botões? y Pode ser feito através do mesmo actionPerformed Veja o Exemplo: FrameButton2.java JBUTTON | E como seria o tratamento de dois (2) botões? y Pode ser feito através do mesmo actionPerformed if (e.getSource() == button1) { count++; label1.setText("Botão já foi usado " + count + " vez(es)."); } if (e.getSource() == button2) { JOptionPane.showMessageDialog(null,"Esta aplicação será finalizada..."); System.exit(0); } JBUTTON | E como seria o tratamento de dois (2) botões? y Pode ser feito através do mesmo actionPerformed Cuidado: if (e.getSource() == tratar button1) { eventos (de vários objetos) muitos count++; no mesmo método actionPerformed, label1.setText("Botão já foipode usado " + count + " vez(es)."); tornar o código } muito extenso e ilegível. if (e.getSource() == button2) { JOptionPane.showMessageDialog(null,"Esta aplicação será finalizada..."); System.exit(0); }