Interfaces Gráficas
com o Usuário
2011
Marcos Mendes
1
APIs
AWT (Abstract Window Toolkit)
e
Swing (GUI Components)
2
Pacote java.awt
Descrição
AWT (Abstract Window Toolkit) é uma biblioteca para a programação de
interfaces gráficas onde seus elementos dependem do sistema de interface
gráfica nativo (plataforma de execução).
Componentes de Interface Gráfica
Gerenciadores de Layout
Manipuladores de Eventos
Cores
Desenhos de Primitivas Gráficas
Tipos de Fontes
3
Pacote javax.swing
Descrição
Biblioteca de componentes de interface gráfica.
Possui um conjunto maior de componentes do que o
AWT. Seus componentes não dependem da
plataforma de execução. As aplicações java podem
ter a aparência de aplicações nativas (look and feel),
a aparência default é chamada de Metal.
4
Hierarquia de Componentes AWT
Object
Component
Container
Window
Panel
Applet
Dialog
Frame
FileDialog
5
Hierarquia de Componentes Swing
Component
Object
AWT
Container
Window
JWindow
Componentes
Swing
Panel
Frame
Applet
JFrame
JApplet
JComponent
JPanel
JButton
JLabel
6
O mínimo para a construção de
Interfaces Gráficas
Alguns Componentes
JFrame
É a tela (formulário) de uma aplicação de interface gráfica. É uma janela que
possui uma barra de título, botões de controle e pode apresentar uma barra de
menus.
JLabel
Utilizado para exibir um texto na frame.
JTextField
Utilizado para entrada de dados textual pelo usuário.
JButton
Utilizado para disparar a execução de uma ação.
7
O mínimo para a construção de
Interfaces Gráficas
Passos sugeridos para a criação de uma tela de interface
gráfica.
1.
Importe os pacotes necessários.
2.
Declare a classe como sendo derivada de JFrame.
3.
Declare os componentes como atributos da classe.
4.
No método construtor:
5.
a.
Crie (instancie) os componentes com o operador new.
b.
Adicione os componentes na frame.
c.
Defina as características da frame (título, tamanho, etc.).
d.
Exiba a frame.
No método main( ), instancie a classe.
8
O mínimo para a construção de
Interfaces Gráficas
//Exemplo de Tela de Interface Gráfica
import java.awt.*;
import javax.swing.*;
public class ExemploInterface extends JFrame {
JLabel lblNome;
JTextField txtNome;
JButton btnOk;
public ExemploInterface() {
lblNome = new JLabel("Nome:");
txtNome = new JTextField();
btnOk = new JButton("Krikaki");
add(lblNome, "North");
add(txtNome, BorderLayout.CENTER);
add("South", btnOk);
setTitle("Exemplo de Interface Gráfica");
pack();
setVisible(true);
}
public static void main(String[] args) {
new ExemploInterface();
}
}
9
Gerenciadores de Layout
Um container utiliza algo chamado
Gerenciador de Layout para controlar o
posicionamento e dimensionamento de seus
componentes. Alguns desses gerenciadores
são descritos a seguir:
BorderLayout
FlowLayout
GridLayout
GridBagLayout
10
BorderLayout (java.awt.BorderLayout)
North
West
Center
East
South
11
BorderLayout (java.awt.BorderLayout)
Construtores
Alguns Campos
BorderLayout ( )
BorderLayout ( int hgap, int vgap )
CENTER “Center”
EAST “East”
NORTH “North”
SOUTH “South”
WEST “West”
Alguns Métodos
void setHgap ( int hgap )
Define o espaço horizontal entre as áreas.
void setVgap ( int vgap )
Define o espaço vertical entre as áreas.
12
FlowLayout
(java.awt.FlowLayout)
13
FlowLayout (java.awt.FlowLayout)
Construtores
Alguns Campos (alinhamento)
FlowLayout ( )
FlowLayout ( int alinhamento )
FlowLayout (int alinhamento, int hgap, int vgap )
CENTER
LEFT
RIGHT
Alguns Métodos
void setAlignment ( int alinhamento )
Define o alinhamento horizontal dos componentes.
void setHgap ( int hgap )
Define o espaço horizontal entre os componentes.
void setVgap ( int vgap )
Define o espaço vertical entre os componentes.
14
GridLayout
(java.awt.GridLayout)
15
GridLayout (java.awt.GridLayout)
Construtores
GridLayout ( )
GridLayout ( int rows, int cols )
GridLayout (int rows,int cols, int hgap,int vgap )
Alguns Métodos
void setColumns ( int cols )
Define a quantidade de colunas da grade.
void setHgap ( int hgap )
Define o espaço horizontal entre as células.
void setRows ( int rows )
Define a quantidade de linhas da grade.
void setVgap ( int vgap )
Define o espaço vertical entre as células.
16
GridBagLayout
(java.awt.GridBagLayout)
17
GridBagLayout
Construtor
(java.awt.GridBagLayout)
GridBagLayout ( )
Utilização
GridBagLayout gbl = new GridBagLayout( );
painel.setLayout (gbl);
GridBagConstraints gbc = new GridBagConstraints( );
gbc.weightx = 100; gbc.weighty = 100; // peso
gbc.gridx = 0;
gbc.gridy = 0; // posição
gbc.gridwidth = 1;
gbc.gridheight = 3; // tamanho
painel.add ( componente, gbc );
18
GridBagConstraints
(java.awt.GridBagConstraints)
Construtores
GridBagConstraints ( )
GridBagConstraints (int gridx, int gridy, int
gridwidth, int gridheight, double weightx,
double weighty, int anchor, int fill, Insets
insets, int ipadx, int ipady )
19
GridBagConstraints
(java.awt.GridBagConstraints)
Alguns Campos
fill
gridx
gridy
gridheight
gridwidth
anchor
weightx
weighty
insets
ipadx
ipady
BOTH
HORIZONTAL
NONE
VERTICAL
RELATIVE
REMAINDER
CENTER, EAST,
NORTH, NORTHEAST,
NORTHWEST, SOUTH,
SOUTHEAST,
SOUTHWEST, WEST
20
Exemplo de GridBagLayout
import java.awt.*;
import javax.swing.*;
public class ExemploGBL extends JFrame {
JButton btnNorte, btnEsq1, btnEsq2, btnEsq3, btnCentro;
public ExemploGBL() {
setLayout (new GridBagLayout( ));
GridBagConstraints gbc = new GridBagConstraints( );
btnNorte = new JButton("Norte");
gbc.weightx = 30; gbc.weighty = 30; // peso
gbc.gridx = 0;
gbc.gridy = 0; // posição
gbc.gridwidth = 3; gbc.gridheight = 1; // tamanho
gbc.fill = GridBagConstraints.BOTH; // preenchimento
add (btnNorte, gbc);
btnEsq1 = new JButton("Esquerdo 1");
gbc.gridx = 0;
gbc.gridy = 1; // posição
gbc.gridwidth = 1;
gbc.gridheight = 1; // tamanho
add(btnEsq1, gbc);
21
Exemplo de GridBagLayout
btnEsq2 = new JButton("Esquerdo 2");
gbc.gridx = 0;
gbc.gridy = 2; // posição
add(btnEsq2, gbc);
btnEsq3 = new JButton("Esquerdo 3");
gbc.gridx = 0;
gbc.gridy = 3; // posição
add(btnEsq3, gbc);
btnCentro = new JButton("Posição Central");
gbc.weightx = 100;
gbc.weighty = 100; // peso
gbc.gridx = 1;
gbc.gridy = 1; // posição
gbc.gridwidth = 2;
gbc.gridheight = 3; // tamanho
add(btnCentro, gbc);
pack();
setBounds(100, 50, 300, 200);
setVisible(true);
}
public static void main(String args[]) {
new ExemploGBL();
}
}
22
Modificando o Layout dos containers
Para alterar o gerenciador de layout de um container,
você invoca o método setLayout( ) com uma
instância do gerenciador de layout desejado.
Normalmente a chamada deste método ocorre no
construtor da classe da GUI.
...
setLayout( new FlowLayout( ) );
...
Quando utilizado o gerenciador de layout GridBagLayout,
deve-se definir um constraints para cada componente.
23
Agrupando componentes em painéis
Pode-se adicionar diretamente em uma área do
layout apenas um único componente. Para se
adicionar vários componentes, é necessário
agrupá-los em painéis, aí então adicioná-se o
painel na posição de layout desejada.
24
Agrupando componentes em painéis
import javax.swing.*;
public class TestaPainel extends JFrame {
JButton btn1, btn2, btn3;
JPanel p;
public TestaPainel() {
btn1 = new JButton("Botão 1");
btn2 = new JButton("Botão 2");
btn3 = new JButton("Botão 3");
p = new JPanel();
p.add(btn1);
p.add(btn2);
p.add(btn3);
add(p, "South");
setBounds(100, 50, 200, 300);
setVisible( true );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new TestaPainel();
}
}
25
Alguns Containers Swing
Container é um componente que aloca outros
componentes.
JFrame
JPanel
JOptionPane
JFileChooser
JColorChooser
JEditorPane
JTabbedPane
26
JFrame
(javax.swing.JFrame)
É a tela (formulário) de uma aplicação de interface gráfica. É uma janela que possui uma
barra de título, botões de controle e pode apresentar uma barra de menus.
Alguns Construtores
JFrame ( )
JFrame (String titulo)
Alguns Métodos
Component add(Component componente) ( )
Adiciona um componente na frame.
void pack ( )
Define um tamanho mínimo para a frame.
void setSize (int largura, int altura)
Define o tamanho da frame.
void setLocation (int margemEsquerda, int margemSuperior)
Define a posição no monitor de vídeo do canto superior esquerdo da frame.
void setBounds (int margemEsquerda, int margemSuperior, int largura, int altura)
Define o tamanho e a posição da frame.
void setVisible (boolean visível)
Define se a frame está ou não visível.
27
JFrame
(javax.swing.JFrame)
void setDefaultCloseOperation (int operação)
Define qual operação será realizada ao fechar a frame.
void setLayout (LayoutManager gerenciador)
Define o gerenciador de layout que será utilizado pela frame.
void setLocationRelativeTo (Component componente)
Define a posição da frame relativamente a um componente. Se o componente for null,
a frame será centralizada no vídeo.
void setIconImage (Image imagem)
Define a imagem que será usada como ícone a frame.
void setResizable (boolean alteraTamanho)
Define se o tamanho da frame pode ser alterado ou não pelo usuário.
void setMinimumSize (Dimension tamanhoMínimo)
Define o tamanho mínimo que a frame pode ter.
void setJMenuBar (JMenuBar menu)
Define uma barra de menu para a frame.
void setUndecorated (boolean decorar)
Define se a barra de título e a borda da frame irão aparecer ou não.
28
JFrame
(javax.swing.JFrame)
Método setDefaultCloseOperation()
Define a operação que deverá ser executada quando o usuário fechar a frame.
O valor da operação pode ser um dos seguintes:
DO_NOTHING_ON_CLOSE (definido em WindowConstants): Não faz nada; o
programa deve controlar o fechamento através de um ouvinte de janela.
HIDE_ON_CLOSE (definido em WindowConstants): Automaticamente esconde a
frame.
DISPOSE_ON_CLOSE (definido em WindowConstants): Automaticamente
esconde e elimina a frame.
EXIT_ON_CLOSE (definido em JFrame): Encerra a aplicação usando o método
System.exit().
O valor default é HIDE_ON_CLOSE.
29
JFrame
(javax.swing.JFrame)
import java.awt.*;
import javax.swing.*;
public class ExemploJFrame extends JFrame {
public ExemploJFrame() {
setSize(300, 200);
setMinimumSize(new Dimension(300, 200));
//setResizable(false);
setLocationRelativeTo(null);
Toolkit tk = getToolkit();
Image img = tk.getImage("duke.jpg");
setIconImage(img);
setTitle("Exemplo de Janela");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ExemploJFrame();
}
}
30
JPanel
(javax.swing.JPanel)
Componente utilizado para agrupar
componentes em uma determinada
área da frame.
Alguns Construtores
JPanel ( )
JPanel ( LayoutManager
gerenciador )
31
Alguns Componentes Swing
JLabel
JCheckbox
JTextField
ButtonGroup
JTextArea
JRadioButton
JButton
JList
JToggleButton
JComboBox
32
JComponent
Construtor
( javax.swing.JComponent )
JComponent ( )
Alguns Métodos
void setBackground ( Color corDeFundo )
Define a cor de fundo do componente.
void setForeground ( Color corDeFrente )
Define a cor da "letra" do componente.
void setFont ( Fonte tipo )
Define a fonte do componente.
void setToolTipText ( String dica )
Define o texto de ajuda do componente.
33
JComponent
( javax.swing.JComponent )
void setOpaque ( boolean flag )
Define se o componente é opaco ou transparente.
void setBorder ( Border borda )
Define a borda do componente.
Graphics getGraphics ( )
Retorna o contexto gráfico do componente.
void paintComponent ( Graphics g )
Pinta o componente. Normalmente é sobreposto.
void setVisible ( boolean flag )
Define se o componente está visível ou não.
34
JLabel
( javax.swing.JLabel )
Construtores
JLabel ( )
JLabel ( Icon ícone )
JLabel ( Icon ícone, int alinhamento )
JLabel ( String texto )
JLabel ( String texto, Icon ícone, int alinhamento )
JLabel ( String texto, int alinhamento )
35
JLabel
( javax.swing.JLabel )
Alguns Métodos
String getText ( )
Retorna o texto do label.
void setHorizontalAlignment ( int alinhamento )
Define o alinhamento horizontal.
void setHorizontalTextPosition ( int posição )
Define a posição do texto em relação à imagem.
void setIcon ( Icon ícone )
Define uma imagem para o label
void setText ( String texto )
Define o texto do label
void setVerticalAlignment ( int alinhamento )
Define o alinhamento vertical.
void setVerticalTextPosition ( int posição )
Define a posição do texto em relação à imagem.
36
JTextField
( javax.swing.JTextField )
Alguns Construtores
JTextField ( )
JTextField ( int colunas )
JTextField ( String texto )
JTextField ( String texto, int colunas )
37
JTextField
( javax.swing.JTextField )
Alguns Métodos
void addActionListener ( ActionListener ouvinte )
Adiciona um ouvinte de ação ao componente.
String getSelectedText ( )
Retorna o texto selecionado.
int getSelectionEnd ( )
Retorna a posição final da seleção.
int getSelectionStart ( )
Retorna a posição inicial da seleção.
String getText ( )
String getText ( int posição, int tamanho )
Retorna o texto do componente.
bollean isEditable ( )
Informa se o componente pode ser editado.
38
JTextField
( javax.swing.JTextField )
void replaceSelection ( String texto )
Troca o texto selecionado.
void select ( int início, int fim )
Seleciona uma parte do texto.
void selectAll ( )
Seleciona todo o texto.
void setColumns ( int colunas )
Define a quantidade de colunas do componente.
void setEditable ( boolean b )
Define se o componente poderá ser editado.
void setHorizontalAlignment ( int alinhamento )
Define o alinhamento horizontal do texto.
void setText ( String texto )
Define o texto do componente.
39
JTextArea
( javax.swing.JTextArea )
Alguns Construtores
JTextArea ( )
JTextArea (int linhas, int colunas )
JTextArea ( String texto )
JTextArea ( String texto, int colunas, int linhas )
40
JTextArea
( javax.swing.JTextArea )
Alguns Métodos
void append ( String texto )
Adiciona um texto ao conteúdo do componente.
int getColumns ( )
Retorna o número de colunas do componente.
int getRows ( )
Retorna o número de linhas do componente.
int getLineCount ( )
Retorna o quantidade de linhas de texto contidas no componente.
void setLineWrap ( boolean quebra )
Define se há (true) ou não a quebra de linhas.
bollean setWrapStyleWord ( boolean estilo)
Define se as quebras de linha ocorrem entre as palavras (true).
41
JButton
( javax.swing.JButton )
Construtores
JButton ( )
JButton ( Icon ícone )
JButton ( String texto)
JButton ( String texto, Icon ícone)
42
JButton
( javax.swing.JButton )
Alguns Métodos
void addActionListener ( ActionListener ouvinte )
Adiciona um ouvinte de ação ao componente.
String getText ( )
Retorna o texto do componente.
void doClick ( )
Executa programaticamente um click no componente.
void setEnable ( boolean estado )
Define se o componente está ativado.
void setHorizontalAlignment ( int alinhamento )
Define o alinhamento horizontal do texto.
void setHorizontalPosition ( int posição )
Define a posição do texto em relação à imagem.
void setIcon ( Icon ícone )
Define uma imagem para o componente.
43
JButton
( javax.swing.JButton )
void setMnemonic ( char atalho )
Define uma tecla de atalho para o componente.
void setPressedIcon ( Icon ícone )
Define a imagem que será exibida quando o componente for pressionado.
void setRolloverEnabled ( boolean estado )
Define se o efeito rollover está ativado ou não.
void setRolloverIcon ( Icon ícone )
Define a imagem que será exibida quando o mouse passar por cima do
componente.
void setText ( String texto )
Define o texto do componente.
void setVerticalAlignment ( int alinhamento )
Define o alinhamento vertical do texto.
void setVerticalPosition ( int posição )
Define a posição do texto em relação à imagem.
44
Exemplo de Componente Swing
import javax.swing.*;
public class ExemploJButton extends JFrame {
JButton btn;
public ExemploJButton( ) {
setTitle ("Exemplo de Botão" );
setSize (300, 200);
btn = new JButton ("Botão de Teste" );
btn.setIcon ( new ImageIcon ("f:duke.jpg") );
btn.setRolloverIcon(new ImageIcon ("f:duke2.jpg"));
btn.setPressedIcon(new ImageIcon ("f:duke3.jpg"));
btn.setToolTipText ("Dica do componente" );
btn.setMnemonic ( 'B' );
add ( btn, "North" );
setVisible( true );
}
public static void main(String[] args) {
new ExemploJButton();
}
}
45
Exercício proposto
Crie a seguinte interface:
Agenda Pessoal
Nome:
Endereço:
Telefone:
Anterior
Próximo
Sair
46
Exercício Programa de Cálculos
Programa de Cálculos
Número:
Par / Ímpar
Primo
Fatorial
Perfeito
Resultado: ___________
47
Criação de um Painel com Borda de Título
JPanel p = new JPanel ( new GridLayout(linhas, colunas) );
TitledBorder titulo = BorderFactory.createTitledBorder("Título");
p.setBorder(titulo);
Outros métodos da classe BorderFactory para criação de bordas:
createLineBorder ( )
Borda de linha simples
createMatteBorder ( )
Borda larga preenchida com uma cor ou ícone repetido.
createEmptyBorder ( )
Borda vazia
createEtechedBorder ( )
Borda de linha com efeito 3D.
createBevelBorder( )
createLoweredBevelBorder ( )
createRaisedBevelBorder ( )
Bordas com efeito de superfície em relevo.
48
JCheckBox
( javax.swing.JCheckBox )
Alguns Construtores
JCheckBox ( )
JCheckBox ( String texto )
JCheckBox ( String texto, boolean
estado )
49
JCheckBox
( javax.swing.JCheckBox )
Alguns Métodos
boolean isSelected ( )
Retorna true se o componente estiver selecionado.
void setSelected ( boolean estado )
Define o estado do componente.
String getText ( )
Retorna o rótulo do componente.
void setText ( String texo )
Define o rótulo do componente.
void setActionCommand ( String texto)
Define o texto de ação de commando do componente.
void addAcitonListener ( ActionListener a )
void addItemListener ( ItemListener i )
50
Exemplo com JCheckBox
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class ExemploJCheckBox extends JFrame implements ActionListener {
JCheckBox chkProgramacao, chkBancoDados, chkAnalise;
JButton btn;
public ExemploJCheckBox() {
chkProgramacao = new JCheckBox("Programação");
chkBancoDados = new JCheckBox("Banco de Dados");
chkAnalise = new JCheckBox("Análise de Sistemas");
btn = new JButton("krikaki");
btn.addActionListener(this);
JPanel p = new JPanel(new GridLayout(3,1));
TitledBorder titulo = BorderFactory.createTitledBorder("Assunto");
p.setBorder(titulo);
p.add(chkProgramacao);
p.add(chkBancoDados);
p.add(chkAnalise);
add(p, "Center");
add(btn, "South");
pack();
setVisible(true);
}
51
Exemplo com JCheckBox
public void actionPerformed(ActionEvent evt) {
String resp = "";
boolean nada = true;
if (chkProgramacao.isSelected()) {
resp = chkProgramacao.getText();
nada = false;
}
if (chkBancoDados.isSelected()) {
resp += "\n" + chkBancoDados.getText();
nada = false;
}
if (chkAnalise.isSelected()) {
resp += "\n" + chkAnalise.getText();
nada = false;
}
if (nada) {
JOptionPane.showMessageDialog(null, "Nenhum Assunto");
} else
JOptionPane.showMessageDialog(null, resp);
}
public static void main(String[] args) {
new ExemploJCheckBox();
}
}
52
JRadioButton ( javax.swing.JRadioButton )
Alguns Construtores
JRadioButton ( )
JRadioButton ( String texto )
JRadioButton ( String texto, boolean
estado )
53
JRadioButton ( javax.swing.JRadioButton )
Alguns Métodos
boolean isSelected ( )
Retorna true se o componente estiver selecionado.
void setSelected ( boolean estado )
Define o estado do componente.
String getText ( )
Retorna o rótulo do componente.
void setText ( String texo )
Define o rótulo do componente.
void setActionCommand ( String texto)
Define o texto de ação de commando do componente.
void addAcitonListener ( ActionListener a )
void addItemListener ( ItemListener i )
54
ButtonGroup ( javax.swing.ButtonGroup )
Utilizado para agrupar JRadioButton's
Construtor
ButtonGroup ( )
Alguns Métodos
void add ( AbstractButton b )
Adiciona um botão no grupo.
void clearSelection ( )
Limpa a seleção no grupo.
String getSelection.getActionCommand ( )
Retorna o texto de ação de comando do componente
selecionado.
55
Exemplo com JRadioButton
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class ExemploJRadioButton extends JFrame implements ActionListener {
JRadioButton rbMasc, rbFem;
JButton btn;
ButtonGroup bgSexo;
public ExemploJRadioButton() {
rbMasc = new JRadioButton("Masc.", true);
rbMasc.setActionCommand("Masculino");
rbFem = new JRadioButton("Fem.");
rbFem.setActionCommand("Feminino");
bgSexo = new ButtonGroup();
bgSexo.add(rbMasc);
bgSexo.add(rbFem);
btn = new JButton("krikaki");
btn.addActionListener(this);
56
Exemplo com JRadioButton
JPanel p = new JPanel(new GridLayout(3,1));
TitledBorder titulo = BorderFactory.createTitledBorder("Sexo");
p.setBorder(titulo);
p.add(rbMasc);
p.add(rbFem);
add(p, "Center");
add(btn, "South");
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent evt) {
String resp = bgSexo.getSelection().getActionCommand();
JOptionPane.showMessageDialog(null, resp);
}
public static void main(String[] args) {
new ExemploJRadioButton();
}
}
57
JList (javax.swing.JList)
Alguns Construtores
JList ( )
JList ( Object[] elementos )
JList ( ListModel modelo )
Alguns Métodos
int getSelectedIndex ( )
retorna o índice do primeiro elemento selecionado.
int [ ] getSelectedIndices ( )
retorna um array com os índices de todos os elementos selecionados.
Object getSelectedValue ( )
Retorna o primeiro elemento selecionado.
Object [ ] getSelectedValues ( )
Retorna um array com todos os elementos selecionados.
void clearSelection ( )
Limpa a seleção dos elementos.
ListModel getModel ( )
Retorna o modelo de dados da lista.
void setListData ( Object [ ] elementos )
Cria um ListModel através do array e o aplica à lista.
58
JList (javax.swing.JList)
boolean isSelectedIndex ( int índice )
retorna true se o elemento estiver selecionado.
boolean isSelectionEmpty ( )
retorna true se não houver nenhum elemento selecionado.
void setVisibleRowCount (int qtd)
Define a quantidade de elementos exibidos.
void setSelectedIndex ( int índice )
Seleciona um elemento.
void setSelectedIndices ( int [] índices )
Seleciona todos os elementos indicados no array.
void setSelectionMode ( int modo)
Define o modo de seleção, modo pode ser:
ListSelectionModel.SINGLE_SELECTION
ListSelectionModel.SINGLE_INTERVAL_SELECTION
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
59
DefaultListModel
Construtor
(javax.swing.DefaultListModel)
DefaultListModel ( )
Alguns Métodos
void addElement ( Object elemento )
Adiciona um elemento ao final da lista.
void clear ( )
Remove todos os elementos da lista.
Object getElementAt ( int índice )
Retorna o elemento especificado.
int getSize ( )
Retorna o número de elementos na lista.
boolean isEmpty ( )
Retorna true se a lista estiver vazia.
Object remove ( int índice )
Remove um elemento de índice especificado.
60
Exemplo JList
import javax.swing.*;
import java.awt.event.*;
public class ExemploJList extends JFrame implements ActionListener {
JList lista;
DefaultListModel modelo;
JButton btn;
public ExemploJList() {
String dados[] = {"JavaSE", "JavaEE", "JavaME"};
modelo = new DefaultListModel();
for (String texto:dados) {
modelo.addElement(texto);
}
// No lugar do for, você pode usar:
// lista.setListData(dados);
lista = new JList(modelo);
lista.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
JScrollPane sp = new JScrollPane(lista);
add(sp, "Center");
61
Exemplo JList
btn = new JButton("krikaki");
btn.addActionListener(this);
add(btn, "South");
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent evt) {
Object selecionados[] = lista.getSelectedValues();
for (Object texto:selecionados) {
System.out.println(texto);
}
}
public static void main(String[] args) {
new ExemploJList();
}
}
62
JComboBox (javax.swing.JComboBox)
Alguns Construtores
JComboBox ( )
JComboBox ( Object[] elementos )
JComboBox ( ComboBoxModel modelo )
Alguns Métodos
int getSelectedIndex ( )
Retorna o índice do primeiro elemento selecionado.
Object getSelectedItem ( )
Retorna o primeiro elemento selecionado.
void addItem ( Object elemento )
Adiciona um item na lista.
void removeAllItems ( )
Remove todos os elementos da lista.
void setMaximumRowCount ( int qtdLinhas)
Define o número máximo de linhas a ser exibido.
void setSelectedIndex ( int índice )
Seleciona um determinado elemento.
ComboBoxModel getModel ( )
Retorna o modelo da lista.
63
DefaultComboBoxModel
(javax.swing.DefaultComboBoxModel)
Alguns Construtores
DefaultComboBoxModel ( )
DefaultComboBoxModel ( Object [] elementos)
Alguns Métodos
void addElement ( Object elemento )
Adiciona um elemento ao final da lista.
Object getElementAt ( int índice )
Retorna o elemento especificado.
int getSize ( )
Retorna o número de elementos na lista.
void removeAllElements ( )
Remove todos os elementos da lista.
Object removeElementAt ( int índice )
Remove um elemento de índice especificado.
64
Exemplo JComboBox
import javax.swing.*;
import java.awt.event.*;
public class ExemploJComboBox extends JFrame implements ActionListener {
JComboBox combo;
JButton btn;
public ExemploJComboBox() {
String dados[] = {"JavaSE", "JavaEE", "JavaME"};
combo = new JComboBox(dados);
combo.addItem("Todas");
combo.setSelectedIndex(3);
combo.setMaximumRowCount(2);
add(combo, "Center");
btn = new JButton("krikaki");
btn.addActionListener(this);
add(btn, "South");
65
Exemplo JComboBox
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent evt) {
Object selecionado = combo.getSelectedItem();
JOptionPane.showMessageDialog(null, selecionado);
}
public static void main(String[] args) {
new ExemploJComboBox();
}
}
66
JTable
Alguns Construtores
(javax.swing.JTable)
JTable ( )
JTable ( Object [] [] dados, Object [] nomeColunas )
JTable ( TableModel modelo )
Alguns Métodos
TableModel getModel ( )
Retorna o TableModel da tabela.
int getRowCount ( )
Retorna a quantidade de linhas no modelo da tabela.
int getSelectedColumn ( )
Retorna o índice da coluna selecionada, -1 se nenhuma coluna estiver selecionada.
int getSelectedRow ( )
Retorna o índice da linha selecionada, -1 se nenhuma linha estiver selecionada.
int [ ] getSelectedRows ( )
Retorna um array contendo os índices de todas as linha selecionadas.
int getSelectedRowCount ( )
Retorna a quantidade de linhas selecionadas.
Object getValueAt (int linha, int coluna )
Retorna o valor de uma célula.
void setValueAt ( Object valor, int linha, int coluna )
Define o valor de uma célula.
67
DefaultTableModel
(javax.swing.table.DefaultTableModel)
Alguns Construtores
DefaultTableModel ( )
DefaultTableModel ( int linhas, int colunas )
DefaultTableModel ( Object [] [] dados, Object [] nomeColunas )
Alguns Métodos
void addRow ( Object [] linha )
Adiciona uma linha no final do modelo da tabela.
int getColumnCount ( )
Retorna a quantidade de colunas do modelo da tabela.
int getRowCount ( )
Retorna a quantidade de linhas do modelo da tabela.
Object getValueAt (int linha, int coluna )
Retorna o valor de uma célula.
void insertRow ( int índice, Object [] linha )
Insere uma linha no modelo da tabela.
void removeRow ( int índice )
Remove uma linha no modelo da tabela.
void setValueAt ( Object valor, int linha, int coluna )
Define o valor de uma célula.
68
Exemplo JTable
import javax.swing.*;
import javax.swing.table.*;
import java.awt.event.*;
public class ExemploJTable extends JFrame implements ActionListener {
JTable tabela;
DefaultTableModel modelo;
JButton btn;
public ExemploJTable() {
String colunas[] = {"Nome", "Endereço", "Telefone"};
String dados[][] = { {"João", "Rua Tal", "4444"}, {"Maria", "Av Tal", "3333"} };
modelo = new DefaultTableModel(dados, colunas);
tabela = new JTable(modelo);
JScrollPane sp = new JScrollPane(tabela);
add(sp, "Center");
btn = new JButton("krikaki");
btn.addActionListener(this);
add(btn, "South");
pack();
setVisible(true);
}
69
Exemplo JTable
public void actionPerformed(ActionEvent evt) {
int linha = tabela.getSelectedRow();
int coluna = tabela.getSelectedColumn();
if (linha != -1 && coluna != -1) {
String dado = (String) tabela.getValueAt(linha, coluna);
JOptionPane.showMessageDialog(this, dado);
} else {
JOptionPane.showMessageDialog(this, "Nenhuma célula selecionada");
}
}
public static void main(String[] args) {
new ExemploJTable();
}
}
70
Exemplo JTable usando um ResultSet
import java.sql.*;
import javax.swing.*;
Classe Principal
onde a tabela é
criada
public class ExemploDBGrid extends JFrame {
JTable tabela;
DBGridModel modelo;
Connection con;
ResultSet rs;
public ExemploDBGrid( ) {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/uniban";
con = DriverManager.getConnection(url, "root", "admin");
Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = st.executeQuery("Select * from Cliente order by Nome");
} catch (Exception ex) {
ex.printStackTrace( );
}
71
Exemplo JTable usando um ResultSet
modelo = new DBGridModel(rs);
tabela = new JTable(modelo);
JScrollPane sp = new JScrollPane(tabela);
add(sp, "Center");
pack();
setVisible(true);
}
public static void main(String[] args) {
new ExemploDBGrid();
}
}
72
Exemplo JTable usando um ResultSet
import javax.swing.table.*;
import java.sql.*;
public class DBGridModel extends AbstractTableModel {
private ResultSet rs;
private ResultSetMetaData estrutura;
public DBGridModel(ResultSet rs) {
this.rs = rs;
try {
estrutura = rs.getMetaData();
rs.first();
} catch (SQLException e) {
e.printStackTrace();
}
}
public int getColumnCount() {
int qtdColunas = 0;
try {
qtdColunas = estrutura.getColumnCount();
} catch (SQLException e) {
e.printStackTrace();
}
return qtdColunas;
}
Classe que Implementa os
métodos obrigatórios
de AbstractTableModel
73
Exemplo JTable usando um ResultSet
public int getRowCount() {
int qtdLinhas = 0;
try {
rs.last();
qtdLinhas = rs.getRow();
} catch (SQLException e) {
e.printStackTrace();
}
return qtdLinhas;
}
public Object getValueAt(int linha, int coluna) {
Object valor = null;
try {
rs.absolute(linha + 1);
valor = rs.getObject(coluna + 1);
} catch (SQLException e) {
e.printStackTrace();
}
return valor;
}
}
74
Exemplo JTable ResultSet Atualizável
import java.sql.*;
import javax.swing.*;
import java.awt.event.*;
Classe Principal
onde a tabela é
criada
public class ExemploDBGridRW extends JFrame implements ActionListener {
JTable tabela;
DBGridModelRW modelo;
Connection con;
ResultSet rs;
JButton btnIncluir, btnExcluir;
public ExemploDBGridRW() {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/uniban";
con = DriverManager.getConnection(url, "root", "admin");
Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = st.executeQuery("Select * from Cliente");
} catch (Exception ex) {
ex.printStackTrace();
}
75
Exemplo JTable ResultSet Atualizável
modelo = new DBGridModelRW(rs);
tabela = new JTable(modelo);
JScrollPane sp = new JScrollPane(tabela);
add(sp, "Center");
btnIncluir = new JButton("Incluir");
btnIncluir.addActionListener(this);
btnExcluir = new JButton("Excluir");
btnExcluir.addActionListener(this);
JPanel pBtn = new JPanel();
pBtn.add(btnIncluir);
pBtn.add(btnExcluir);
add(pBtn, "South");
pack();
setVisible(true);
}
76
Exemplo JTable ResultSet Atualizável
}
public void actionPerformed(ActionEvent evt) {
Object btn = evt.getSource();
if (btn == btnIncluir) {
Object dados[] = new Object[5];
dados[0] = JOptionPane.showInputDialog("Qual o nome?");
dados[1] = JOptionPane.showInputDialog("Qual o sexo?");
dados[2] = JOptionPane.showInputDialog("Qual a data?");
dados[3] = JOptionPane.showInputDialog("Qual o estado?");
dados[4] = new Boolean(JOptionPane.showInputDialog("Está ativo?"));
modelo.addRow(dados);
} else if (btn == btnExcluir) {
if (tabela.getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(this, "Não há linhas selecionadas");
} else {
int linhas[] = tabela.getSelectedRows();
for (int cont = linhas.length - 1; cont >= 0; cont--) {
modelo.removeRow(linhas[cont]);
}
}
}
}
public static void main(String[] args) {
new ExemploDBGridRW();
}
77
Exemplo JTable ResultSet Atualizável
import javax.swing.table.*;
import java.sql.*;
Classe que Implementa os
métodos obrigatórios
de AbstractTableModel
public class DBGridModelRW extends AbstractTableModel {
private ResultSet rs;
private ResultSetMetaData estrutura;
public DBGridModelRW(ResultSet rs) {
this.rs = rs;
try {
estrutura = rs.getMetaData();
rs.first();
} catch (SQLException e) {
e.printStackTrace();
}
}
public int getColumnCount() {
int qtdColunas = 0;
try {
qtdColunas = estrutura.getColumnCount();
} catch (SQLException e) {
e.printStackTrace();
}
return qtdColunas;
}
78
Exemplo JTable ResultSet Atualizável
public int getRowCount() {
int qtdLinhas = 0;
int linhaCorrente = 1;
try {
linhaCorrente = rs.getRow();
rs.last();
qtdLinhas = rs.getRow();
if (linhaCorrente > 0) {
rs.absolute(linhaCorrente);
}
} catch (SQLException e) {
e.printStackTrace();
}
return qtdLinhas;
}
public Object getValueAt(int linha, int coluna) {
Object valor = null;
try {
rs.absolute(linha + 1);
valor = rs.getObject(coluna + 1);
} catch (SQLException e) {
e.printStackTrace();
}
return valor;
}
79
Exemplo JTable ResultSet Atualizável
public String getColumnName(int coluna) {
String nomeColuna = "";
try {
nomeColuna = estrutura.getColumnName(coluna + 1);
} catch (SQLException e) {
e.printStackTrace();
}
return nomeColuna;
}
public void setValueAt(Object value, int linha, int coluna) {
try {
rs.absolute(linha + 1);
rs.updateObject(coluna + 1, value);
rs.updateRow();
} catch (SQLException e) {
e.printStackTrace();
}
}
public boolean isCellEditable(int linha, int coluna) {
//Coluna Id não deve ser editável
if (coluna == 0) {
return false;
}
return true;
}
80
Exemplo JTable ResultSet Atualizável
}
public void addRow(Object[] linha) {
try {
rs.moveToInsertRow();
for (int cont = 0; cont < linha.length; cont++) {
rs.updateObject(cont + 2, linha[cont]);
}
rs.insertRow();
//Atualiza a tabela
fireTableDataChanged();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void removeRow(int linha) {
try {
rs.absolute(linha + 1);
rs.deleteRow();
//Atualiza a tabela
fireTableRowsDeleted(linha, linha);
} catch (SQLException e) {
e.printStackTrace();
}
}
81
Cores, Desenhos e Fontes
Color
Graphics
Font / FontMetrics
82
Color
(java.awt.Color)
Alguns Construtores
Color ( float r, float g, float b )
Color ( float r, float g, float b, float a )
Color ( int r, int g, int b )
Color ( int r, int g, int b, int a )
Valores entre
0.0f e 1.0f
Valores entre
0 e 255
Color ( int rgb )
Color ( int rgb, boolean hasalpha )
bits:
24-31=alpha; 16-23=red;
8-15=green; 0-7=blue
83
Color
(java.awt.Color)
Alguns Campos
black
blue
cyan
darkGray
0, 0, 0
0, 0, 255
0, 255, 255
64, 64, 64
gray
green
lightGray
magenta
128, 128, 128
0, 255, 0
192, 192, 192
255, 0, 255
orange
pink
red
white
255, 200, 0
255, 175, 175
255, 0, 0
255, 255, 255
yellow
255, 255, 0
84
Color
(java.awt.Color)
Alguns Métodos
Color brighter ( )
Cria uma nova cor mais clara.
Color darker ( )
Cria uma nova cor mais escura.
int getAlpha ( )
int getBlue ( )
int getGreen ( )
int getRed ( )
int getRGB ( )
Não possui
métodos set
Retorna o valor do campo determinado.
85
Font
(java.awt.Font)
Construtores
Font ( Map atributos )
Font ( String nome, int estilo, int tamanho )
Alguns Campos
BOLD
ITALIC
PLAIN
86
Font
(java.awt.Font)
Alguns Métodos
String getFontName ( )
Retorna o nome do font face.
String getName ( )
Retorna o nome lógico da fonte.
int getSize ( )
Retorna o tamanho em pontos da fonte.
int getStyle ( )
Retorna o estilo da fonte.
boolean isBold ( )
indica se o estilo da fonte é BOLD.
boolean isItalic ( )
indica se o estilo da fonte é ITALIC.
boolean isPlain ( )
indica se o estilo da fonte é PLAIN.
87
Font
Nomes Lógicos de Fontes
(java.awt.Font)
Dialog
DialogInput
Monospaced
SansSerif
Serif
Exemplo de definição de Font de um componente:
Font f1 = new Font ( "Serif", Font.BOLD, 14 );
Button btn = new Button ( "Oi tudo bem");
btn.setFont ( f1 );
88
Font
(java.awt.Font)
import java.awt.*;
import javax.swing.*;
Exemplo que mostra
como alterar a fonte
de um componente
public class FontComp extends JFrame {
public FontComp( ) {
setTitle("Tipo de Fonte do Componente");
Font f = new Font ("SansSerif", Font.BOLD+Font.ITALIC, 20);
JButton btn = new JButton ("krikaki");
btn.setFont ( f );
getContentPane().add ( btn, "North" );
pack();
setVisible(true);
}
}
89
Font
(java.awt.Font)
import java.awt.*;
Classe para obter as
class Fontes extends Frame {
fontes instaladas no
public Fontes(){
computador local
setTitle("Tipos de Fontes");
List lst = new List();
lst.setBackground(Color.lightGray);
String fontfamily[] = GraphicsEnvironment.
getLocalGraphicsEnvironment().
getAvailableFontFamilyNames();
for (int x=0; x< fontfamily.length; x++)
lst.add(fontfamily[x]);
add(lst);
pack();
setVisible(true);
}
}
90
Alteração de Look And Feel
import javax.swing.*;
public class TestaGUI extends JFrame {
public TestaGUI() {
add(new JButton("Oi tudo bem"), "North");
pack(); setVisible(true);
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(
"javax.swing.plaf.metal.MetalLookAndFeel");
// UIManager.getCrossPlatformLookAndFeelClassName()
//"com.sun.java.swing.plaf.motif.MotifLookAndFeel"
//"javax.swing.plaf.metal.MetalLookAndFeel"
//"com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
//"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
new TestaGUI();
}
}
91
Manipulação de Eventos
Eventos de Ação
Eventos de Janela
Eventos de Mouse
92
Eventos de Ação
Interface ActionListener
Método
actionPerformed
Não possui classe adaptadora
Eventos gerados por:
Button
List
MenuItem
TextField
93
Eventos de Ação
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
Ação de um
Botão 1
public class AcaoBtn1 extends JFrame {
JButton btn;
public AcaoBtn1 ( ) {
btn = new JButton ("Botão de Comando" );
btn.addActionListener ( new ActionListener( ) {
public void actionPerformed ( ActionEvent evt ) {
btn.setBackground ( Color.red );
}
} );
add ( btn, "North" );
setVisible( true );
}
public static void main (String args[ ]) {
new AcaoBtn1( );
}
}
94
Eventos de Ação
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
Ação de um
Botão 2
public class AcaoBtn2 extends JFrame implements ActionListener {
JButton btn;
public AcaoBtn2 ( ) {
btn = new JButton ("Botão de Comando" );
btn.addActionListener ( this ) ;
add( btn, "North" );
setVisible ( true );
}
public void actionPerformed ( ActionEvent evt ) {
Object source = evt.getSource( );
if ( source == btn )
btn.setBackground(Color.red);
}
public static void main (String args[ ]) {
new AcaoBtn2( );
}
}
95
Exercício
Implementar a funcionalidade do
programa de cálculos.
96
Eventos de Janela
Interface WindowListener
Métodos
windowClosing
windowOpened
windowIconified
windowDeiconified
windowClosed
windowActivated
windowDeactivated
Classe adaptadora: WindowAdapter
97
Eventos de Janela
import java.awt.*;
import java.awt.event.*;
Fechamento
import javax.swing.*;
de Janela
public class FechaFrame extends JFrame {
public FechaFrame ( ) {
setTitle ( "Oi Tudo Bem" );
setSize (300, 200);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener ( new WindowAdapter ( ) {
public void windowClosing ( WindowEvent e ) {
int resp = JOptionPane.showConfirmDialog(null, "Deseja sair ?");
if ( resp == JOptionPane.YES_OPTION )
System.exit ( 0 );
}
} );
setVisible ( true );
}
public static void main ( String args [ ] ) {
new FechaFrame( );
}
98
}
Eventos de Janela
import java.awt.event.*;
import javax.swing.*;
public class EventosJanela extends JFrame {
public EventosJanela() {
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowListener() {
public void windowClosing (WindowEvent e) {
int resp = JOptionPane.showConfirmDialog(null, "Deseja sair ?");
if (resp == JOptionPane.YES_OPTION)
System.exit(0);
}
public void windowOpened (WindowEvent arg0) {
System.out.println("Janela Aberta!");
}
public void windowClosed (WindowEvent arg0) {
System.out.println("Janela Fechada!");
}
99
Eventos de Janela
public void windowIconified (WindowEvent arg0) {
System.out.println("Janela Minimizada!");
}
public void windowDeiconified (WindowEvent arg0) {
System.out.println("Janela Restaurada!");
}
public void windowActivated (WindowEvent arg0) {
System.out.println("Janela Ativada!");
}
public void windowDeactivated (WindowEvent arg0) {
System.out.println("Janela Desativada!");
}
});
setVisible(true);
}
public static void main(String args[]) {
new EventosJanela();
}
}
100
JColorChooser
(javax.swing.JColorChooser)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DialogoCor extends JFrame implements ActionListener {
JButton btn;
public DialogoCor() {
btn = new JButton("krikaki");
btn.addActionListener(this);
getContentPane().add(btn, "West");
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
Color corAtual = btn.getBackground();
Color novaCor = JColorChooser.showDialog(DialogoCor.this,
"Escolha a cor", corAtual);
btn.setBackground(novaCor);
}
public static void main ( Stirng args [ ] ) {
new DialogoCor ( );
}
}
101
Eventos de Mouse
Interface MouseListener
Métodos
mousePressed
mouseReleased
mouseEntered
mouseExited
mouseClicked
Classe adaptadora: MouseAdapter
Interface MouseMotionListener
Métodos
mouseDragged
mouseMoved
Classe adaptadora: MouseMotionAdapter
102
Eventos de Mouse
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
Eventos de Mouse
no Botão
public class Botao extends JFrame {
JButton btn;
public Botao ( ) {
btn = new JButton ("Passe o mouse aqui !");
btn.addMouseListener ( new MouseAdapter ( ) {
public void mouseEntered ( MouseEvent evt ) {
btn.setBackground ( Color.yellow );
}
public void mouseExited ( MouseEvent evt ) {
btn.setBackground ( Color.red );
}
} );
add ( btn, "South" );
setVisible ( true );
}
public static void main ( Stirng args [ ] ) {
new Botao ( );
}
}
103
Eventos de Teclado
104
Exemplo: Várias Janelas
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Janelas extends JFrame implements ActionListener {
JFrame fr1, fr2;
JButton btnFr1, btnFr2, btnVolta1, btnVolta2;
public Janelas() {
setTitle("Janela Principal");
btnFr1 = new JButton("Chama Janela 1");
btnFr1.addActionListener(this);
btnFr2 = new JButton("Chama Janela 2");
btnFr2.addActionListener(this);
add(btnFr1, "North");
add(btnFr2, "South");
105
Exemplo: Várias Janelas
fr1 = new JFrame("Janela 1");
fr1.setBounds(100, 100, 300, 100);
fr1.getContentPane().setBackground(Color.yellow);
btnVolta1 = new JButton("Voltar");
fr1.add(btnVolta1, "South");
btnVolta1.addActionListener(this);
fr2 = new JFrame("Janela 2");
fr2.setBounds(200, 200, 300, 100);
fr2.getContentPane().setBackground(Color.green);
btnVolta2 = new JButton("Voltar");
fr2.add(btnVolta2, "South");
btnVolta2.addActionListener(this);
setSize(300, 200);
setVisible(true);
}
106
Exemplo: Várias Janelas
}
public void actionPerformed(ActionEvent evt) {
Object btn = evt.getSource();
if (btn == btnFr1) {
setVisible(false);
fr1.setVisible(true);
}
if (btn == btnFr2) {
setVisible(false);
fr2.setVisible(true);
}
if (btn == btnVolta1) {
setVisible(true);
fr1.setVisible(false);
}
if (btn == btnVolta2) {
setVisible(true);
fr2.setVisible(false);
}
}
public static void main(String[] args) {
new Janelas();
}
107
Exemplo: Várias Janelas
public void actionPerformed(ActionEvent evt) {
Object btn = evt.getSource();
if (btn == btnFr1) {
setVisible(false);
fr1.setVisible(true);
}
if (btn == btnFr2) {
setVisible(false);
fr2.setVisible(true);
}
if (btn == btnVolta1) {
setVisible(true);
fr1.setVisible(false);
}
if (btn == btnVolta2) {
setVisible(true);
fr2.setVisible(false);
}
108
Exemplo: Botão Personalizado
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Botão extends JButton {
String texto;
Font letra;
Color frente, fundo, realce;
public Botão(String texto, Font letra, Color frente, Color fundo, Color realce){
super(texto);
this.texto = texto;
this.letra = letra;
this.frente = frente;
this.fundo = fundo;
this.realce = realce;
109
Exemplo: Botão Personalizado
setFont(letra);
setForeground(frente);
setBackground(fundo);
addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent evt) {
setBackground(Botão.this.realce);
Font letra = Botão.this.letra;
letra = new Font(letra.getFamily(), letra.getStyle(), letra.getSize() + 5);
Botão.this.setFont(letra);
}
public void mouseExited(MouseEvent evt) {
setBackground(Botão.this.fundo);
Botão.this.setFont(Botão.this.letra);
}
});
}
}
110
Tipos de Cursor (java.awt.Cursor)
CROSSHAIR_CURSOR
Cursor em formato de cruz.
CUSTOM_CURSOR
Cursor personalizado.
DEFAULT_CURSOR
Cursor default
E_RESIZE
Redimensionamento Leste
HAND_CURSOR
Cursor em formato de mão
MOVE_CURSOR
Cursor de movimentação
N_RESIZE_CURSOR
Redimensionamento Norte
111
Tipos de Cursor (java.awt.Cursor)
NE_RESIZE_CURSOR
Redimensionamento Nordeste
NW_RESIZE_CURSOR
Redimensionamento Noroeste
S_RESIZE_CURSOR
Redimensionamento Sul
SE_RESIZE_CURSOR
Redimensionamento Sudeste
SW_RESIZE_CURSOR
Redimensionamento Sodoeste
TEXT_CURSOR
Texto
W_RESIZE_CURSOR
Redimensionamento Oeste
WAIT_CURSOR
Cursor de pausa
112
Exemplo de Tipos de Cursor
import java.awt.*;
import javax.swing.*;
public class Cursores extends JFrame {
public Cursores() {
setLayout(new FlowLayout());
JButton btn1 = new JButton("Cruz");
JButton btn2 = new JButton("Mão");
JButton btn3 = new JButton("Movimento");
JButton btn4 = new JButton("Texto");
JButton btn5 = new JButton("Espera");
btn1.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
btn2.setCursor(new Cursor(Cursor.HAND_CURSOR));
btn3.setCursor(new Cursor(Cursor.MOVE_CURSOR));
btn4.setCursor(new Cursor(Cursor.TEXT_CURSOR));
btn5.setCursor(new Cursor(Cursor.WAIT_CURSOR));
113
Exemplo de Tipos de Cursor
cp.add(btn1);
cp.add(btn2);
cp.add(btn3);
cp.add(btn4);
cp.add(btn5);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Cursores( );
}
}
114
Exemplo de Cursor Personalizado
import java.awt.*;
import javax.swing.*;
public class CursorPessoal extends JFrame {
JButton btn;
public CursorPessoal() {
Toolkit tk = Toolkit.getDefaultToolkit();
Image img = tk.getImage("imagem.gif");
setIconImage(img);
Cursor cursor = tk.createCustomCursor(img, new Point(20, 20), "Oi");
btn = new JButton("krikaki");
btn.setToolTipText("Oi tudo bem");
btn.setCursor(cursor);
add(btn, "North");
setBounds(100,100, 200, 300);
setVisible(true);
} public static void main(String[] args) {
new CursorPessoal();
}
}
115
Tratamento de Exceções
116
Tratamento de Exceções
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Excecao extends JFrame implements ActionListener {
JRadioButton divide, badCast, arrayBounds, nullPointer;
public Excecao(){
Container cp = getContentPane();
cp.setLayout(new GridLayout(7, 1));
ButtonGroup g = new ButtonGroup();
divide = new JRadioButton("Divisão por zero", false);
divide.addActionListener(this);
g.add(divide);
cp.add(divide);
117
Tratamento de Exceções
badCast = new JRadioButton("Cast Inválido", false);
badCast.addActionListener(this);
g.add(badCast);
cp.add(badCast);
arrayBounds = new JRadioButton("Índice inválido", false);
arrayBounds.addActionListener(this);
g.add(arrayBounds);
cp.add(arrayBounds);
nullPointer = new JRadioButton("Referência nula", false);
nullPointer.addActionListener(this);
g.add(nullPointer);
cp.add(nullPointer);
pack();
setVisible(true);
}
118
Tratamento de Exceções
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
try { if (source == divide) {
int a = 1, b;
b = 5 / (a - a);
} else if (source == badCast) {
Frame f = (Frame) evt.getSource();
} else if (source == arrayBounds) {
int a[] = new int[5];
int b = a[5];
} else {
Frame f = null; f.setSize(200, 300); }
} catch (Exception e) {
System.out.println("Exceção: " + e); }
}
public static void main ( String args [ ] ) {
Excecao oi = new Excecao();
}
119
Desenhando Formas Geométricas
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class Desenho extends JFrame {
PainelDesenhado painel;
public Desenho() {
painel = new PainelDesenhado();
add(painel);
setBounds(100, 100, 350, 250);
setVisible(true);
}
public static void main(String[] args) {
new Desenho();
}
class PainelDesenhado extends JPanel {
protected void paintComponent(Graphics g) {
//super.paintComponent(g);
g.setColor(new Color(0, 200, 0));
g.fillRect(0, 0, 300, 200);
g.setColor(Color.YELLOW);
int x[] = {150, 300, 150, 0, 150};
int y[] = {0, 100, 200, 100, 0};
g.fillPolygon(x, y, 5);
g.setColor(new Color(0, 0, 200));
g.fillOval(100, 50, 100, 100);
g.setColor(Color.WHITE);
for (int cont = 1; cont <= 10; cont++)
g.drawArc(100, cont + 80, 100, 50, 0, 180 );
}
}
}
120
Imagens
Como ler um arquivo de imagem:
Toolkit tk = Toolkit.getDefaultToolkit ( ) ;
// Arquivo Local:
Image img = tk.getImage (“nomearq.gif”);
// Imagem na Internet:
URL u = new URL ("http://www.algumlugar.com/umaImg.gif");
Image img = tk.getImage ( u );
Como alterar o ícone de uma Frame:
setIconImage ( img );
121
Imagens
Como carregar uma imagem através de um
observador de imagens (ImageObserver):
Toolkit tk = Toolkit.getDefaultToolkit ( );
Image img = tk.getImage ("nomearq.gif");
MediaTracker mt = new MediaTracker (this);
mt.addImage (img, 0);
try {
mt.waitForID ( 0 );
} catch (InterruptedException e) { }
122
Imagens
(exemplo)
import java.awt.*;
public class TestPanelImg extends Frame {
public TestPanelImg(String nomearq) {
setTitle ("Teste de Imagem");
Panel p1 = new PanelImg (nomearq);
add(p1);
setBounds(100, 100, 200, 200);
setVisible(true);
}
public static void main (String args[ ] ) {
TestPanelImg oi = new TestPanelImg(args[0]);
}
}
123
Imagens
(exemplo)
class PanelImg extends Panel {
Image img;
public PanelImg (String nomearq) {
img = Toolkit.getDefaultToolkit( ).getImage(nomearq);
MediaTracker mt = new MediaTracker(this);
mt.addImage (img, 0); // Carrega a imagem
try {
mt.waitForID (0); // Aguarda pelo carregamento
} catch ( InterruptedException e ) { }
}
public void paint ( Graphics g ) {
super.paint ( g );
Dimension d = getSize();
int largura = d.width;
int altura = d.height;
g.drawImage(img, 0, 0, largura, altura, this);
}
}
124
Imagens
import java.awt.*;
import java.io.File;
(exemplo 2)
import java.awt.event.*;
import javax.swing.*;
public class ViewImageFile extends JFrame implements ActionListener {
PanelImg pImage;
JButton btnFile;
public ViewImageFile() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Visualizador de Imagens");
pImage = new PanelImg(null);
btnFile = new JButton("Carrega Arquivo");
btnFile.addActionListener(this);
Container cp = getContentPane();
cp.add(pImage, BorderLayout.CENTER);
cp.add(btnFile, BorderLayout.SOUTH);
setBounds(100, 100, 300, 300);
setVisible(true);
}
125
Imagens
(exemplo 2)
public void actionPerformed(ActionEvent e) {
File arquivo = null;
JFileChooser fc = new JFileChooser();
if (fc.showOpenDialog(this) == 0) {
arquivo = fc.getSelectedFile();
String nomearq = arquivo.getAbsolutePath();
pImage.load(nomearq);
}
}
public static void main(String[] args) {
new ViewImageFile();
}
126
Imagens
(exemplo 2)
class PanelImg extends Panel {
Image img;
public PanelImg (String nomearq) {
if (nomearq != null)
load(nomearq);
}
public void load(String nomearq) {
img = Toolkit.getDefaultToolkit().getImage(nomearq);
MediaTracker mt = new MediaTracker(this);
mt.addImage (img, 0);
// Carrega a imagem
try {
mt.waitForID (0); // Aguarda pelo carregamento
} catch ( InterruptedException e ) { }
}
127
Imagens
(exemplo 2)
public void paint ( Graphics g ) {
super.paint ( g );
Dimension d = getSize();
int largura = d.width;
int altura = d.height;
g.drawImage(img, 0, 0, largura, altura, this);
}
}
}
128
Menus
Barra de Menus
JMenu
(javax.swing.JMenuItem)
JMenuItem
Separadores
(javax.swing.JMenu)
Itens de Menus
JMenuBar
Menus
(javax.swing.JMenuBar)
addSeparator ( )
Adição da Barra de Menus à Frame
JFrame.setJMenuBar ( )
129
Menus
Abilitar e Desabilitar Itens de Menus
Ícones em Itens de Menus
setIcon ( )
JMenuItem item =
new JMenuItem ("Cut", new ImageIcon ( "cut.gif" );
Mnemônicos em Itens de Menus
setEnable ( )
setMnemonic ( )
item.setMnemonic ( 'C' );
Teclas de Atalho em Itens de Menus
setAccelerator ( )
item.setAccelerator ( KeyStroke.getKeyStroke (
KeyEvent.VK_C, InputEvent.CTRL_MASK) );
130
Menus
Caixas de Seleção em Itens de Meuns
JCheckBoxMenuItem (javax.swing.JCheckBoxMenuItem)
JCheckBoxMenuItem item = new JCheckBoxMeunItem ("Ready" );
menu.add ( item );
Botões de Rádio em Itens de Menus
ButtonGroup (javax.swing.ButtonGroup)
JRadioButtonMenuItem (javax.swing.JRadioButtonMenuItem)
ButtonGroup bg = new ButtonGroup ( );
JRadioButtonMenuItem mitem = new JRadioButtonMenuItem ("Masc" );
mitem.setSelected ( true );
JRadioButtonMenuItem fitem = new JRadioButtonMenuItem ("Fem" );
bg.add ( mitem );
bg.add ( fitem );
menu.add ( mitem );
menu.add ( fitem );
131
Menus
(javax.swing.JMenu)
class MeuMenu extends JFrame implements ActionListener {
public MeuMenu ( ) {
JMenuBar barraMenu = new JMenuBar ( );
JMenu editMenu = new JMenu ("Edit" );
JMenuItem item1 = new JMenuItem ("Paste" );
item1.addActionListener ( this );
editMenu.add ( item1 );
editMenu.addSeparator ( );
JMenuItem item2 = new JMenuItem ("Copy" );
item2.addActionListener ( this );
Importar:
editMenu.add ( item2 );
java.awt.*
barraMenu.add ( editMenu );
java.awt.event.*
setJMenuBar ( barraMenu );
javax.swing.*
show( );
}
public void actionPerformed ( ActionEvent evt ) {
}
}
132
Menus
Menus Flutuantes (pop-up)
JPopupMenu (javax.swing.JPopupMenu)
btn = new JButton ("Oi tudo bem");
getContentPane().add (btn, "South");
itemAzul = new JMenuItem ( "Azul" );
itemAzul.addActionListener ( this );
itemVermelho = new JMenuItem ( "Vermelho" );
itemVermelho.addActionListener ( this );
popup = new JPopupMenu();
popup.add ( itemAzul );
popup.add ( itemVermelho );
btn.addMouseListener ( new MouseAdapter ( ) {
public void mouseReleased ( MouseEvent evt ) {
if ( evt.isPopupTrigger() )
popup.show ( evt.getComponent(),
evt.getX(), evt.getY() );
}
} );
133