O documento apresenta os tópicos da aula sobre Java Swing, incluindo uma introdução ao projeto Swing, look-and-feel, pacotes e componentes Swing como JButton, JLabel, JCheckbox e JRadioButton.
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
Java Swing
1. Universidade Presbiteriana Mackenzie
Aula 2: Java Swing
Prof. Ms. Daniel Arndt Alves
Faculdade de Computação e Informática
Linguagem de
Programação II
Daniel Arndt Alves Java Swing 1
2. Tópicos da Aula
• Introdução ao projeto Swing
• Look-and-Feel
• Pacote javax.swing
• Componentes Swing
– JButton
– JLabel
– JCheckbox
– JRadioButton
Daniel Arndt Alves Java Swing 2
5. Projeto Swing
Projeto Swing é parte do JFC, que implementa
um novo conjunto de elementos de interface
com usuário com mecanismo look-and-feel
embutido.
É baseado no JDK 1.1 Lightweight UI
Framework, um ambiente que tornou as
interfaces menos pesadas e mais adaptáveis.
Daniel Arndt Alves Java Swing 5
6. Look and Feel
Permite alterar a visualização para simular a
aparência dos seguintes sistemas de janelas:
• Java ( Metal )
• CDE/Motif
• Windows
• MacOS
Daniel Arndt Alves Java Swing 6
8. Look and Feel CDE/Motif
Daniel Arndt Alves Java Swing 8
9. Look and Feel Windows
Daniel Arndt Alves Java Swing 9
10. Look and Feel MacOS
Daniel Arndt Alves Java Swing 10
11. Pacotes swing
A coleção swing é formada de 17 pacotes de classes,
identificados pela inicial javax:
javax.swing javax.swing.border
javax.swing.border javax.swing.colorchooser
javax.swing.event javax.swing.filechooser
javax.swing.plaf javax.swing.plaf.basic
javax.swing.plaf.metal javax.swing.plaf.multi
javax.swing.table javax.swing.text
javax.swing.text.html javax.swing.text.rtf
javax.swing.tree javax.swing.undo
javax.accessibility
Daniel Arndt Alves Java Swing 11
12. Pacote javax.swing
Pacote de mais alto nível no swing. Consiste de:
• componentes
• adaptadores
• modelos de componentes
• interfaces para delegação e para modelos
Daniel Arndt Alves Java Swing 12
13. Pacote javax.swing.border
Declara a interface Border e outras classes, que
definem estilos de renderização de bordas
específicos.
Daniel Arndt Alves Java Swing 13
15. Pacote javax.swing.event
Pacotes para tipos de eventos específicos para
swing e listeners.
Além dos tipos de eventos do pacote
java.awt.event, os componentes swing podem
gerar seus próprios tipos de eventos.
Daniel Arndt Alves Java Swing 15
17. Pacotes javax.swing.plaf.*
Os pacotes pluggable look-and-feel(plaf) as
classes que implementam os diferentes
aspectos de look-and-feel para os componentes
Swing.
Algumas destas classes estão localizadas em
subpacotes específicos (basic, metal e multi) e
outras diretamente no pacote
java.swing.plaf.
Daniel Arndt Alves Java Swing 17
19. Pacote javax.swing.text
Contém as classes de suporte para o ambiente de
documentos do swing.
Por exemplo, dá suporte básico para documentos
no formato:
• HTML
• RTF
Daniel Arndt Alves Java Swing 19
20. Pacote javax.swing.text.html
Contém as classes de suporte para:
• renderizador da linguagem HTML 3.2
• parser para esta mesma versão
Daniel Arndt Alves Java Swing 20
21. Pacote javax.swing.text.rtf
Contém as classes de suporte para um
renderizador básico do formato de texto RTF (
Rich Text Format ).
Exemplos de programas conhecidos que geram
tal formato:
• WordPad
• Microsoft Word
Daniel Arndt Alves Java Swing 21
24. Pacote javax.acessibility
Disponibiliza classes e interfaces que funcionam
como elementos intermediários entre os
elementos de interface swing e tecnologias de
acesso interativas, tais como vídeos para
deficientes visuais (braile).
Daniel Arndt Alves Java Swing 24
25. Componentes Swing
Existe uma quantidade bem variada de
componentes disponibilizados pelos pacotes
javax.swing.
Alguns destes componentes são muito parecidos
com os componentes AWT (algumas classes
simplesmente acrescentam J no nome da classe
AWT). Outros, porém, não encontram
similares no AWT.
Daniel Arndt Alves Java Swing 25
26. JButton
Os botões em Swing são instanciados com base
nesta classe. Adicionalmente ao simples
rótulos, o JButton permite:
• ícones nos botões
• bordas nos botões
• botões com cantos arredondados
Daniel Arndt Alves Java Swing 26
30. JButton (Exemplo 2)
public class ButtonPanel
extends JPanel {
public ButtonPanel() {
Icon tigerIcon = new ImageIcon("SmallTiger.gif");
JButton myButton = new JButton("Tiger",
tigerIcon);
add(myButton);
}
}
Daniel Arndt Alves Java Swing 30
31. JLabel
Os rótulos em Swing também são similares ao
AWT. Porém, permitem:
• ícones junto com os rótulos
• alterar a posição relativa horizontal e vertical
do texto em relação ao ícone
Daniel Arndt Alves Java Swing 31
33. JLabel (Exemplo)
public class LabelPanel extends JPanel {
public LabelPanel() {
JLabel plainLabel = new JLabel("Plain Small Label");
add(plainLabel);
JLabel fancyLabel = new JLabel("Fancy Big Label");
Font fancyFont = new Font("Serif", Font.BOLD |
Font.ITALIC, 32);
fancyLabel.setFont(fancyFont);
Icon tigerIcon = new ImageIcon("SmallTiger.gif");
fancyLabel.setIcon(tigerIcon);
fancyLabel.setHorizontalAlignment(JLabel.RIGHT);
add(fancyLabel);
}
}
Daniel Arndt Alves Java Swing 33
34. JCheckbox
Esta classe é similar à classe Checbox do
java.awt.
A principal diferença reside no fato da
possibilidade de utilização de imagens para
indicar o estado de seleção.
Daniel Arndt Alves Java Swing 34
36. JCheckbox (Exemplo)
public class CheckboxPanel extends JPanel {
Icon unchecked = new ToggleIcon (false);
Icon checked = new ToggleIcon (true);
// ToggleIcon é a classe que desenha a caixa de seleção
public CheckboxPanel() {
setLayout(new GridLayout(2, 1));
JCheckBox cb1 = new JCheckBox("Choose Me", true);
cb1.setIcon(unchecked);
cb1.setSelectedIcon(checked);
JCheckBox cb2 = new JCheckBox("No Choose Me", false);
cb2.setIcon(unchecked);
cb2.setSelectedIcon(checked);
add(cb1); add(cb2);
}
}
Daniel Arndt Alves Java Swing 36
37. JRadioButton
Diferentemente do pacote java.awt, o pacote
javax.swing já possui um componente
para botões do tipo radio (seleção única dentro
de um grupo).
Cada grupo é vinculado a uma instância da
classe ButtonGroup.
Daniel Arndt Alves Java Swing 37
43. JToggleButton (Exemplo)
public class ToggleButtonPanel extends JPanel {
public ToggleButtonPanel() {
setLayout(new GridLayout(4,1, 10, 10));
add (new JToggleButton ("Fe"));
add (new JToggleButton ("Fi"));
add (new JToggleButton ("Fo"));
add (new JToggleButton ("Fum"));
}
}
Daniel Arndt Alves Java Swing 43
44. JScrollPane
Consiste de uma janela que permite gerenciar
automaticamente o rolamento horizontal e
vertical de seu contéudo.
Existe um componente similar em AWT
chamado ScrollPane.
Daniel Arndt Alves Java Swing 44
46. JScrollPane (Exemplo)
public class ScrollPanel extends JPanel {
public ScrollPanel() {
setLayout(new BorderLayout());
Icon bigTiger = new ImageIcon("BigTiger.gif");
JLabel tigerLabel = new JLabel(bigTiger);
JScrollPane scrollPane = new
JScrollPane(tigerLabel);
add(scrollPane, BorderLayout.CENTER);
}
}
Daniel Arndt Alves Java Swing 46
47. JTextComponent
É uma classe de texto geral, que contém todos os
detalhes esperados de um editor de textos. Algumas
subclasses interessantes desta classe são:
• JTextField
• JTextArea
• JEditorPane
• JPasswordField
• JTextPane
Daniel Arndt Alves Java Swing 47
48. JTextField, JTextArea e JTextPane
São classes similares ao TextField e
TextArea encontrados no AWT. A classe
JTextArea pode ser incluída dentro de um
JScrollPane para rolagem automática.
A classe JTextPane é um poderoso editor de
textos que suporta texto formatado, quebra de
palavras e exibição de imagens.
Daniel Arndt Alves Java Swing 48
52. JPasswordField
Esta classe permite implementar a
funcionalidade de não se exibir diretamente os
caracteres digitados, subtituindo-os por
caracteres de máscara. O caracter de máscara
padrão é o asterisco (*). Porém, usando o
método setEchoChar(char c), pode-se
conseguir o caracter desejado para a máscara.
Daniel Arndt Alves Java Swing 52
54. JPasswordField (Exemplo)
class PasswordPanel
extends JPanel {
PasswordPanel() {
JPasswordField pass1 = new JPasswordField(20);
JPasswordField pass2 = new JPasswordField(20);
pass2.setEchoChar ('?');
add(pass1);
add(pass2);
}
}
Daniel Arndt Alves Java Swing 54
55. JEditorPane
Classe especializada de JTextComponent
para exibição e edição de marcadores HTML
3.2 e alguns outros formatos tais como RTF
(Rich Text Format).
No caso do HTML, não se trata de um navegador
completo, mas possui funcionalidades
complexas de exibição de texto e figuras.
Daniel Arndt Alves Java Swing 55
59. Navegação nos hyperlinks do JEditorPane
Caso se quisesse navegar nos hyperlinks
definidos dentro da página exibida pelo
JEditorPane, precisa-se adicionar um listener
para hyperlinks com o método
addHyperlinkListener
Daniel Arndt Alves Java Swing 59
60. Exemplo
...
jt.setEditable(false);
jt.addHyperlinkListener(new HyperlinkListener () {
public void hyperlinkUpdate(final HyperlinkEvent e) {
if (e.getEventType() ==
HyperlinkEvent.EventType.ACTIVATED)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Salve a página corrente
Document doc = jt.getDocument();
Daniel Arndt Alves Java Swing 60
62. Ação no JTextField
Caso se quisesse acessar diretamente uma página
quando se apertasse ENTER do JTextField
do exemplo, poder-se-ia implementar um
ActionListener para o componente.
A atribuição ao componente seria feita com o
método
addActionListener
Daniel Arndt Alves Java Swing 62
64. JScrollBar
A classe JScrollBar oferece uma
implementação do ScrollBar encontrado
no AWT.
Daniel Arndt Alves Java Swing 64
65. JScrollBar (Exemplo)
public class ScrollbarPanel
extends JPanel {
public ScrollbarPanel() {
setLayout(new BorderLayout());
JScrollBar scrollBar1 =
new JScrollBar (JScrollBar.VERTICAL, 0, 5, 0,
100);
add(scrollBar1, BorderLayout.EAST);
JScrollBar scrollBar2 =
new JScrollBar (JScrollBar.HORIZONTAL, 0, 5, 0, 100);
add(scrollBar2, BorderLayout.SOUTH);
}
}
Daniel Arndt Alves Java Swing 65
66. JSlider
Possui a mesma funcionalidade da JScrollBar.
Porém, adiciona dois novos detalhes:
• permite adicionar marcas ao lado das barras
• permite colocar uma borda (Border) ao lado da barra
• permite colocar rótulos ao lado das barras
Daniel Arndt Alves Java Swing 66
71. JSlider (Exemplo 2)
public class SliderPanel2 extends JPanel {
public SliderPanel2() {
setLayout(new BorderLayout());
JSlider right, bottom;
right = new JSlider(JSlider.VERTICAL, 1, 9, 3);
Hashtable h = new Hashtable();
h.put (new Integer (1), new JLabel("Mercury"));
h.put (new Integer (2), new JLabel("Venus"));
h.put (new Integer (3), new JLabel("Earth"));
h.put (new Integer (4), new JLabel("Mars"));
h.put (new Integer (5), new JLabel("Jupiter"));
h.put (new Integer (6), new JLabel("Saturn"));
Daniel Arndt Alves Java Swing 71
72. JSlider (Exemplo 2)
h.put (new Integer (7), new JLabel("Uranus"));
h.put (new Integer (8), new JLabel("Neptune"));
h.put (new Integer (9), new JLabel("Pluto"));
right.setLabelTable (h);
right.setPaintLabels (true);
bottom = new JSlider(JSlider.HORIZONTAL, 0, 100, 25);
bottom.setMajorTickSpacing (10);
bottom.setPaintLabels (true);
add(right, BorderLayout.EAST);
add(bottom, BorderLayout.SOUTH);
}
}
Daniel Arndt Alves Java Swing 72
73. JProgressBar
Permite mostrar, em uma barra de progresso, refletir o
andamento de uma operação.
Geralmente esta operação é programada através de um
processo concorrente (thread) com o processo de
execução principal do java (Thread main).
Daniel Arndt Alves Java Swing 73
75. JProgressBar (Exemplo)
A programação de uma instância da JProgressBar
é bem simples:
1. Inicializar a barra
2. Instanciar um thread
3. Para cada operação a ser realizada, invocar o thread
e esperar
Daniel Arndt Alves Java Swing 75
76. Inicialização da barra
JProgressBar progressBar = new JProgressBar();
progressBar.setMinimum(0);
progressBar.setMaximum(quant_operações);
Daniel Arndt Alves Java Swing 76
77. Instanciar Thread
Runnable runner = new Runnable() {
public void run() {
int value = progressBar.getValue();
progressBar.setValue(value+1);
}
};
Daniel Arndt Alves Java Swing 77
79. JComboBox
A classe JComboBox trabalha como a classe Choice
do AWT, porém altera alguns nomes de métodos e
adiciona a funcionalidade de edição das opções.
Daniel Arndt Alves Java Swing 79
83. JList
A classe Jlist é similar à classe List do AWT,
exceto que não suporta rolamento (scrolling)
diretamente.
Assim, ela é construída conjuntamente com a classe
JScrollPane.
Daniel Arndt Alves Java Swing 83
85. JList (Exemplo)
public class ListPanel extends JPanel {
String label [] = {"Cranberry", "Orange",
"Banana", "Kiwi", "Blueberry",
"Pomegranate", "Apple", "Pear",
"Watermelon", "Raspberry", "Snozberry"
};
public ListPanel() {
setLayout (new BorderLayout());
JList list = new JList(label);
JScrollPane pane = new JScrollPane(list);
add(pane, BorderLayout.CENTER);
}
}
Daniel Arndt Alves Java Swing 85
86. Menus
Assim como no AWT, existem as seguintes classes para
trabalhar com menus:
• JMenuItem
• JCheckBoxMenuItem
• JMenu
• JMenuBar
Daniel Arndt Alves Java Swing 86
87. Menus
Além destas classes, existem duas outras
funcionalidades que não encontram similares no
AWT:
• JRadioButtonMenuItem: providencia
checkboxes mutuamente exclusivos num menu,
quando colocados dentro de um ButtonGroup
• JMenuItem : permite a associação de um ícone
Daniel Arndt Alves Java Swing 87
90. Código do Exemplo
public class MenuTester extends JFrame
implements ActionListener {
public void actionPerformed (ActionEvent e) {
System.out.println (e.getActionCommand());
}
public MenuTester() {
super ("Menu Example");
JMenuBar jmb = new JMenuBar();
JMenu file = new JMenu ("File");
JMenuItem item;
Daniel Arndt Alves Java Swing 90
91. Código do Exemplo
file.add (item = new JMenuItem ("New"));
item.addActionListener (this);
file.add (item = new JMenuItem ("Open"));
item.addActionListener (this);
file.addSeparator();
file.add (item = new JMenuItem ("Close"));
item.addActionListener (this);
jmb.add (file);
Daniel Arndt Alves Java Swing 91
92. Código do Exemplo
JMenu edit = new JMenu ("Edit");
edit.add (item = new JMenuItem ("Copy"));
item.addActionListener (this);
Icon tigerIcon = new ImageIcon("SmallTiger.gif");
edit.add (item = new JMenuItem ("Woods", tigerIcon));
item.setHorizontalTextPosition (JMenuItem.LEFT);
item.addActionListener (this);
edit.add (item = new JMenuItem ("Woods", tigerIcon));
item.addActionListener (this);
jmb.add (edit);
Daniel Arndt Alves Java Swing 92
93. Código do Exemplo
JMenu choice = new JMenu ("Choices");
JCheckBoxMenuItem check = new JCheckBoxMenuItem ("Toggle");
check.addActionListener (this);
choice.add (check);
ButtonGroup rbg = new ButtonGroup();
JRadioButtonMenuItem rad = new JRadioButtonMenuItem ("Choice 1");
choice.add (rad);
rbg.add (rad);
rad.addActionListener (this);
rad = new JRadioButtonMenuItem ("Choice 2");
choice.add (rad);
rbg.add (rad);
Daniel Arndt Alves Java Swing 93
94. Código do Exemplo
rad.addActionListener (this);
rad = new JRadioButtonMenuItem ("Choice 3");
choice.add (rad);
rbg.add (rad);
rad.addActionListener (this);
jmb.add (choice);
setJMenuBar (jmb);
}
}
Daniel Arndt Alves Java Swing 94
95. JSeparator
Classe que permite separar elementos do menu.
Pode ser colocada num menu através do método
addSeparator()
Daniel Arndt Alves Java Swing 95