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.
Universidade Presbiteriana Mackenzie
Aula2: 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
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
Permitealterar 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
Pacotes swing
A coleçãoswing é 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 demais 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 ainterface Border e outras classes, que
definem estilos de renderização de bordas
específicos.
Daniel Arndt Alves Java Swing 13
Pacote javax.swing.event
Pacotes paratipos 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
Pacotes javax.swing.plaf.*
Os pacotespluggable 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
Pacote javax.swing.text
Contém asclasses 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 asclasses 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 asclasses 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
Pacote javax.acessibility
Disponibiliza classese 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 umaquantidade 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 emSwing 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
JButton (Exemplo 2)
publicclass 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 emSwing 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
JLabel (Exemplo)
public classLabelPanel 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
JCheckbox (Exemplo)
public classCheckboxPanel 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 pacotejava.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
JToggleButton (Exemplo)
public classToggleButtonPanel 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 umajanela 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
JScrollPane (Exemplo)
public classScrollPanel 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 classede 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 eJTextPane
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
JPasswordField
Esta classe permiteimplementar 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
JPasswordField (Exemplo)
class PasswordPanel
extendsJPanel {
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 deJTextComponent
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
Navegação nos hyperlinksdo 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
Ação no JTextField
Casose 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
JScrollBar
A classe JScrollBaroferece uma
implementação do ScrollBar encontrado
no AWT.
Daniel Arndt Alves Java Swing 64
65.
JScrollBar (Exemplo)
public classScrollbarPanel
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 mesmafuncionalidade 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
JSlider (Exemplo 2)
publicclass 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, emuma 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
JProgressBar (Exemplo)
A programaçãode 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
JProgressBarprogressBar = 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
JComboBox
A classe JComboBoxtrabalha 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
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
JList (Exemplo)
public classListPanel 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 noAWT, 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