Interface Gráfica Java

Propaganda
Objetivos
• Introduzir o conceito de interfaces gráficas
• Apresentar Swing e AWT
Desenvolvimento de Interfaces Gráficas
• Definir o conceito para containers gráficos
• Apresentar os principais componentes existentes
para a construção de uma interface gráfica
Ms
Ms.. Christien L. Rachid
FUPAC
E-Mail
Mail:: [email protected]
Swing
Swing – Características
• Swing – Conjunto de componentes
direcionados para aplicações baseadas em
formulários
• Componentes leves
– Light-weight
• Arquitetura dos componentes
• Swing é parte da JFC (Java Foundation
Classes)
3
– MVC
4
Containers
Top Level Container
• Janela,
Janela, Diálogo ou Applet
public class SwingApplication {
...
public static void main(String[] args
args)
) {
...
JFrame frame = new JFrame
JFrame("
("SwingApplication
SwingApplication");
");
// cria componentes em uma variável contents
frame.getContentPane().add(contents,
frame.getContentPane
().add(contents,
BorderLayout.CENTER);
BorderLayout.CENTER
);
//Finish setting up the frame, and show it.
frame.addWindowListener(...);
frame.addWindowListener
(...);
frame.pack();
frame.pack
();
frame.setVisible(true);
frame.setVisible
(true);
}
}
– Jframe, JDialog ou JApplet
• JFrame:
JFrame: janelas primárias
• JDialog
JDialog:: janelas secundárias
• JApplet:
JApplet: painel em um área do browser
5
6
JFrame
JFrame
public class FrameTester {
public static void main (String args[])
args[]) {
JFrame f = new JFrame ("
("JFrame
JFrame
Example");
Container c = f.getContentPane();
f.getContentPane();
c.setLayout (new FlowLayout());
FlowLayout());
for (int
(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.setVisible(true);
f.setVisible
(true);
}
}
7
8
JTabbedPane
JTabbedPane
public class TabbedPanel extends JPanel {
String tabs[] = {"One", "Two", "Three",
"Four"};
public JTabbedPane tabbedPane = new
JTabbedPane();
JTabbedPane
();
public TabbedPanel()
TabbedPanel() {
setLayout (new BorderLayout
BorderLayout());
());
for (int
(int i=0;i<tabs.length;i
=0;i<tabs.length;i++)
++)
tabbedPane.addTab (tabs[i
(tabs[i], null,
createPane (tabs[i
(tabs[i]));
tabbedPane.setSelectedIndex(0);
tabbedPane.setSelectedIndex
(0);
add (tabbedPane
(tabbedPane,
,
BorderLayout.CENTER);
BorderLayout.CENTER
);
}
9
10
JTabbedPane
JSplitPane
JPanel createPane
createPane(String
(String s) {
JPanel p = new JPanel
JPanel();
();
p.add(new
p.add
(new JLabel
JLabel(s));
(s));
return p;
}
}
11
12
JScrollPane
JScrollPane
public class ScrollPanel extends JPanel {
public ScrollPanel()
ScrollPanel() {
setLayout(new
setLayout
(new BorderLayout());
BorderLayout());
Icon bigTiger = new
ImageIcon("BigTiger.gif");
ImageIcon
("BigTiger.gif");
JLabel tigerLabel = new
JLabel(
JLabel
(bigTiger);
bigTiger);
JScrollPane scrollPane =
new JScrollPane(
JScrollPane(tigerLabel);
tigerLabel);
add(scrollPane
add(
scrollPane,
, BorderLayout.CENTER);
BorderLayout.CENTER);
}
}
13
14
Gerenciadores de Layout
Gerenciadores de Layout
• Em inglês (Layout Manager)
• Layout Managers calculam coordenadas
• Definem como os componentes gráficos são dispostos em
um container AWT/SWING.
automaticamente, baseados em regras
• Os gerenciadores de layout garantem a consistência visual
em diferentes resoluções de tela e diferentes plataformas.
• Eles controlam a posição, características
o comportamento dos componentes nos
contêineres
15
16
e
Tipos de Gerenciadores de Layout
Gerenciadores de Layout
• Nulo (Posicionamento absoluto)
absoluto)
• Todo container possui um gerenciador de layout
a ele associado.
associado.
• FlowLayout
• Um programador pode também criar novos
gerenciadores de layout ((para
para aplicações com
necessidades especiais
especiais).
).
• BorderLayout
• CardLayout
• GridLayout
• GridBagLayout
• Outros (personalizados)
personalizados)
17
18
Grid Layout
Flow Layout
• Componentes são colocados em uma matriz
com um numero específico de colunas ou
linhas..
linhas
• À medida que os componentes são acrescentados
no container, eles são posicionados em uma linha
da esquerda para a direita.
direita.
• O tamanho de cada componente do container é
calculado através do seu tamanho preferido
(getPreferedSize)
getPreferedSize).
• Uma nova linha é automaticamente criada quando
falta espaço na linha corrente.
corrente.
19
• Cada componente ocupa exatamente uma
célula da matriz
matriz..
• As células são preenchidas da esquerda para
direita e do topo para a base.
base.
20
Border Layout
Swing Widgets
• Define 5 áreas prépré-definidas onde um
componente ou um grupo de componentes
podem ser colocados
colocados:: North, South, East,
West, e Center
Center..
• São as classes de componentes Swing.
• Possuem como base a classe JComponent
• A partir delas foram criadas inúmeras
classes descendentes para construção de
interfaces gráficas.
• O programador especifica a área na qual
um componente deve aparecer
aparecer..
21
22
Tooltips
Tooltips
public class TooltipPanel extends
JPanel {
public TooltipPanel
TooltipPanel()
() {
JButton myButton = new
JButton("Hello");
JButton
("Hello");
myButton.setToolTipText
("World");
add(myButton
add(
myButton);
);
}
}
23
24
Icon e ImageIcon
Icon e ImageIcon
• ImageIcon é usado pela Swing, ao invés de
Image (AWT), para desenho de imagens em
componentes
• ImageIcon
– Implementação da interface Icon que cria um ícone a
partir de uma imagem
– Icon tinyPicture = new ImageIcon(“Imagem.gif");
• Motivos:
Motivos:
– Image carrega assincronamente
– Image não é serializável
25
26
JButton
JLabel
27
28
JCheckBox, JRadioButton, JToggleButton
JButton
public class ButtonPanel extends JPanel {
public ButtonPanel()
ButtonPanel() {
Icon tigerIcon = new
ImageIcon("SmallTiger.gif");
ImageIcon
("SmallTiger.gif");
JButton myButton = new JButton("Tiger",
JButton("Tiger",
tigerIcon);
tigerIcon
);
add(myButton
add(
myButton);
);
}
}
29
30
ButtonGroup
JCheckBox,, JRadioButton,
JCheckBox
JRadioButton, JToggleButton
• Possibilita o agrupamento de botões
public class ToggleButtonPanel extends
JPanel {
public ToggleButtonPanel()
ToggleButtonPanel() {
// Set the layout to a GridLayout
setLayout(new
setLayout
(new GridLayout(4,1,
GridLayout(4,1, 10, 10));
add (new JToggleButton ("Fe"));
add (new JToggleButton ("
("Fi
Fi"));
"));
add (new JToggleButton ("
("Fo
Fo"));
"));
add (new JToggleButton ("
("Fum
Fum"));
"));
}
}
31
• Qualquer descendente de AbstractButton pode
ser agrupado
• Muito utilizado em conjunto com objetos do tipo
JToggleButton e JRadioButton
32
Componentes JText*
ButtonGroup
• Fornecem funcionalidades de um editor de
textos simples
ButtonGroup group = new ButtonGroup();
–
–
–
–
–
–
–
group.add(new JRadioButton(“Teste 1”));
group.add(new JRadioButton(“Teste 2”);
33
35
copy(), cut(), paste()
getSelectedText()
setSelectionStart(), setSelectionEnd()
selectAll(), replaceSelection()
getText(), setText()
setEditable()
setCaretPosition()
34
JTextField and JTextArea
JTextPane
// Instantiate a new TextField
JTextField tf = new JTextField();
// Instantiate a new TextArea
JTextArea ta = new JTextArea();
// Initialize the text of each
tf.setText("TextField");
ta.setText("JTextArea\
ta.setText("JTextArea
\n Allows Multiple
Lines");
add(tf);
add(new JScrollPane(ta));
• Editor de textos mais
completo com
formatação de textos,
quebra de palavras
(word wrap) e exibição
de imagens
36
JPasswordField
JTextPane
StyleConstants.setFontFamily(attr,
StyleConstants.setFontFamily(
attr,
"Serif");
StyleConstants.setFontSize(
StyleConstants.setFontSize
(attr,
attr, 18);
StyleConstants.setBold(
StyleConstants.setBold
(attr,
attr, true);
textPane.setCharacterAttributes(
textPane.setCharacterAttributes
(attr,
attr,
false);
add(textField
add(
textField,
, BorderLayout.NORTH
BorderLayout.NORTH);
);
add(new JScrollPane(
JScrollPane(textArea),
textArea),
BorderLayout.CENTER);
BorderLayout.CENTER
);
add(new JScrollPane(
JScrollPane(textPane),
textPane),
BorderLayout.SOUTH);
BorderLayout.SOUTH
);
}
}
37
38
JFormattedTextField
JPasswordField
class PasswordPanel extends JPanel {
PasswordPanel() {
JPasswordField pass1 = new
JPasswordField(20);
JPasswordField pass2 = new
JPasswordField(20);
pass2.setEchoChar ('?');
add(pass1);
add(pass2);
}
}
39
40
JSlider
JFormattedTextField
this.add(new JLabel("Máscara de Data:"));
DateFormat dateFormat = DateFormat.getDateInstance(
DateFormat.SHORT);
JFormattedTextField data = new
JFormattedTextField(dateFormat);
data.setValue(new Date());
41
42
JComboBox
JComboBox
public class ComboPanel extends JPanel {
String choices[] = { "Mercury", "Venus", "Earth",
"Mars", "Jupiter", "Saturn",
"Uranus","Neptune",
"Uranus","Neptune
",
"Pluto"};
public ComboPanel
ComboPanel()
() {
JComboBox combo1 = new JComboBox
JComboBox();
();
JComboBox combo2 = new JComboBox
JComboBox();
();
for (int
(int i=0;i<
=0;i<choices.length;i
choices.length;i++)
++) {
combo1.addItem (choices[i
(choices[i]);
combo2.addItem (choices[i
(choices[i]);
}
combo2.setEditable(true);
combo2.setSelectedItem("X");
combo2.setMaximumRowCount(4);
add(combo1);
add(combo2);
}
}
43
44
JMenu
45
JPopupMenu
46
JPopupMenu
JList
public class PopupPanel extends JPanel {
JPopupMenu popup = new JPopupMenu ();
public PopupPanel()
PopupPanel() {
JMenuItem item;
popup.add (item = new JMenuItem
("Cut"));
popup.add (item = new JMenuItem
("Copy"));
popup.add (item = new JMenuItem
("Paste"));
popup.addSeparator();
popup.addSeparator
();
popup.add (item = new JMenuItem
("Select All"));
47
48
JList
JTable
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);
}
}
49
50
Manipulação de Eventos
Componentes Avançados Swing
Eventos: O que são?
• JTree e JTable são exemplos de componentes
mais avançados SWING.
• São ações dos usuários na interface gráfica.
• Tabelas e Árvores:
Árvores:
– Quando uma ação é executada, eventos
são gerados.
– http://www.oracle.com/technetwork/java/java
se/documentation/index.html
• Eventos são objetos que descrevem o que
ocorreu.
– Existem diversos tipos de classes de
eventos para descrever diferentes
categorias gerais de ações do usuário.
51
52
Esquema do modelo de delegação
Como os eventos são processados?
• Através de um modelo de delegação de
eventos.
FRAME
– Os componentes implementam rotinas
de manipulação de eventos (listener)
com o objetivo de receber eventos.
PANEL
Action handler
actionPerformed (ActionEvent e)
{
…….
}
54
Exemplo: delegação
Eventos gerados pelos componentes
import java.awt.*;
import java.awt.event
java.awt.event.*;
.*;
class ButtonHandler implements ActionListener {
public void actionPerformed (ActionEvent e){
System.out.println ("
("Acao
Acao executada");
executada");
}
}
public class TesteButton {
public static void main (String args
args[])
[])
{
Frame f = new Frame("Teste
Frame("Teste de evento");
evento");
Button b = new Button ("Pressione
("Pressione me!");
b.addActionListener (new ButtonHandler());
ButtonHandler());
f.add ("
("Center",b
Center",b);
);
f.pack();
f.pack
();
f.setVisible(true);
f.setVisible
(true);
}
}
55
Action event
BUTTON
– Suporte a eventos está no pacote:
java.awt.event.
53
Panel e Frame
event handlers
• Cada componente possui um conjunto de tipos
de eventos a ele associado
associado..
• Os componentes que podem gerar eventos de
ações possuem métodos para adicionar ou
remover “listeners”.
– addActionListener
– removeActionListener
56
Interface de eventos listener da AWT
Interface Listener
Classe Adapter
Métodos
ActionListener
AdjustmentListener
ComponentListener
-----------------ComponentAdapter
actionPerformed(ActionEvent)
adjustmentValueChanged(adjustmentEvent)
componentHidden(ComponentEvent)
componentMoved(ComponentEvent)
componentRezised(ComponentEvent)
componentShown(ComponentEvent)
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
focusGained(FocusEvent)
focusLost(FocusEvent)
itemStateChanged(ItemEvent)
keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseRealesed(MouseEvent)
ContainerListener
ContainerAdapter
FocusListener
FocusAdapter
ItemListener
KeyListener
-------KeyAdapter
MouseListener
MouseAdapter
57
Interface de eventos listener da AWT
Classe Adapter
MouseMotionAdapter
TextListener
WindowListener
-----WindowAdapter
Métodos
mouseDragged (MouseEvent)
mouseMoved(MouseEvent)
textValueChange(TextEvent)
windowActived(WindowEvent)
windowClosed(WindowEvent)
windowClosing(WindowEvent)
windowDeactivated(WindowEvent)
windowDeiconified(WindowEvent)
windowIconified(WindowEvent)
windowOpened(WindowEvent)
58
A hierarquia de classes de eventos
A hierarquia de classes de eventos
• A classe AWTEvent
– Cada método de cada interface ““listener
listener”” dos
eventos, possui um único argumento: uma
instância de uma classe que descende da
classe java
java..awt
awt..AWTEvent
AWTEvent..
– Esta classe não define nenhum método ou API
que o usuário, usualmente, necessite.
Contudo, herda um método útil da classe
java..util.EventObject;
java
• Object getSource
getSource:: retorna o objeto que
gerou o evento
59
Interface Listener
MouseMotionListener
java.lang.Objet
java.util.EventO bject
AWTEvent
ActionEvent
AdjustmentEvent
ContainerEvent
ComponentEvent
FocusEvent
InputEvent
KeyEvent
60
ItemEvent
WindowEvent
MouseEvent
TextEvent
Utilizando JOption Pane
Tipos de Mensagens
• É utilizado para mostrar mensagens de diálogo
para o usuário
• São pré definidas em constantes da classe JOptionPane
• Descrição:
Descrição:
• Fica no pacote javax.swing
– PLAIN_MESSAGE
– INFORMATION_MESSAGE
• Permite:
Permite:
– ERROR_MESSAGE
– Mensagens solicitando entrada de dados
– WARNING_MESSAGE
– Mensagens solicitando resposta à um questionamento
– QUESTION_MESSAGE
– Mensagens de informação
61
62
Métodos de JOptionPane
Conclusões
• showMessageDialog()
showMessageDialog()
• AWT e SWING permitem a construção de
interfaces gráficas portáveis entre resoluções
gráficas e plataformas
• showInputDialog()
showInputDialog()
• Modelo de eventos Java é avançado e permite
separação clara entre código de negócios e
implementação
• showConfirmDialog
showConfirmDialog()
()
• API SWING é realmente OO e permite a
construção de aplicações MVC
63
64
Download