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
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
Tópicos da Aula
• Componentes Swing
– JToggleButton
– JScrollPane
– JTextComponent
– JPasswordField
– JEditorPane
– JScrollBar
– JSlider
Daniel Arndt Alves Java Swing 3
Tópicos da Aula
• Componentes Swing
– JProgressBar
– JComboBox
– JList
– Menus
– JSeparator
Daniel Arndt Alves Java Swing 4
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
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
Look and Feel Java
Daniel Arndt Alves Java Swing 7
Look and Feel CDE/Motif
Daniel Arndt Alves Java Swing 8
Look and Feel Windows
Daniel Arndt Alves Java Swing 9
Look and Feel MacOS
Daniel Arndt Alves Java Swing 10
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
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
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
Pacote javax.swing.colorchooser
Contém classes de suporte para o componente
color chooser.
Daniel Arndt Alves Java Swing 14
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
Pacote javax.swing.filechooser
Contém classes de suporte para o componente
file chooser.
Daniel Arndt Alves Java Swing 16
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
Pacote javax.swing.table
Contém as interfaces e classes para o
componente table.
Daniel Arndt Alves Java Swing 18
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
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
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
Pacote javax.swing.tree
Contém as classes e interfaces que suportam o
componente tree.
Daniel Arndt Alves Java Swing 22
Pacote javax.swing.undo
Disponibiliza as classes de suporte para
implementação de capacidade undo/redo nos
componentes.
Daniel Arndt Alves Java Swing 23
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
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
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
JButton (Exemplo 1)
Daniel Arndt Alves Java Swing 27
JButton (Exemplo 1)
public class ButtonPanel
extends JPanel {
public ButtonPanel () {
JButton myButton = new JButton("Tiger");
add(myButton);
}
}
Daniel Arndt Alves Java Swing 28
JButton (Exemplo 2)
Daniel Arndt Alves Java Swing 29
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
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
JLabel (Exemplo)
Daniel Arndt Alves Java Swing 32
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
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)
Daniel Arndt Alves Java Swing 35
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
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
JRadioButton (Exemplo)
Daniel Arndt Alves Java Swing 38
JRadioButton (Exemplo)
public class RadioButtonPanel extends JPanel {
public RadioButtonPanel() {
setLayout(new GridLayout(4,1));
JRadioButton radioButton;
ButtonGroup rbg = new ButtonGroup();
JLabel label = new JLabel("Annual Salary: ");
label.setFont(new Font("SansSerif", Font.BOLD, 14));
add(label);
radioButton = new JRadioButton("$45,000");
add (radioButton);
rbg.add (radioButton);
radioButton.setSelected(true);
Daniel Arndt Alves Java Swing 39
JRadioButton (Exemplo)
radioButton = new JRadioButton("$60,000");
add (radioButton);
rbg.add (radioButton);
radioButton = new JRadioButton("$75,000");
radioButton.setMnemonic (KeyEvent.VK_7);
add (radioButton);
rbg.add (radioButton);
}
}
Daniel Arndt Alves Java Swing 40
JToggleButton
Permite selecionar várias opções através de
botões.
Não possui similar no AWT.
Daniel Arndt Alves Java Swing 41
JToggleButton (Exemplo)
Daniel Arndt Alves Java Swing 42
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
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
JScrollPane (Exemplo)
Daniel Arndt Alves Java Swing 45
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
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
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
JTextField, JTextArea e
JTextPane (Exemplo)
Daniel Arndt Alves Java Swing 49
JTextField, JTextArea e
JTextPane (Exemplo)
public class TextPanel extends JPanel {
public TextPanel() {
setLayout(new BorderLayout());
JTextField textField = new JTextField();
JTextArea textArea = new JTextArea();
JTextPane textPane = new JTextPane();
// Propriedades de fonte do objeto TextPane
MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setFontFamily(attr, "Serif");
StyleConstants.setFontSize(attr, 18);
StyleConstants.setBold(attr, true);
textPane.setCharacterAttributes(attr, false);
Daniel Arndt Alves Java Swing 50
JTextField, JTextArea e JTextPane
(Exemplo)
add(textField, BorderLayout.NORTH);
add(new JScrollPane(textArea),BorderLayout.CENTER);
add(new JScrollPane(textPane), BorderLayout.SOUTH);
}
}
Daniel Arndt Alves Java Swing 51
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
JPasswordField (Exemplo)
Daniel Arndt Alves Java Swing 53
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
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
JEditorPane (Exemplo)
Daniel Arndt Alves Java Swing 56
JEditorPane (Exemplo)
public class Browser
extends JPanel {
Browser() {
setLayout (new BorderLayout (5, 5));
JEditorPane jt = new JEditorPane();
JTextField input =
new
JTextField("http://gamelan.com/workbench/gam/");
jt.setEditable(false);
try{
jt.setPage(input.getText());
}
catch(IOException e){System.exit(0);
}
Daniel Arndt Alves Java Swing 57
JEditorPane (Exemplo)
JScrollPane pane = new JScrollPane();
pane.setBorder (
BorderFactory.createLoweredBevelBorder());
pane.getViewport().add(jt);
add(pane, BorderLayout.CENTER);
add (input, BorderLayout.SOUTH);
}
}
Daniel Arndt Alves Java Swing 58
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
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
Exemplo
try {
URL url = e.getURL();
jt.setPage(url);
input.setText (url.toString());
} catch (IOException io) {
JOptionPane.showMessageDialog (Browser.this, "Can't follow
link",
"Invalid Input",JOptionPane.ERROR_MESSAGE);
jt.setDocument (doc); // Retorna documento anterior
}
} // public void run
}); }}
});
Daniel Arndt Alves Java Swing 61
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
Exemplo
input.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e) {
try {
jt.setPage (input.getText());
} catch (IOException ex) {
JOptionPane.showMessageDialog (
Browser.this, "Invalid URL",
"Invalid Input",
JOptionPane.ERROR_MESSAGE);
}
}
});
Daniel Arndt Alves Java Swing 63
JScrollBar
A classe JScrollBar oferece uma
implementação do ScrollBar encontrado
no AWT.
Daniel Arndt Alves Java Swing 64
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
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
JSlider (Exemplo)
Daniel Arndt Alves Java Swing 67
JSlider (Exemplo)
public class SliderPanel extends JPanel {
public SliderPanel() {
setLayout(new BorderLayout());
JSlider slider1 = new JSlider (JSlider.VERTICAL, 0, 100, 50);
slider1.setPaintTicks(true);
slider1.setMajorTickSpacing(10);
slider1.setMinorTickSpacing(2);
add(slider1, BorderLayout.EAST);
JSlider slider2 = new JSlider (JSlider.VERTICAL, 0, 100, 50);
slider2.setPaintTicks(true);
slider2.setMinorTickSpacing(5);
add(slider2, BorderLayout.WEST);
Daniel Arndt Alves Java Swing 68
JSlider (Exemplo)
JSlider slider3 = new JSlider (JSlider.HORIZONTAL, 0, 100, 50);
slider3.setPaintTicks(true);
slider3.setMajorTickSpacing(10);
add(slider3, BorderLayout.SOUTH);
JSlider slider4 = new JSlider (JSlider.HORIZONTAL, 0, 100, 50);
slider4.setBorder(BorderFactory.createLineBorder(Color.blue));
add(slider4, BorderLayout.NORTH);
}
}
Daniel Arndt Alves Java Swing 69
JSlider (Exemplo 2)
Daniel Arndt Alves Java Swing 70
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
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
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
JProgressBar (Exemplo)
Daniel Arndt Alves Java Swing 74
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
Inicialização da barra
JProgressBar progressBar = new JProgressBar();
progressBar.setMinimum(0);
progressBar.setMaximum(quant_operações);
Daniel Arndt Alves Java Swing 76
Instanciar Thread
Runnable runner = new Runnable() {
public void run() {
int value = progressBar.getValue();
progressBar.setValue(value+1);
}
};
Daniel Arndt Alves Java Swing 77
Loop de repetição
progressBar.setValue(progressBar.getMinimum());
for (int i = 0; i < quant_operações; i++) {
SwingUtilities.invokeAndWait(runner);
}
Daniel Arndt Alves Java Swing 78
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
JComboBox (Exemplo)
Daniel Arndt Alves Java Swing 80
JComboBox (Exemplo)
public class ComboPanel extends JPanel {
String choices[] = {
"Mercury", "Venus", "Earth",
"Mars", "Jupiter", "Saturn",
"Uranus","Neptune",
"Pluto"};
public ComboPanel() {
JComboBox combo1 = new JComboBox();
JComboBox combo2 = new JComboBox();
for (int i=0;i<choices.length;i++) {
combo1.addItem (choices[i]);
combo2.addItem (choices[i]);
}
Daniel Arndt Alves Java Swing 81
JComboBox (Exemplo)
combo2.setEditable(true);
combo2.setSelectedItem("X");
combo2.setMaximumRowCount(4);
add(combo1);
add(combo2);
}
}
Daniel Arndt Alves Java Swing 82
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)
Daniel Arndt Alves Java Swing 84
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
Menus
Assim como no AWT, existem as seguintes classes para
trabalhar com menus:
• JMenuItem
• JCheckBoxMenuItem
• JMenu
• JMenuBar
Daniel Arndt Alves Java Swing 86
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
Menu (Exemplo)
Daniel Arndt Alves Java Swing 88
Menu (Exemplo)
Daniel Arndt Alves Java Swing 89
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
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
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
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
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
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
Daniel Arndt Alves Java Swing 96
Daniel Arndt Alves Java Swing 97
Imagens
• http://www.goldb.org/goldblog/cmg_images/
real_programmers_binary.jpg
• http://sandersconsulting.com/Portals/58319/i
mages/checklist.jpg
Daniel Arndt Alves Java Swing 98
Obrigado
Daniel Arndt Alves
http://www.progdan.pro.br/
daniel.alves@mackenzie.br
progdan@progdan.pro.br
Daniel Arndt Alves Java Swing 99

