DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
Java Swing Hierarquia Window
1. Universidade Presbiteriana Mackenzie
Aula
3:
Hierarquia
Window
Prof. Ms. Daniel Arndt Alves
Faculdade
de
Computação
e
Informá=ca
Computação e Informática
Faculdade de
Linguagem
de
Programação
II
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
1
2. Tópicos
da
Aula
• Hierarquia
Window
dentro
do
pacote
javax.swing
• Layouts
do
Swing
• Bordas
• Tratamento
de
eventos
• Manipulação
de
look-‐and-‐feel
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
2
3. Hierarquia
Window
Além da classe JPanel, já vista nas aulas
anteriores, o pacote Swing fornece uma série
de alternativas para containers.
Uma destas alternativas inicia-se com a
hierarquia da classe Window, definida no
pacote java.awt.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
3
5. Classe
JFrame
A classe JFrame é muito similar à classe Frame
do AWT. Porém, alguns pontos são exclusivos
à classe JFrame:
• os componentes não são inseridos diretamente
com add
• a alteração não é feita diretamente só com
setLayout
• pode-se definir comportamentos-padrão para
evento de fechamento da janela
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
5
7. Código
do
Exemplo
public class FrameTester {
public static void main (String args[]) {
JFrame f = new JFrame ("JFrame Example");
Container c = f.getContentPane();
c.setLayout (new FlowLayout());
for (int i = 0; i < 5; i++) {
c.add (new JButton ("No"));
c.add (new Button ("Batter"));
}
c.add (new JLabel ("Swing"));
f.setSize (300, 200);
f.show();
}
}
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
7
8. Evento
de
fechamento
de
janela
Além do tradicional tratamento de evento de
fechamento de janela do AWT, o pacote Swing
disponibiliza outras possibilidades de
tratamento através do método
setDefaultCloseOperation(int operação)
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
8
9. Evento
de
fechamento
de
janela
O parâmetro operação pode ser uma das seguintes constantes:
• DO_NOTHING_ON_CLOSE: comportamento do frame
do AWT
• HIDE_ON_CLOSE: comportamento padrão. A janela é
apenas escondida.
• DISPOSE_ON_CLOSE: libera todo o conteúdo da janela.
• EXIT_ON_CLOSE: força chamada de System.exit()
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
9
10. Layout
em
Swing
Além dos tradicionais gerenciadores de layout do
AWT, o pacote javax.swing disponibiliza
4 gerenciadores adicionais:
• ScrollPaneLayout
• ViewportLayout
• BoxLayout
• OverlayLayout
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
10
11. ScrollPaneLayout
É o gerenciador de layout utilizado pelo
JScrollPane. Não há necessidade de se
instanciar uma classe com este gerenciador
nem associá-la a um JScrollPane, pois isto
já é feito automaticamente.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
11
12. ViewportLayout
É o gerenciador de layout usado pelo
componente JViewport.
Assim como no ScrollPaneLayout, o
gerenciador ViewportLayout já está
automaticamente associado com um objeto
JViewPort.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
12
13. BoxLayout
É um gerenciador que permite arranjar os
componentes ao longo dos eixos x ou y.
O construtor do BoxLayout tem a seguinte
forma:
BoxLayout(container, eixo)
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
13
14. Código
do
Exemplo
class BoxLayoutTest extends JPanel {
BoxLayoutTest() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
TextField textField = new TextField();
TextArea textArea = new TextArea(4, 20);
JButton button = new JButton("Tiger", new ImageIcon("SmallTiger.gif"));
add(new JLabel("TextField:"));
add(textField);
add(new JLabel("TextArea:"));
add(textArea);
add(new JLabel("Button:"));
add(button);
}
}
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
14
16. Bordas
O pacote javax.swing.border consiste de
várias classes para desenhar bordas
envolvendo componentes.
Todas estas classes implementam a interface
Border.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
16
17. Interface
Border
A interface Border consiste de três métodos:
• public Insets getBorderInsets(Component c):
define a área útil para desenhar a borda
• public boolean isBorderOpaque(): define se a
borda é opaca ou transparente
• public void paintBorder(Component c, Graphics
g, int x, int y, int width, int height): define como
desenhar a borda.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
17
18. Implementações
pré-‐definidas
de
bordas
O p a c o t e j a v a x . s w i n g . b o r d e r
disponibiliza 9 classes que implementam a
interface Border:
AbstractBorder BevelBorder
CompoundBorder EmptyBorder
EtchedBorder LineBorder
MatteBorder SoftBevelBorder
TitleBorder
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
18
19. Definição
de
bordas
Caso as bordas anteriores não sejam suficientes
para atender às necessidades, basta
implementar os métodos da interface Border,
mostrados anteriormente.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
19
20. Instanciação
de
bordas
Bordas podem ser criadas invocando-se o
construtor de uma das classes anteriores
(exceto AbstractBorder) ou chamando os
métodos estáticos da classe BorderFactory
(pacote javax.swing).
Para se atribuir uma borda a um componente/
c o n t a i n e r , u t i l i z a - s e o m é t o d o
setBorder(borda).
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
20
22. Bordas
(Exemplo)
public class BorderPanel extends JPanel {
class MyBorder implements Border {
Color color;
public MyBorder (Color c) {
color = c;
}
public void paintBorder (Component c, Graphics g, int x, int y,
int width, int height) {
Insets insets = getBorderInsets(c);
g.setColor (color);
g.fillRect (x, y, 2, height);
g.fillRect (x, y, width, 2);
g.setColor (color.darker());
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
22
23. Bordas
(Exemplo)
g.fillRect (x+width-insets.right, y, 2, height);
g.fillRect (x, y+height-insets.bottom, width, 2);
}
public boolean isBorderOpaque() {
return false;
}
public Insets getBorderInsets(Component c) {
return new Insets (2, 2, 2, 2);
}
}
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
23
24. Bordas
(Exemplo)
public BorderPanel() {
setLayout (new GridLayout (4, 3, 5, 5));
JButton b = new JButton("Empty");
b.setBorder (new EmptyBorder (1,1,1,1));
add(b);
b = new JButton ("Etched");
b.setBorder (new EtchedBorder ());
add(b);
b = new JButton ("ColorizedEtched");
b.setBorder (new EtchedBorder (Color.red, Color.green));
add(b);
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
24
25. Bordas
(Exemplo)
b = new JButton ("Titled/Line");
b.setBorder(new TitledBorder (
new TitledBorder(
LineBorder.createGrayLineBorder(),"Hello"),
"World",
TitledBorder.RIGHT,
TitledBorder.BOTTOM));
add(b);
b = new JButton ("Bevel Up");
b.setBorder(new BevelBorder(BevelBorder.RAISED));
add(b);
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
25
26. Bordas
(Exemplo)
b = new JButton ("Bevel Down");
b.setBorder(new BevelBorder(BevelBorder.LOWERED));
add(b);
b = new JButton ("Soft Bevel Up");
b.setBorder(new SoftBevelBorder(SoftBevelBorder.RAISED));
add(b);
b = new JButton ("Soft Bevel Down");
b.setBorder(new SoftBevelBorder(SoftBevelBorder.LOWERED));
add(b);
b = new JButton ("Matte");
b.setBorder(new MatteBorder(5, 10, 5, 10, Color.red));
add(b);
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
26
27. Bordas
(Exemplo)
b = new JButton ("Matte Icon");
Icon icon = new ImageIcon ("SmallTiger.gif");
b.setBorder(new MatteBorder(10, 10, 10, 10, icon));
add(b);
b = new JButton ("ColorizedBezel");
b.setBorder(new BevelBorder(BevelBorder.RAISED,
Color.red, Color.pink));
add(b);
b = new JButton ("My/Compound");
b.setBorder(new CompoundBorder(new MyBorder(Color.red),
new CompoundBorder (new MyBorder(Color.green),
new MyBorder(Color.blue))));
add(b);
}
}
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
27
28. Eventos
Como grande parte dos elementos de interface do
swing é derivada da classe básica
J C o m p o n e n t ( d e r i v a d a d e
java.awt.Container), os métodos de
gerenciamento de evento definidos no AWT
podem ser aplicados neste contexto, embora a
maioria das construções utilize classes e
interfaces (listeners) definidos dentro do
pacote javax.swing
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
28
29. Eventos
Para tratar convenientemente os eventos dentro
do swing, existe a necessidade de se conhecer:
• tipos de objetos instanciados nos eventos
• interfaces do tipo listener para implementação
• fontes de eventos e interfaces utilizadas por
estas fontes
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
29
31. Exemplo
de
objetos
de
evento
JMenu file = new JMenu ("File");
file.addMenuListener (new MenuListener() {
public void menuSelected (MenuEvent e) {
System.out.println ("Selected");
}
public void menuDeselected (MenuEvent e) {
System.out.println ("Deselected");
}
public void menuCanceled (MenuEvent e) {
System.out.println ("Canceled");
}
});
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
31
32. Interfaces
do
apo
listener
O pacote swing disponibiliza várias interfaces
para tratamento de eventos.
Estas interfaces estão localizadas no pacote
javax.swing.event.
Grande parte das implementações em Swing
utilizam os métodos destas interfaces para
tratamento dos eventos.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
32
41. Fontes
de
eventos
Cada uma das interfaces anteriores está relacionada
com eventos de uma ou mais classe de
componentes.
Por exemplo, a interface MenuListener está
relacionada com JMenu. Assim, quando a fonte
do evento é um objeto desta classe, os métodos
implementados da interface são acionados.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
41
42. Implementação
de
interface
(exemplo)
JMenu file = new JMenu ("File");
file.addMenuListener (new MenuListener() {
public void menuSelected (MenuEvent e) {
System.out.println ("Selected");
}
public void menuDeselected (MenuEvent e) {
System.out.println ("Deselected");
}
public void menuCanceled (MenuEvent e) {
System.out.println ("Canceled");
}
});
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
42
43. Arquitetura
MVC
Além do tratamento básico de eventos anterior, o
pacote Java Swing permite, adicionalmente,
um controle maior sobre os componentes
utilizando a arquitetura Model/View/Controller
(MVC).
Por exemplo, eventos podem ser controlados de
forma complexa através de elementos
chamados chamados adaptadores.
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
43
44. Look-‐and-‐feel
Utilizando a estrutura modular da arquitetura
MVC, componentes Swing podem simular a
aparência de vários sistemas gráficos.
Esta funcionalidade com componentes Swing é
chamada de look-and-feel.
Os pacotes que disponibilizam classes de
manipulação de look-and-feel são identificados
por javax.swing.plaf.*;
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
44
45. Como
alterar
a
aparência
?
try{
UIManager.setLookAndFeel("javax.swing.plaf.Metal.MetalL
ookandFeel");
}
catch(java.lang.ClassNotFoundException e){...}
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
45
46. Como
pegar
o
look-‐and-‐feel
do
sistema
do
usuário
?
try{
UIManager.setLookAndFeel(
UIManager.getCrossPlataformLookAndFellClassName());
}
catch(java.lang.ClassNotFoundException e){...}
Daniel
Arndt
Alves
Java
Swing:
Hierarquia
Window
46