• Nenhum resultado encontrado

IntefaceGraficaI

N/A
N/A
Protected

Academic year: 2021

Share "IntefaceGraficaI"

Copied!
26
0
0

Texto

(1)

Interfaces gráficas em Java

(2)

Introdução

• As bibliotecas gráficas em JAVA são bastante simples no que diz respeito a conceitos necessários.

• A complexidade no aprendizado de interfaces gráficas em Java reside no tamanho das bibliotecas e no enorme

mundo de possibilidades; isso pode assustar, num primeiro momento.

• Material oficial da Sun:

(3)

Interfaces gráficas em Java

Java suporta, oficialmente, dois tipos de bibliotecas gráficas:

• AWT (Abstract Window Toolkit ):

– é o antigo conjunto de ferramentas para interfaces gráficas do

Java. Serve para oferecer infraestrutura mínima de interface gráfica (nivela por baixo)

– Componentes têm aparência dependente de plataforma

– Limitado em recursos devido a depender de suporte de cada plataforma para os componentes oferecidos

– Bugs e incompatibilidades entre plataformas

• JFC (Java Foundation Classes) oferece uma interface muito mais rica

– Swing é o nome dado à coleção de componentes

(4)

Tipos de Aplicações

• Há dois tipos de aplicações gráficas em Java

– Componentes iniciados via browser (applets)

– Aplicações standalone iniciadas via sistema operacional

• Ambas capturam eventos do sistema e desenham-se sobre um contexto gráfico fornecido pelo sistema

• Applets são aplicações especiais que rodam a partir de um browser:

– São componentes que executam em um container – (ambiente operacional) fornecido pelo browser

– Browser é quem controla seu ciclo de vida (início, fim, etc.) – Geralmente ocupam parte da janela do browser mas podem

abrir janelas extras;

(5)

java.awt.Component

• Raiz da hierarquia de componentes gráficos

– Componentes Swing herdam de javax.swing.Jcomponent, que é "neto" de Component

• Há um Component por trás de tudo que pode ser pintado

na tela

• Principais métodos (chamados pelo sistema):

– void paint (java.awt.Graphics g) – void repaint()

– void update(java.awt.Graphics g)

• O objeto passado como argumento durante a execução

(contexto gráfico) é, na verdade, um java.awt.Graphics2D

(6)

Componentes AWT

Há dois tipos importantes de componentes:

1) descendentes diretos de

java.awt.Component

– "Apenas" componentes: descendentes da classe

Component que não são descendentes de Container (todos os componentes da AWT)

2) descendentes de

java.awt.Container

– Subclasse de java.awt.Component

– São "recipientes." Podem conter outros componentes.

– São descendentes da classe Container: Frame, Panel,

Applet e JComponent (raiz da hierarquia dos componentes Swing)

(7)

Containers essenciais

• Frame

(AWT) e

JFrame

(Swing)

– Servem de base para qualquer aplicação gráfica

• Panel e Jpanel

– Container de propósito geral

– Serve para agrupar outros componentes e permitir layout em camadas

• Applet e Japplet

– Tipo de Panel (JPanel) que serve de base para aplicações que rodam dentro de browsers

– Pode ser inserido dentro de uma página HTML e ocupar o contexto gráfico do browser

(8)

Exemplo de JFrame (Herança)

package interfaceGrafica;

import javax.swing.*;