Java Swing

  • 1.
    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
  • 3.
    Tópicos da Aula •Componentes Swing – JToggleButton – JScrollPane – JTextComponent – JPasswordField – JEditorPane – JScrollBar – JSlider Daniel Arndt Alves Java Swing 3
  • 4.
    Tópicos da Aula •Componentes Swing – JProgressBar – JComboBox – JList – Menus – JSeparator Daniel Arndt Alves Java Swing 4
  • 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 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
  • 7.
    Look and FeelJava Daniel Arndt Alves Java Swing 7
  • 8.
    Look and FeelCDE/Motif Daniel Arndt Alves Java Swing 8
  • 9.
    Look and FeelWindows Daniel Arndt Alves Java Swing 9
  • 10.
    Look and FeelMacOS Daniel Arndt Alves Java Swing 10
  • 11.
    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
  • 14.
    Pacote javax.swing.colorchooser Contém classesde suporte para o componente color chooser. Daniel Arndt Alves Java Swing 14
  • 15.
    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
  • 16.
    Pacote javax.swing.filechooser Contém classesde suporte para o componente file chooser. Daniel Arndt Alves Java Swing 16
  • 17.
    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
  • 18.
    Pacote javax.swing.table Contém asinterfaces e classes para o componente table. Daniel Arndt Alves Java Swing 18
  • 19.
    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
  • 22.
    Pacote javax.swing.tree Contém asclasses e interfaces que suportam o componente tree. Daniel Arndt Alves Java Swing 22
  • 23.
    Pacote javax.swing.undo Disponibiliza asclasses de suporte para implementação de capacidade undo/redo nos componentes. Daniel Arndt Alves Java Swing 23
  • 24.
    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
  • 27.
    JButton (Exemplo 1) DanielArndt Alves Java Swing 27
  • 28.
    JButton (Exemplo 1) publicclass ButtonPanel extends JPanel { public ButtonPanel () { JButton myButton = new JButton("Tiger"); add(myButton); } } Daniel Arndt Alves Java Swing 28
  • 29.
    JButton (Exemplo 2) DanielArndt Alves Java Swing 29
  • 30.
    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
  • 32.
    JLabel (Exemplo) Daniel ArndtAlves Java Swing 32
  • 33.
    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
  • 35.
  • 36.
    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
  • 38.
  • 39.
    JRadioButton (Exemplo) public classRadioButtonPanel extends JPanel { public RadioButtonPanel() { setLayout(new GridLayout(4,1)); JRadioButton radioButton; ButtonGroup rbg = new ButtonGroup(); JLabel label = new JLabel("Annual Salary: "); label.setFont(new Font("SansSerif", Font.BOLD, 14)); add(label); radioButton = new JRadioButton("$45,000"); add (radioButton); rbg.add (radioButton); radioButton.setSelected(true); Daniel Arndt Alves Java Swing 39
  • 40.
    JRadioButton (Exemplo) radioButton =new JRadioButton("$60,000"); add (radioButton); rbg.add (radioButton); radioButton = new JRadioButton("$75,000"); radioButton.setMnemonic (KeyEvent.VK_7); add (radioButton); rbg.add (radioButton); } } Daniel Arndt Alves Java Swing 40
  • 41.
    JToggleButton Permite selecionar váriasopções através de botões. Não possui similar no AWT. Daniel Arndt Alves Java Swing 41
  • 42.
  • 43.
    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
  • 45.
  • 46.
    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
  • 49.
    JTextField, JTextArea e JTextPane(Exemplo) Daniel Arndt Alves Java Swing 49
  • 50.
    JTextField, JTextArea e JTextPane(Exemplo) public class TextPanel extends JPanel { public TextPanel() { setLayout(new BorderLayout()); JTextField textField = new JTextField(); JTextArea textArea = new JTextArea(); JTextPane textPane = new JTextPane(); // Propriedades de fonte do objeto TextPane MutableAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setFontFamily(attr, "Serif"); StyleConstants.setFontSize(attr, 18); StyleConstants.setBold(attr, true); textPane.setCharacterAttributes(attr, false); Daniel Arndt Alves Java Swing 50
  • 51.
    JTextField, JTextArea eJTextPane (Exemplo) add(textField, BorderLayout.NORTH); add(new JScrollPane(textArea),BorderLayout.CENTER); add(new JScrollPane(textPane), BorderLayout.SOUTH); } } Daniel Arndt Alves Java Swing 51
  • 52.
    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
  • 53.
  • 54.
    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
  • 56.
  • 57.
    JEditorPane (Exemplo) public classBrowser extends JPanel { Browser() { setLayout (new BorderLayout (5, 5)); JEditorPane jt = new JEditorPane(); JTextField input = new JTextField("http://gamelan.com/workbench/gam/"); jt.setEditable(false); try{ jt.setPage(input.getText()); } catch(IOException e){System.exit(0); } Daniel Arndt Alves Java Swing 57
  • 58.
    JEditorPane (Exemplo) JScrollPane pane= new JScrollPane(); pane.setBorder ( BorderFactory.createLoweredBevelBorder()); pane.getViewport().add(jt); add(pane, BorderLayout.CENTER); add (input, BorderLayout.SOUTH); } } Daniel Arndt Alves Java Swing 58
  • 59.
    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
  • 61.
    Exemplo try { URL url= e.getURL(); jt.setPage(url); input.setText (url.toString()); } catch (IOException io) { JOptionPane.showMessageDialog (Browser.this, "Can't follow link", "Invalid Input",JOptionPane.ERROR_MESSAGE); jt.setDocument (doc); // Retorna documento anterior } } // public void run }); }} }); Daniel Arndt Alves Java Swing 61
  • 62.
    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
  • 63.
    Exemplo input.addActionListener (new ActionListener(){ public void actionPerformed (ActionEvent e) { try { jt.setPage (input.getText()); } catch (IOException ex) { JOptionPane.showMessageDialog ( Browser.this, "Invalid URL", "Invalid Input", JOptionPane.ERROR_MESSAGE); } } }); Daniel Arndt Alves Java Swing 63
  • 64.
    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
  • 67.
    JSlider (Exemplo) Daniel ArndtAlves Java Swing 67
  • 68.
    JSlider (Exemplo) public classSliderPanel extends JPanel { public SliderPanel() { setLayout(new BorderLayout()); JSlider slider1 = new JSlider (JSlider.VERTICAL, 0, 100, 50); slider1.setPaintTicks(true); slider1.setMajorTickSpacing(10); slider1.setMinorTickSpacing(2); add(slider1, BorderLayout.EAST); JSlider slider2 = new JSlider (JSlider.VERTICAL, 0, 100, 50); slider2.setPaintTicks(true); slider2.setMinorTickSpacing(5); add(slider2, BorderLayout.WEST); Daniel Arndt Alves Java Swing 68
  • 69.
    JSlider (Exemplo) JSlider slider3= new JSlider (JSlider.HORIZONTAL, 0, 100, 50); slider3.setPaintTicks(true); slider3.setMajorTickSpacing(10); add(slider3, BorderLayout.SOUTH); JSlider slider4 = new JSlider (JSlider.HORIZONTAL, 0, 100, 50); slider4.setBorder(BorderFactory.createLineBorder(Color.blue)); add(slider4, BorderLayout.NORTH); } } Daniel Arndt Alves Java Swing 69
  • 70.
    JSlider (Exemplo 2) DanielArndt Alves Java Swing 70
  • 71.
    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
  • 74.
  • 75.
    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
  • 78.
    Loop de repetição progressBar.setValue(progressBar.getMinimum()); for(int i = 0; i < quant_operações; i++) { SwingUtilities.invokeAndWait(runner); } Daniel Arndt Alves Java Swing 78
  • 79.
    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
  • 80.
  • 81.
    JComboBox (Exemplo) public classComboPanel extends JPanel { String choices[] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus","Neptune", "Pluto"}; public ComboPanel() { JComboBox combo1 = new JComboBox(); JComboBox combo2 = new JComboBox(); for (int i=0;i<choices.length;i++) { combo1.addItem (choices[i]); combo2.addItem (choices[i]); } Daniel Arndt Alves Java Swing 81
  • 82.
  • 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
  • 84.
    JList (Exemplo) Daniel ArndtAlves Java Swing 84
  • 85.
    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
  • 88.
    Menu (Exemplo) Daniel ArndtAlves Java Swing 88
  • 89.
    Menu (Exemplo) Daniel ArndtAlves Java Swing 89
  • 90.
    Código do Exemplo publicclass 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 JMenuedit = 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 JMenuchoice = 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 permiteseparar elementos do menu. Pode ser colocada num menu através do método addSeparator() Daniel Arndt Alves Java Swing 95
  • 96.
    Daniel Arndt AlvesJava Swing 96
  • 97.
    Daniel Arndt AlvesJava Swing 97
  • 98.
  • 99.