capítulo 15 swing – parte 2. 2 capítulo 15 – swing parte 2 swing – parte 2 a classe...
TRANSCRIPT
Capítulo 15
Swing – Parte 2
2Capítulo 15 – Swing parte 2
Swing – parte 2
• A classe javax.swing.JFrame
• Componentes de tela
• Gerenciadores de layout
• Eventos
3Capítulo 15 – Swing parte 2
A classe javax.swing.JFrame
• Classe base para implementação de janelas em sistemas operacionais com interface gráfica, como Windows, Linux Gnome/KDE, Mac OS X, etc.
• Para criar uma janela, devemos implementar uma classe derivada da classe JFrame.
4Capítulo 15 – Swing parte 2
A classe javax.swing.JFrame
public class ExemploFrame extends JFrame {
public ExemploFrame() {setTitle("Janela exemplo");setSize(640, 300);setDefaultCloseOperation(
DISPOSE_ON_CLOSE);setVisible(true);
}}
5Capítulo 15 – Swing parte 2
A classe javax.swing.JFrame
JFrame janela = new ExemploFrame();
6Capítulo 15 – Swing parte 2
Método setTitle()
• Define o título da janela
setTitle(“Janela Exemplo”);
7Capítulo 15 – Swing parte 2
Método setSize()
• Define o tamanho inicial da janela
setSize(300, 200);
200 px
300 px
8Capítulo 15 – Swing parte 2
Método setDefaultCloseOperation()
• Define o comportamento da janela ao clicar no botão fechar.
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
• Opções:– EXIT_ON_CLOSE – Encerra o programa.– DISPOSE_ON_CLOSE – Fecha a janela.– HIDE_ON_CLOSE – Esconde a janela (DEFAULT).– DO_NOTHING_ON_CLOSE – Não faz nada.
9Capítulo 15 – Swing parte 2
Método setVisible()
• Torna a janela visível
setVisible(true);
• Geralmente utilizada como última instrução na construção da janela.
10Capítulo 15 – Swing parte 2
Método setLocation()
• Define a posição inicial da janela.
setLocation(200, 150);
11Capítulo 15 – Swing parte 2
Método setLocation()
200 px
150 px
12Capítulo 15 – Swing parte 2
Método setLocation()• Centralizando a janela em relação à Área de
Trabalho:
Dimension dimension =Toolkit.getDefaultToolkit().getScreenSize();
int larguraTela = dimension.width;int alturaTela = dimension.height;int larguraJanela = getSize().width;int alturaJanela = getSize().height;int posicaoH = (larguraTela - larguraJanela) / 2;int posicaoV = (alturaTela - alturaJanela) / 2;setLocation(posicaoH, posicaoV);
13Capítulo 15 – Swing parte 2
Método setResizable()
• Define se a janela possuirá tamanho fixo
setResizable(false);
– true – Permite que o usuário altere o tamanho da janela;
– false – A janela possuirá tamanho fixo.
14Capítulo 15 – Swing parte 2
Exercício• Monte uma janela com a aparência abaixo:
• Este janela deverá possuir o tamanho fixo, aparecendo automaticamente centralizada na tela e deverá encerrar o programa quando o usuário clicar no botão fechar
15Capítulo 15 – Swing parte 2
Componentes de tela
16Capítulo 15 – Swing parte 2
Componentes de tela
• Principais componentes de Tela
– javax.swing.JPanel
– javax.swing.JButton
– javax.swing.JTextField
– javax.swing.JLabel
– javax.swing.JCheckBox
– javax.swing.JRadioButton
17Capítulo 15 – Swing parte 2
javax.swing.JPanel
public class ComponentesFrame extends JFrame {
JPanel pnlRaiz = new JPanel();
public ComponentesFrame() {. . . . . .this.add(pnlRaiz);. . . . . .
}}
this (JFrame)
pnlRaiz (JPanel)
18Capítulo 15 – Swing parte 2
javax.swing.JPanel
• Adicionando componentes por coordenadas:
pnlRaiz.setLayout(null);
c1.setBounds(20, 10, 40, 15);pnlRaiz.add(c1);
c2.setBounds(100, 40, 40, 15);pnlRaiz.add(c2);
c110
15
2040
c2
40
15
100 40
19Capítulo 15 – Swing parte 2
javax.swing.JButton
public class ComponentesFrame extends JFrame {
JButton btnOk = new JButton();
public ComponentesFrame() {. . . . . .btnOk.setBounds(50, 60, 100, 30);btnOk.setText(“Ok”);pnlRaiz.add(btnOk);. . . . . .}
}
20Capítulo 15 – Swing parte 2
javax.swing.JButton
• Método setText()Altera o rótulo do botão
btnOk.setText(“Clique aqui!”);
21Capítulo 15 – Swing parte 2
javax.swing.JButton
• Método setMnemonic()Assinala uma tecla de atalho para o botão
btnOk.setMnemonic(‘C’);
22Capítulo 15 – Swing parte 2
javax.swing.JButton
• Método setToolTipText()Assinala um texto a ser exibido na passagem do mouse.
btnOk.setToolTipText(“Clique aqui para dominar o mundo!”);
23Capítulo 15 – Swing parte 2
javax.swing.JButton
• Método setEnabled()Habilita/desabilita o botão para uso.
btnOk.setEnabled(false);
24Capítulo 15 – Swing parte 2
javax.swing.JButton
• Método setVisible()Torna o botão visível/invisível.
btnOk.setVisible(false);
25Capítulo 15 – Swing parte 2
javax.swing.JButton
• Método setIcon()Assinala uma imagem a ser exibida pelo botão
btnOk.setIcon(new ImageIcon(“C:\\krusty1.png”));
26Capítulo 15 – Swing parte 2
javax.swing.JButton• Método setPressedIcon()
Assinala uma imagem a ser exibida pelo botão no momento em que o usuário clicar.
Deve ser utilizado em conjunto com o método setIcon()
btnOk.setIcon(new ImageIcon(“C:\\krusty1.png”)); btnOk.setPressedIcon(new ImageIcon(“C:\\krusty2.png”));
27Capítulo 15 – Swing parte 2
javax.swing.JTextField
public class ComponentesFrame extends JFrame {
JTextField txtNome = new JTextField();
public ComponentesFrame() {. . . . . .txtNome.setBounds(40, 50, 120, 24);pnlRaiz.add(txtNome);. . . . . .
}}
28Capítulo 15 – Swing parte 2
javax.swing.JTextField
• setBounds()
• setText()
• setToolTipText()
• setEnabled()
• setVisible()
29Capítulo 15 – Swing parte 2
javax.swing.JLabel
public class ComponentesFrame extends JFrame {
JLabel lblBemVindo = new JLabel();
public ComponentesFrame() {. . . . . .lblBemVindo.setBounds(30, 40, 160, 40);lblBemVindo.setText("Bem vindo ao mundo Java!");pnlRaiz.add(lblBemVindo);. . . . . .}
}
30Capítulo 15 – Swing parte 2
javax.swing.JLabel
• setBounds()
• setText()
• setToolTipText()
• setEnabled()
• setVisible()
• setIcon()
31Capítulo 15 – Swing parte 2
javax.swing.JLabel
• Métodos setDisplayedMnemonic() e setLabelFor()Assinala uma tecla de atalho para um outro componente
lblNome.setDisplayedMnemonic(‘n’);lblNome.setLabelFor(txtNome);
32Capítulo 15 – Swing parte 2
javax.swing.JCheckBox
public class ComponentesFrame extends JFrame {
JCheckBox chkFumante = new JCheckBox();
public ComponentesFrame() {. . . . . .chkFumante.setBounds(50, 40, 130, 40);chkFumante.setText(“Fumante");pnlRaiz.add(chkFumante);. . . . . .}
}
33Capítulo 15 – Swing parte 2
javax.swing.JCheckBox
• setBounds()
• setText()
• setMnemonic()
• setToolTipText()
• setEnabled()
• setVisible()
34Capítulo 15 – Swing parte 2
javax.swing.JCheckBox
• Método setSelected()Marca/desmarca a flag do checkbox.
chkFumante.setSelected(true);
35Capítulo 15 – Swing parte 2
javax.swing.JRadioButton
public class ComponentesFrame extends JFrame {
JRadioButton optAtivo = new JRadioButton();
public ComponentesFrame() {. . . . . .optAtivo.setBounds(60, 40, 100, 40);optAtivo.setText(“Ativo");pnlRaiz.add(optAtivo);. . . . . .}
}
36Capítulo 15 – Swing parte 2
javax.swing.JRadioButton
• setBounds()
• setText()
• setMnemonic()
• setToolTipText()
• setEnabled()
• setVisible()
• setSelected()
37Capítulo 15 – Swing parte 2
javax.swing.ButtonGroup
ButtonGroup grpSexo = new ButtonGroup();ButtonGroup grpTime = new ButtonGroup();
grpSexo.add(optMasc);grpSexo.add(optFem);
grpTime.add(optCor);grpTime.add(optPal);grpTime.add(optSao);grpTime.add(optSan);
38Capítulo 15 – Swing parte 2
Exercício
• Utilizando o Eclipse/VEP, crie uma janela com o layout apresentado pelo slide 15.
39Capítulo 15 – Swing parte 2
Gerenciadores de Layout• Um gerenciador de layout é um objeto vinculado
ao painel da janela que é responsável pelo posicionamento dos componentes.
this
(JFrame)
pnlRaiz
(JPanel)
(LayoutManager)
40Capítulo 15 – Swing parte 2
Gerenciadores de Layout
• Principais layout’s:
– java.awt.GridLayout
– java.awt.BorderLayout
– java.awt.FlowLayout
41Capítulo 15 – Swing parte 2
java.awt.GridLayout
pnlRaiz.setLayout(new GridLayout(3, 2));
pnlRaiz.add(btn1);pnlRaiz.add(btn2);pnlRaiz.add(btn3);pnlRaiz.add(btn4);pnlRaiz.add(btn5);pnlRaiz.add(btn6);
42Capítulo 15 – Swing parte 2
java.awt.BorderLayoutpnlRaiz.setLayout(new BorderLayout());
pnlRaiz.add(btn1, BorderLayout.NORTH);pnlRaiz.add(btn2, BorderLayout.SOUTH);pnlRaiz.add(btn3, BorderLayout.EAST);pnlRaiz.add(btn4,
BorderLayout.WEST);pnlRaiz.add(btn5,
BorderLayout.CENTER);
43Capítulo 15 – Swing parte 2
java.awt.FlowLayout
pnlRaiz.setLayout(new FlowLayout(FlowLayout.LEFT));
pnlRaiz.add(btn1);pnlRaiz.add(btn2);pnlRaiz.add(btn3);pnlRaiz.add(btn4);pnlRaiz.add(btn5);pnlRaiz.add(btn6);
44Capítulo 15 – Swing parte 2
Layout’s mixados
• Podemos utilizar containers para criar janelas com layout’s mais sofisticados.
• Um container é um componente de tela utilizado para conter outros componentes de tela.
• Cada container possui layout próprio e pode ser utilizado na construção de janelas com layouts mixados.
• O container mais comumente utilizado é o javax.swing.JPanel
45Capítulo 15 – Swing parte 2
Layout’s mixados
JPanel pnlEsquerda =new JPanel();
pnlEsquerda.setLayout(new GridLayout(4, 1));
pnlEsquerda.add(btn2);pnlEsquerda.add(btn3);pnlEsquerda.add(btn4);pnlEsquerda.add(btn5);
pnlRaiz.setLayout(new BorderLayout());pnlRaiz.add(pnlEsquerda, BorderLayout.WEST);pnlRaiz.add(btn1, BorderLayout.CENTER);
46Capítulo 15 – Swing parte 2
Exercício• Crie uma janela com o layout abaixo:
47Capítulo 15 – Swing parte 2
Eventos
• Um evento representa uma ação do usuário sobre a aplicação como um clique de mouse, um pressionar de tecla, ou qualquer outra interação com a aplicação.
• O Java utiliza “listeners” para perceber tais ações e executar rotinas.
48Capítulo 15 – Swing parte 2
Listeners• Um listener é uma classe a ser implementada pelo
desenvolvedor e vinculada a um componente de tela (botão, caixa de texto, etc) que será responsável por perceber uma ação sobre aquele componente.
• Esta classe deverá implementar uma das interfaces abaixo (tipos de listeners):
– java.awt.event.ActionListener– java.awt.event.MouseListener– java.awt.event.KeyListener– java.awt.event.WindowListener
49Capítulo 15 – Swing parte 2
Criando um listener – Forma 1Passo 1: Implementando uma classe listener
public class ExibeOlaMundoListener implements ActionListener {public void actionPerformed(ActionEvent e) {
System.out.println(“Olá, mundo”);}
}
Passo 2: Registrando o listener no elemento gráfico
. . . . . .btnOk.setBounds(30, 40, 90, 30);btnOk.setText(“Clique aqui”);btnOk.addActionListener(new ExibeOlaMundoListener());add(btnOk);
. . . . . .
Vincula o listener ao botão btnOk. Quando o usuário clicar sobre este botão, a classe
ExibeOlaMundo terá o seu método executado.
50Capítulo 15 – Swing parte 2
Criando um listener – Forma 2• Outra forma simples de utilizar listeners é fazer com que a
própria classe de janela implemente o listener desejado:
public class TesteFrame extends JFrame implements ActionListener {JButton btnOk = new JButton(“Ok”);public TesteFrame() {
. . . . . .btnOk.addActionListener(this);. . . . . .
}public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(this, “Olá, mundo”);}
}
Vincula a própria classe como listener do botão btnOk.
Quando o usuário clicar sobre este botão, o método
actionPerform da própria classe será executado.
51Capítulo 15 – Swing parte 2
Criando um listener – Forma 3• Uma das formas mais utilizadas na construção de listeners é
mediante a criação de classe anônima.
public class TesteFrame extends JFrame {. . . . . .public TesteFrame() {
. . . . . .btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null, “Olá, mundo”);
}});. . . . . .
}}
Classe AnônimaUma classe sem nome que implementa a interface ActionListener para uso imediato.
52Capítulo 15 – Swing parte 2
java.awt.event.ActionListener
• Listener mais simples e mais amplamente utilizado em aplicações. Tipicamente registrado em botões ou outros componentes em que desejamos detectar o clique ou ativação (pressionar da tecla <ENTER>).
• Possui um único método:
– public void actionPerform(ActionEvent e)Executado ao clicar ou pressionar <ENTER> sobre o componente.
53Capítulo 15 – Swing parte 2
java.awt.event.MouseListener• Utilizado para detectar eventos de mouse sobre o
componente. Possui os seguintes métodos:– public void mouseClicked(MouseEvent e)
Executado ao clicar sobre o componente
– public void mouseEntered(MouseEvent e)Executado ao passar o ponteiro sobre o componente
– public void mouseExited(MouseEvent e)Executado ao sair com o ponteiro de cima do componente
– public void mousePressed(MouseEvent e) Executado ao baixar um dos botões do mouse sobre o componente.
– public void mouseReleased(MouseEvent e)Executado ao liberar o botão do mouse que havia sido baixado sobre o componente.
54Capítulo 15 – Swing parte 2
java.awt.event.KeyListener• Utilizado para detectar eventos de teclado sobre o
componente. Tipicamente utilizado em caixas de texto. Possui os seguinte métodos:
– public void keyTyped(KeyEvent e)Executado quando o usuário digita algum caracter sobre o componente.
– public void keyPressed(KeyEvent e)Executado quando o usuário baixa alguma tecla sobre o componente.
– public void keyReleased(KeyEvent e)Executado quando o usuário libera a tecla que foi baixada sobre o componente.
55Capítulo 15 – Swing parte 2
java.awt.event.WindowListener
• Utilizado para detectar eventos de janela. Possui os seguintes métodos:
– public void windowOpened(WindowEvent e)Executado quando a janela é aberta.
– public void windowClosing(WindowEvent e)Executado quando a janela está em iminência de ser fechada. Tipicamente utilizado para emitir notificações ao usuário quando este tentar fechar a janela.
– public void windowClosed(WindowEvent e)Executado após a janela ter sido fechada.
56Capítulo 15 – Swing parte 2
java.awt.event.WindowListener
• Continuação:
– public void windowIconified(WindowEvent e)Executado quando a janela é minimizada.
– public void windowDeiconified(WindowEvent e)Executado quando a janela é restaurada.
– public void windowActivated(WindowEvent e)Executado quando a janela ganha o foco.
– public void windowDeactivated(WindowEvent e)Executado quando a janela perde o foco (usuário “salta” para dentro desta janela).
57Capítulo 15 – Swing parte 2
Exercício
• Calculadora Básica