Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Isaias Camilo Boratti 7. Interface Gráfica GUI --> Graphics User Interface Aplicação com interface gráfica --> Janelas contendo componentes visuais tais como: botões, rótulos, campos de texto, menus, combobox, etc. O usuário interage com a aplicação através ações na interface, tais como: clicar com o mouse em botão, pressionar enter, digitar algo em um campo de texto, colocar o ponteiro do mouse sobre um componente, etc. Pacotes : javax.swing.* java.awt.* Isaias Camilo Boratti // um primeiro exemplo import javax.swing.*; public class Janela extends JFrame { public Janela() { this.setTitle(“Minha primeira janela”); this.setSize(300,200); } } public class Principal { public static void main(String [] args) { Janela minhaJanela = new Janela(); minhaJanela.show(); } } Inserindo componentes na janela import javax.swing.*; import java.awt.*; public class Janela extends JFrame { protected JButton botao; public Janela() { botao = new JButton(“Fechar”); Container c = this.getContentPane(); // c é um objeto que definirá o conteúdo da janela c.add(botao); this.setTitle(“Minha primeira janela”); this.setSize(300,200); } } public class Principal { public static void main(String [] a) { Janela minhaJanela = new Janela(); minhaJanela.show(); } } Isaias Camilo Boratti Container - Toda janela possui um container (objeto da classe Container). Para obter o container de uma janela usa-se o método getContentPane(); - A função do container é conter os componentes visuais da janela. - Os componentes visuais que integrarão a janela devem ser adicionados ao container da janela. Para isso usa-se o método add(componente) da classe Container. - A disposição dos componentes na janela dependerá da ordem em que são adicionados ao container e do gerenciador de layout do container. Adicionando um ouvinte de evento de ação import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Janela extends JFrame { protected JButton botao; public Janela() { botao = new JButton("Fechar" ); Container c = this.getContentPane(); c.add(botao); OuvinteEventoAcao ouvinte = new OuvinteEventoAcao(); botao.addActionListener(ouvinte); this.setTitle("Minha primeira janela"); this.setSize(300,200); } // classe interna public class OuvinteEventoAcao implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(0); } } } public class Principal { public static void main(String [] a) { Janela j = new Janela(); j.show(); } } EVENTOS Um evento consiste em algo que acontece, seja pela interação do usuário com a interface ou seja pela ação da própria interface. Exemplos: usuário clica com o mouse em um botão; usuário pressiona a tecla enter; usuário modifica o conteúdo de um campo de texto; uma janela é aberta; um componente ganha o foco de entrada; Cada componente visual suporta um determinado conjunto de eventos. Por exemplo, para um botão tem-se determinados eventos, entre os quais, tem-se o evento clicar com o mouse, pressionar enter, etc. Isaias Camilo Boratti Para que um componente visual “ reaja” a determinado evento x é necessário: 1) Que o componente tenha um objeto ouvinte de evento que saiba ouvir o evento x. 2) Seja implementada a classe do objeto ouvinte de evento, definindo- se o corpo do método adequado ao evento x. Obs.: Um componente visual pode ter zero ou mais ouvintes de evento. -Um ouvinte de evento consiste em um objeto que é associado a um (ou mais) componente visual e que fica ouvindo se determinados eventos acontecem. Isaias Camilo Boratti Em Java, os ouvintes de eventos são divididos em grupos (ouvinte de ação, ouvinte de janela, ouvinte de teclado, ouvinte de mouse, etc) e um ouvinte de evento tem a capacidade de ouvir eventos de seu grupo Pode ter um (ou mais)Componente Visual Objeto Ouvinte de evento Ouve determinados eventos (aqueles de seu grupo) Executa determinado método quando acontece determinado evento de seu grupo. Grupos de eventos mouseDragged mouseMoved MouseMotion- Adapter MouseMotionListe- ner Eventos de mov. do mouse mousePressed mouseClicked mouseRelesead mouseEntered mouseExited MouseAdapterMouseListenerEventos de mouse adjustmentValueChanged-AdjustmentListenerEvento de ajuste da pos. da barra de rolagem actionPerformed-ActionListenerEvento de ação MétodosSuperclasse adaptadora Superclasse Interface Grupo Isaias Camilo Boratti textValueChanged-TextListenerEventos de mudança de texto componentAdded componentRemoved ContainerAd- apter ContainerListenerEvento de container focusGained focusLost FocusAdapterFocusListenerEvento de foco keyPressed keyTyped keyRelesead KeyAdapterKeyListenerEvento de teclado MétodosSuperclasse adaptadora Superclasse Interface Grupo Isaias Camilo Boratti windowOpened windowActivated windowDeactivated windowIconefied windowDeiconefied windowClosing windowClosed WindowAdapterWindowListenerEventos de Janela MétodosSuperclasse Adaptadora Superclasse Interface Grupo -Veja que para cada grupo de eventos, existe uma classe interface que define quais métodos estão disponíveis. Na classe interface estes métodos são abstratos. - Para facilitar, nas classes interfaces com mais de um método, Java disponibiliza uma superclasse adaptadora que implementa a respectiva classe interface e que portanto, contem a implementação de todos os métodos da respectiva classe interface. Na classe adaptadora os métodos são implementados sem qualquer instrução. -Na declaração da classe relativa a um ouvinte de evento, o projetista pode declarar a mesma como subclasse de uma classe adaptadora e automaticamente todos os métodos daquele grupo de eventos estão implementados. Cabe ao projetista sobrepor aqueles métodos que julgar necessário. -Ou seja, cabe ao projetista sobrepor os métodos associados a eventos para os quais deseja que o componente visual que contem o ouvinte de evento reaja quando o evento acontecer. Exercício: Escrever uma aplicação com interface gráfica que possibilite calcular a área de triângulos. public class Triangulo { // Declaração dos atributos de instância protected double base, altura, area; // Declaração dos métodos construtores public Triangulo() { } public Triangulo( double vAltura, double vBase) { // implementar } /* Declaração de método de instância privado - só será visível dentro desta classe */ private void calculeArea() { area = base*altura/2; } Isaias Camilo Boratti // Declaração dos métodos de acesso public double informeBase() { return base; } public double InformeAltura() { return altura; } public double informeArea() { return area; } public void recebaValorBase( double vBase) { // implementar } public void recebaValorAltura( double vAltura) { // implementar } } Objetos da classe JLabel Objetos classe JTextField Objetos classe JButton Objeto da classe List Objeto da classe JPanel import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class Janela extends JFrame { // Declaração/construção do objeto que representará o triangulo Triangulo umT = new Triangulo(); // Declaração dos objetos componentes da janela private JButton entrar; private JButton fechar; private JButton ver; private JPanel meuPainel; private JTextField saiArea; private List saiAreas; private JButton confirma; private JButton cancela; private JTextField entraBase; private JTextField entraAltura; private JLabel rBase,rAltura, rArea, rAreas; // Declaração do construtor public Janela() { // ativação do construtor da superclasse super("Cálculo de triângulos"); // definição do container Container cont=this.getContentPane(); // definição do gerenciador de layout do container da janela cont.setLayout(new FlowLayout() ); // construção dos componentes da janela // construção do painel e seus componentes meuPainel = new JPanel(); //definindo uma borda para o painel Border linha = BorderFactory.createLineBorder(Color.blue); //colocando um título na borda – outra borda com título Border borda = BorderFactory.createTitledBorder(linha,"Entrada de dados" ); meuPainel.setBorder(borda); Isaias Camilo Boratti meuPainel.setLayout( new GridLayout(3,2)); /* para meuPainel foi definido um gerenciador de layout da classe GridLayout com 3 linhas e 2 colunas */ confirma = new JButton("Confirma"); confirma.setMnemonic('C'); // definição tecla de atalho confirma.setEnabled(false); cancela = new JButton("Cancela"); cancela.setEnabled(false); rBase = new JLabel("Digite base"); rAltura = new JLabel("Digite altura"); entraBase = new JTextField(10); // define um componente de tamanho 10 entraBase.setColumns(12); // altera a quant. de colunas entraBase.setEnabled(false); entraAltura = new JTextField(10); entraAltura.setEnabled(false); Isaias Camilo Boratti //Adicionando os componentes ao painel - ordem de inserção //será usada pelo gerenciador de layout meuPainel.add(rBase); meuPainel.add(rAltura); meuPainel.add(entraBase); meuPainel.add(entraAltura); meuPainel.add(confirma); meuPainel.add(cancela); // Construção dos demais componentes entrar = new JButton("Entrar com novo triângulo"); entrar.setMnemonic('E'); // Define a cor de fundo do botão entrar.setBackground(Color.red); // Define a cor de frente do botão entrar.setForeground(Color.blue); // define uma nova cor - índice de vermelho,verde e azul // cada argumento deve estar na faixa 0..255 - 0,0,0 corresponde a preto Color novacor = new Color(150,50,167); ver = new JButton("Ver área"); ver.setEnabled(false); ver.setBackground(novacor); fechar = new JButton("Fechar aplicação "); fechar.setBackground(new Color(123,30,100)); // construção de um objeto da classe Font // new Font( String nome, int estilo, int tamanho) Font fonte = new Font("Serif",Font.ITALIC, 20); saiArea = new JTextField(10); saiArea.setEditable(false); saiArea.setFont(fonte); saiAreas = new List(); rArea = new JLabel("Área"); // redefinindo o tamanho da fonte fonte = rArea.getFont(); Font novaFonte = new Font(fonte.getName(), fonte.getStyle(), fonte.getSize()+10); rArea.setFont(novaFonte); Isaias Camilo Boratti rAreas = new JLabel("Áreas já calculadas"); // adicionando os componentes ao container da janela cont.add(meuPainel); cont.add(rArea); cont.add(saiArea); cont.add(ver); cont.add(entrar); cont.add(fechar); cont.add(rAreas); cont.add(saiAreas); // colocando uma barra de rolagem no componente saiAreas cont.add(new JScrollPane(saiAreas)); //adicionando um ouvinte de evento ao botão cancela usando classe anônima cancela.addActionListener (new ActionListener() { public void actionPerformed(ActionEvent e) {entraBase.setText(""); entraAltura.setText(""); entraBase.setEnabled(false); entraAltura.setEnabled(false); ver.setEnabled(false); entrar.setEnabled(true); fechar.setEnabled(true); entrar.requestFocus(); } } ); // construção de ouvinte de ação para os demais botões usando classe interna ClasseOuvinteAcao ouvinteAcao = new ClasseOuvinteAcao(); // adicionando o ouvinte de açaõ a cada m dos demais botões entrar.addActionListener(ouvinteAcao); ver.addActionListener(ouvinteAcao); fechar.addActionListener(ouvinteAcao); confirma.addActionListener(ouvinteAcao); // criando um ouvinte de teclado ClasseOuvinteTeclado ouvinteTeclado = new ClasseOuvinteTeclado(); // adicionando ouvinte de teclado aos componentes entraBase e entraAltura entraBase.addKeyListener(ouvinteTeclado); entraAltura.addKeyListener(ouvinteTeclado); // adicionando um ouvinte de janela a janela através classe anônima this.addWindowListener ( new WindowAdapter() { public void windowClosing( WindowEvent e) { JOptionPane.showMessageDialog(null,"Fechando..."); System.exit(0); } }); // Definindo o tamanho da janela this.setSize(650,250); //caso não especificado será assumido 0,0 } // final do construtor // Declaração das classes internas // Declaração da classe interna ClasseOuvinteAcao public class ClasseOuvinteAcao implements ActionListener { public void actionPerformed( ActionEvent e ) { // Definição de qual botão originou o evento e if ( e.getSource() == fechar) System.exit(0); else if ( e.getSource() == entrar ) { ver.setEnabled(false); entrar.setEnabled(false); fechar.setEnabled(false); entraBase.setEnabled(true); entraAltura.setEnabled(true); entraBase.setText(""); entraAltura.setText("") ; entraBase.requestFocus(); confirma.setEnabled(true); cancela.setEnabled(true); } else if ( e.getSource() == ver) { saiArea.setText(Double.toString(umT.informeArea())); saiAreas.addItem(saiArea.getText()); ver.setEnabled(false); entrar.setEnabled(true); fechar.setEnabled(true); entrar.requestFocus(); } else if ( e.getSource() == confirma) if (entraBase.getText().equals("")) {JOptionPane.showMessageDialog(null," Faltou digitar base"); entraBase.requestFocus();} else if ( entraAltura.getText().equals("")) { JOptionPane.showMessageDialog(null,"Faltou digitar altura"); entraAltura.requestFocus(); } Isaias Camilo Boratti else { umT.recebaValorBase(Double.parseDouble( entraBase.getText())); umT.recebaValorAltura(Double.parseDouble( entraAltura.getText())); ver.setEnabled(true); ver.requestFocus(); confirma.setEnabled(false); cancela.setEnabled(false); entraBase.setEnabled(false); entraAltura.setEnabled(false); } } } // fim da classe interna ClasseOuvinteAcao Isaias Camilo Boratti public class ClasseOuvinteTeclado extends KeyAdapter { public void keyTyped( KeyEvent e) { // definição de qual caracter originou o evento e char car = e.getKeyChar(); if ( !(Character.isDigit(car) || car==13 || car==8 || car =='.') ) { JOptionPane.showMessageDialog(null,"Você digitou valor caracter inválido"); e.consume(); // acaba com o evento evitando que seja enviado // ao componente } } } // fim da classe interna ClasseOuvinteTeclado } // fim da classe Janela Isaias Camilo Boratti public class Principal { public static void main(String[] argumentos) { Janela aplicacao = new Janela(); aplicacao.show(); } } Gerenciadores de Layout São objetos responsáveis pelo gerenciamento do layout dos componentes dentro de um container. Um gerenciador de layout faz com que os componentes de um container sejam dispostos segundo determinada forma. Principais classes : FlowLayout --> Os componentes são adicionados linha por linha, ou seja, são adicionados horizontalmente. Quando chegar ao final da linha passa-se automaticamente para o início da próxima linha. GridLayout --> O container é dividido em linhas e colunas e cada componente é colocado em uma célula desta matriz (por linha). BorderLayout --> Permite que se escolha onde se quer colocar o componente ( Center, North, South, East e West ) meuContainer = this.getContentPane(); meuContainer.setLayout(new BorderLayout()); meuContainer.add( meuBotao, “South” ); //coloca meuBotao no sul do container Isaias Camilo Boratti Object Component Container Window JComponent Frame JFrame Abstract Button JComboBox JLabel JList JMenuBar JOptionPane JPanel JTextComponent JButton JTextField JTextArea Principais Métodos Classe Object (java.lang.Object) String toString() --> retorna um string que representa o objeto (nome do objeto + endereço) Classe Component (java.awt.Component) boolean isVisible() --> informa se o componente está ou não visível void setVisible(boolean b) --> mostra ou oculta o componente boolean isEnabled() --> informa se o componente está ou não ativo void setEnabled(boolean b) --> ativa ou desativa o componente void setBounds( int x, int y, int largura, int altura) --> move e redimensiona o componente void setLocation( int x, int y) --> Coloca o componente em nova posição void setSize(int largura, int altura) --> dimensiona o componente void setBackground(Color c) --> define a cor de fundo do componente void setForeground ( Color c) --> define a cor do primeiro plano void requestFocus() --> faz com que o componente receba o foco de entrada void setFont (Font f) --> define a fonte do componente Classe Container (java.awt.Container) void add (Component c) --> adiciona o componente c ao container void setLayout (LayoutManager layout) --> especifica o gerenciador de layout do container Classe Frame (java.awt.Frame) void setResizable (boolean b) --> determina se o usuário pode ou não redimensionar a janela void setTitle( String s ) --> define o texto a ser colocado na barra de título Classe JFrame (javax.swing.JFrame) Container getContentPane() --> retorna o objeto área de conteúdo (container) da janela Isaias Camilo Boratti Classe JButton (javax.swing.JButton) void setText (Strint texto) --> define o texto a ser exibido no botão String getText() --> retorna o texto que o botão está exibindo JButton (String t) --> constrói um botão com o texto t Classe Jlabel (javax,swing.JLabel) JLabel( String t) --> constrói um rótulo (etiqueta) com o texto t void setText (String t) --> define um novo texto para o label (etiqueta) String getText() ? retorna o texto do objeto label Classe JTextComponent (javax.swing.JTextComponent) void setText(String t) --> define um novo texto para o componente String getText() --> retorna o texto contido no componente de texto void setEditable(boolean b) --> determina se o usuário pode alterar ou não o conteúdo do componente de texto Classe JTextField (javax.swing.JTextField) JTextField(int col) --> constrói uma instância vazia com col colunas JTextField(String tex, int col) --> constrói uma instância com texto tex e com col colunas void setColumns(int col) --> define o número de colunas do comapo de texto Classe JTextArea (javax.swing.JTextArea) JTextArea(int lin, int col) --> constrói uma área de texto com lin linhas e col colunas JTextArea(String t, int lin, int col) --> constrói uma área de texto com lin linhas, col colunas e com um texto inicial t void setColumns (int col) --> define o número de colunas da área de texto void setRows(int lin) --> define o número de linhas da área de texto void append(String novo_texto) --> adiciona o texto novo_texto no final do texto da área de texto void insert(String t, int pos) --> insere o texto t na linha pos da área de texto ( a primeira linha é número zero) Isaias Camilo Boratti Classe JScrollPane (javax,swing.JScrollPane) JScollPane(Component c) --> constrói uma área de rolagem que exibe o conteúdo do componente c. As barras de rolagem só aparecerão quando o componente for maior que a área de visualização. Classe List (java.awt.List) void addItem(String str) --> adiciona o string str a lista String getItem(int pos) --> devolve o string da posição pos int getItemCount() --> devolve a quantidade de itens da lista void removeAll() --> remove todos os itens da lista Classe Font (java.awt.Font) Font(String nome, int estilo, int tamanho) --> Constrói uma instância da classe Font. O parâmetro nome define o nome da fonte (p.e. “Serif” ). O parâmetro estilo pode ser Font.PLAIN, Font.BOLD, Font.ITALIC ou Font.BOLD+Font.ITALIC. O parâmetro tamanho define o tamanho da fonte a ser construída Isaias Camilo Boratti String getFontName() --> devolve o nome da font que o objeto da classe Font tem. Classe Color (java.awt.Color) Color( int vermelho, int verde, int azul) --> Constrói um objeto da classe Color como uma mistura de vermelho, verde e azul. Os valores para os parâmetros devem estar na faixa 0..255. Alguns atributos estáticos da classe Color que definem um valor de cor: Color.black (preta); Color.blue (azul); Color.green (verde); Color.yellow (amarela); etc. Exemplo: Color umaCor = Color.blue;