public class MinhaJanela extends JFrame { public MinhaJanela(String nome) {

super(nome);

this.setSize(400,350);

this.setVisible(true); }

public static void main(String[] args) {

new MinhaJanela("Minha 1ª Janela"); }

(9)

Exemplo de JFrame (Composição)

package interfaceGrafica;

import javax.swing.*;

public class MinhaJanela2 {

public static void main(String[] args) {

JFrame frame = new JFrame("Minha 2ª

Janela"); frame.setVisible(true); frame.setSize(400, 200); janela.setDefaultCloseOperation(JFrame.EXIT_ON _CLOSE); }

(10)

Hierarquia de um JFrame

package interfaceGrafica; import java.awt.*; import javax.swing.*; public class MinhaJanela2 {

private static void createAndShowGUI() {

JFrame frame = new JFrame("Minha Janela 2");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Criano um menu bar.

JMenuBar greenMenuBar = new JMenuBar(); greenMenuBar.setOpaque(true);

greenMenuBar.setBackground(new Color(154, 165, 127)); greenMenuBar.setPreferredSize(new Dimension(200, 20)); //Creando um label. Colocando dentro de um content pane.

JLabel yellowLabel = new JLabel(); yellowLabel.setOpaque(true);

yellowLabel.setBackground(new Color(248, 213, 131)); yellowLabel.setPreferredSize(new Dimension(200, 180)); //Set the menu bar and add the label to the content pane.

frame.setJMenuBar(greenMenuBar);

frame.getContentPane().add(yellowLabel, BorderLayout.CENTER); //Display the window.

frame.pack();

frame.setVisible(true); }

public static void main(String[] args) { createAndShowGUI();

}

(11)

Criando um Fórmulário

A maioria das aplicações gráficas tem formulário para entrada de dados. A API do Swing traz uma série de componentes

visuais prontos para uso. São campos de texto, botões,

checkboxes, labels, tabelas, árvores e muitos outros.

(12)

Criando um Fórmulário

• Todo componente Swing deve ser adicionado a um contêiner (Container) que administrará o agrupamento e exibição dos mesmos. Usaremos o container mais comum, um Jpanel. Através de seu método add, conseguimos adicionar nossos componentes:

• Para exibirmos nosso formulário simples, precisamos

colocar nosso Jpanel em uma janela.

O método pack() de JFrame redimensiona nosso frame para um tamanho adequado baseado nos componentes que ele tem.

(13)

Exemplo de um Formulário (Composição) public class MinhaJanela2 {

public static void main(String[] args) {

JFrame janela = new JFrame("Minha 3ªJanela"); janela.setVisible(true);

janela.setSize(400, 200);

JLabel lbNome = new JLabel("Nome"); JTextField tfNome = new JTextField(20); JPanel painel = new JPanel();

painel.add(lbNome); painel.add(tfNome); janela.add(painel);

janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

(14)

Criando um método para montar o formulário

package interfaceGrafica;

import javax.swing.*;

public class Formulario {

private JLabel label;

private JTextField textField;

private JPanel panel; private JFrame frame;

private void montaFormulario() {

label = new JLabel("Seu nome:");

textField = new JTextField(20);

panel = new JPanel();

panel.add(label);

panel.add(textField);

frame = new JFrame("Meu primeiro formulário");

frame.add(panel);

frame.pack(); frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

public static void main(String[] args) {

new Formulario().montaFormulario(); }

(15)

Exemplo Herança e Método para montar (Netbeans)

import javax.swing.*;

public class Formulario extends JFrame{

private JLabel lbNome;

private JTextField tfNome;

private JPanel panel;

private void montaFormulario() {

lbNome = new JLabel("Seu nome:");

tfNome = new JTextField(20);

panel = new JPanel();

panel.add(lbNome);

panel.add(tfNome);

this.add(panel);

this.pack();

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

public static void main(String[] args) { Formulario f = new Formulario();

(16)

Exercício • Crie o seguinte formulário:

A princípio não se preocupe com o layout (cenas do

próximo capítulo). Em tempo de execução

podemos redimensionar o formulário:

(17)

Introdução a Eventos

• O formulário anterior é até que interessante para começar a

aprender Swing, mas ele é totalmente inútil. Queremos ser capazes de recuperar o valor digitado pelo usuário para efetuar alguma

operação(Explodir uma bomba, salvar no BD, exibir, enviar via rede, mandar um email, etc).

• Para fazermos efetivamente alguma coisa, trabalhamos com eventos que são disparados pelo usuário. O Swing possui uma forma muito elegante de trabalhar com eventos - através de interfaces. O usuário pode disparar eventos ao digitar, ao clicar, ao passar o mouse, e

muitas outras situações.

• No nosso formulário, usaremos um botão (componente) que, quando clicado pelo usuário (evento), disparará um método

(tratador/handler). Neste método, vamos recuperar o texto digitado pelo usuário e efetuar alguma ação.

(18)

Trabalhando com Butões (Jbutton)

• O componente Swing que representa um botão é o Jbutton. Precisamos criar um botão e colocá-lo no nosso container (o JPanel):

• Isso acrescentará o botão ao formulário

• Mas como disparar um método quando o botão for clicado?

(19)

Exemplo Simples (Sem eventos)

import javax.swing.*;

public class JanelaBotao extends JFrame{

private JButton botao; private JPanel painel;

public void montaInterface(){

botao = new JButton("enviar"); painel = new JPanel();

painel.add(botao);

this.add(painel);

this.setSize(100,100); this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

(20)

Trabalhando com Eventos (Listeners)

• O Swing nos traz o conceito de Listeners (ouvintes), que são interfaces que implementamos com métodos para serem disparados por eventos.

• No nosso caso, para fazer um método disparar ao clique do botão, usamos a interface ActionListener. Essa interface nos dá um método

(21)

Trabalhando com Eventos (Listeners)

• Queremos, quando o botão for clicado, pegar o texto digitado pelo usuário e exibir na tela (vamos usar o JOptionPane para isso). Nosso método,

actionPerformed fica desta forma:

O último detalhe que falta, é indicar que essa ação (esse ActionListener) deve ser disparado quando o botão for clicado. Fazemos isso através do método addActionListener, chamado no botão. Ele recebe como argumento um objeto que implementa ActionListener (no nosso caso, o próprio

(22)

Exemplo Completo package interfaceGrafica;

import java.awt.event*;import javax.swing.*;

public class Formulario implements ActionListener {

private JLabel label; private JTextField textField;

private JButton button;private JPanel panel;private JFrame frame;

private void montaFormulario() {

label = new JLabel("Seu nome:");

textField = new JTextField(20);

button = new JButton("Exibir");

button.addActionListener(this);

panel = new JPanel();

panel.add(label); panel.add(textField);

panel.add(button);

frame = new JFrame("Meu primeiro formulario");

frame.add(panel); frame.pack(); frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

public void actionPerformed(ActionEvent e) { String texto = textField.getText();

JOptionPane.showMessageDialog(frame, texto); }

public static void main(String[] args) {

new Formulario().montaFormulario(); }

(23)

Exemplo Simples (com eventos)

import javax.swing.*;

public class JanelaBotao extends JFrame Implements ActionListener {

private JButton botao; private JPanel painel;

public void montaInterface(){

botao = new JButton("enviar"); ...

botao.addActionListener(this);

}

public void actionPerformed(ActionEvent arg0) {

JOptionPane.showMessageDialog(this, "oi");

}

(24)

Exemplo Simples 2 (com eventos)

import javax.swing.*;

public class JanelaCom2Botoes extends JFrame{

private JButton botao; private JPanel painel;

public void montaInterface(){

botao = new JButton("enviar");

botao.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) { JOptionPane.showMessageDialog(null, "botao1");

} });

painel = new JPanel(); painel.add(botao);

this.add(painel);

this.setVisible(true);

(25)

Exercício

• Crie um interface e coloque 3 botões com 3 ações distintas...

(26)

Exercício

• Adicionar o Evento do botão ao formulário de Cadastro de Funcionário;

• Na ação do actionPerformed você deve cadastrar o funcionario no banco de dados com usando o

Gerenciador de empresa:

– GerenciadorDeEmpresa ge = new GerenciadorDeEmpresa(); – Não esquecer de fechar a conexão;

Referências

Documentos relacionados

(“XP Investimentos ou XP”) de acordo com todas as exigências previstas na Instrução CVM nº 483, de 6 de julho de 2010, tem como objetivo fornecer informações que possam auxiliar

Fibras poliméricas têm sido sistematicamente incorporadas às formulações de concretos refratários com o objetivo de diminuir os riscos de explosão durante o processo de

Determinar, para cada um daqueles modos de falha que se devam a degradação progressiva, qual deverá ser a periodicidade económica de intervenção preventiva e a

Convencionam as partes que, exclusivamente para os empregados que mantêm contrato de trabalho com a mesma empresa ou, empresa do mesmo grupo econômico há mais de 10 (dez) anos e

O extrato de Cordia verbenacea, quando administrado na dose de 2,98 mg/kg, apresentou atividade antiinflamatório se-melhante a observada com uma dose cerca de 17

É de responsabilidade de todos os colaboradores zelarem pelo patrimônio da JOPLAS, preservando e poupando os materiais, os instrumentos de trabalho, a estética e segurança

Como foi determinado acima cada lado do eixo horizontal possui o tamanho 1000 se o resultado da equação for positivo a reta passará no lado positivo do eixo ( da metade para o

Para o usuário realizar a busca pelo cruzamento de 2 ruas, basta clicar no botão e inserir o nome da rua no formulário de busca, logo após o usuário deve clicar no botão