Memória de Aula - Aplicações MDI

Transcrição

Memória de Aula - Aplicações MDI
Marcelo Henrique dos Santos
Mestrado em Educação (em andamento)
MBA em Marketing e Vendas (em andamento)
Especialista em games
Bacharel em Sistema de Informação
Email:
[email protected]
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
AULA 04
Interface Gráfica em
Java
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Aplicações MDI
• MDI: Multiple Document Interface
– Programa tem uma janela de “desktop” que contém as demais
janelas.
– As janelas filhas podem ser minimizadas e movidas dentro do
desktop, mas não removidas.
– Se o desktop for minimizado, todas as janelas filhas também o
são.
• Suporte para MDI no Swing
– JDesktopPane
• Serve como a janela mãe (desktop) das demais janelas.
– JInternalFrame
• Semelhante a um frame, exceto que ele está restringido a
permanecer dentro do objeto JDesktopPane.
JInternalFrame
• É um contêiner para ser utilizado em aplicações MDI.
• Construtor principal
– public JInternalFrame(String title,
boolean resizable,
boolean closeable,
boolean maximizable,
boolean iconifiable)
• Outros contrutores úteis
–
–
–
–
JInternalFrame()
JInternalFrame( String title )
JInternalFrame( String title, boolean resizable )
JInternalFrame( String title, boolean resizable, boolean closable)
JInternalFrame
• Outros métodos:
–
–
–
–
–
–
–
–
–
–
–
–
moveToFront()
moveToBack()
setLocation (int x, int y)
setSize(int largura, int comprimento);
setMinimumSize(new Dimension(largura, comprimento));
setTitle(String);
setMaximizable(boolean);
setIconifiable(boolean);
setClosable(boolean);
setResizable(boolean);
setJMenuBar(JMenuBar);
pack()
JDesktopPane
• Um objeto JDesktopPane é um contêiner para construir
uma aplicação de múltiplos documento (MDI). Serve como
a janela mãe (desktop) das demais janelas.
• Um objeto JDesktopPane pode conter diversos objetos
JInternalFrame.
• Principais métodos
– add(JInternalFrame)
– cascadeFrames()
InternalFrameDemo
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Trabalhando com menus
• A biblioteca Swing disponibiliza menus comuns (pull-down) e
menus pop-up
• Um menu pode conter itens de menu e separadores, sendo
que os itens podem ter texto e imagem, além de poderem
ser marcados (como um checkbox)
• As classes do Swing a serem utilizadas são JMenuBar, JMenu
e JMenuItem.
– JMenuBar: uma barra de menus.
– JMenu: cada um dos menus suspenso que podem ser
“pendurados” em uma barra de menus.
– JMenuItem: cada opção a ser adicionada a um menu.
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Menus
• Principal construtor de JMenu:
– private JMenu menuCadastros = new JMenu("Cadastros");
• Hierarquia dos elementos de Menu
Classe JMenuBar
• Modela uma barra de menu, fixa em uma janela da
aplicação
• Na barra de menu pode-se colocar os menus da
aplicação, sendo que o menu de ajuda (help) possui
um tratamento diferenciado
• Métodos de JMenuBar
JMenu add(JMenu c)
JMenu getMenu(int index)
int getMenuCount()
void setHelpMenu(JMenu menu)
JMenu getHelpMenu()
JMenuBar
// Criando o objeto JMenuBar
private JMenuBar menuBar = new JMenuBar();
...
// Adicionando objetos JMenu ao objeto JMenuBar
menuBar.add(menuVenda);
...
// Adicionando um menu de gerenciamento de janelas à barra
de menus.
menuBar.add(new WindowMenu(desktop));
// Adicionando a barra de menus à aplicação MDI (JFrame)
setJMenuBar(menuBar);
Classe JMenu
• Modela um menu que pode ser colocado na barra de
menus ou dentro de um outro menu. Pode conter:
– itens de menu
– Separadores
• Métodos de JMenu
JMenu(String s)
JMenu(String s, boolean tear-off)
JMenuItem add(String name)
JMenuItem add(JMenuItem menuItem)
JMenuItem insert(JMenuItem i, int p)
void addSeparator()
void insertSeparator(int pos)
JMenu
// Criando o objeto JMenu
JMenu menuVenda = new JMenu("Venda");
...
//Adicionando objetos JMenuItem ao objeto JMenu
menuVenda.add(menuEfetuarVenda);
...
// Adicionando um separador de itens ao objeto JMenu.
menuVenda.addSeparator();
...
// Adicionando um mnemônico
menuVenda.setMnemonic('V');
...
Classe JMenuItem
• Modela um item de menu
• É superclasse de JMenu, uma vez que um menu
também pode ser um item de menu
• É sub-classe de JAbstractButton, logo, um item de
menu é um botão
• Métodos de JMenuItem
JMenuItem(String text)
JMenuItem(String text, Icon icon)
void setMnemonic(char mnemonic)
void setAccelerator(KeyStroke keyStroke)
void setEnabled(boolean b)
void addActionListener(ActionListener l)
JMenuItem
// Criando o objeto JMenuItem
private JMenuItem menuEfetuarVenda = new
JMenuItem("Venda...");
...
// Adicionando um mnemônico
menuVenda.setMnemonic('V');
...
ks =
KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.ALT_MASK
)
menuSistemaSair.setAccelerator(ks);
...
// Definindo um listener para o objeto JMenuItem.
menuEfetuarVenda.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
/* Código a ser executado quando o usuário clica no
item de menu*/
}
});
JMenuBar, JMenu,
JMenuItem
• Típico código para manipulação de menus:
JFrame f = new JFrame("Teste");
JMenuBar menuBar = new JMenuBar();
JMenu
menuVenda = new JMenu(“Venda”);
JMenuItem menuEfetuarVenda= new JMenuItem(“Efetuar”);
menuBar.add(menuVenda);
menuVenda.add(menuEfetuarVenda);
menuEfetuarVenda.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// Código do item de menu.
}
});
menuEfetuarVenda.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_E, KeyEvent.CTRL_MASK));
menuEfetuarVenda.setMnemonic(‘E');
f.setJMenuBar(menuBar); f.pack(); f.setVisible(true);
Exemplo de Menus
JFrame f = new JFrame("Teste");
JMenuBar b = new JMenuBar();
JMenu m = b.add(new JMenu("Arquivo"));
m.setMnemonic('a');
JMenuItem i = m.add("Sair");
i.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
System.exit(0);
}});
i.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_S, KeyEvent.CTRL_MASK));
i.setMnemonic('s');
f.setJMenuBar(b);
f.pack();
f.setVisible(true);
JToolBar
• Similar a uma painel para botões.
• Dockable: pode ser arrastada.
Menus de Escolha
• JMenuItem possui duas sub-classes que permitem a
escolha de opções:
– JCheckBoxMenuItem
– JRadioButtonMenuItem
• Essas classes modelam itens de menu que funcionam
da mesma maneira que os botões de escolha que
vimos
MenuLookDemo
Classe JPopupMenu
• Modela um menu pop-up, isto é, um menu que pode ser
aberto sobre um elemento qualquer de interface, fora da
barra de menu
• Assim como um menu comum, um menu pop-up pode
conter itens de menu e separadores
• Métodos de JPopupMenu
JPopupMenu()
JPopupMenu(String label)
JMenuItem add(String name)
JMenuItem add(JMenuItem menuItem)
void addSeparator()
void pack()
void show(Component c, int x, int y)
Exemplo de
JPopupMenu
JFrame f = new JFrame("Teste");
JPopupMenu p = new JPopupMenu();
JMenu m = new JMenu("Arquivo");
m.add("Sair"); p.add(m);
f.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent ev) {
if (ev.isPopupTrigger())
p.show((Component)ev.getSource(), ev.getX(),
ev.getY());
}
public void mouseReleased(MouseEvent ev) {
if (ev.isPopupTrigger())
p.show((Component)ev.getSource(), ev.getX(),
ev.getY());
}});
f.pack();
f.setVisible(true);
Diálogos Pré-definidos
• O Swing oferece um conjunto de diálogos
simples pré-definidos para uso em interações
breves com o usuário
– mensagens de erro, de alerta
– obtenção de uma confirmação
– entrada de um único campo de texto
• Esses diálogos são modais
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
JOptionPane
• Classe que permite exibir diferentes tipos de caixas de
diálogo.
• Cinco métodos estáticos principais
– JOptionPane.showMessageDialog
• Icon, message, OK button
– JOptionPane.showConfirmDialog
• Icon, message, and buttons:
OK, OK/Cancel, Yes/No, or Yes/No/Cancel
– JOptionPane.showInputDialog (2 versões)
• Icon, message, textfield or combo box, buttons
– JOptionPane.showOptionDialog
• Icon, message, array de butões ou de outros componentes
Classe JOptionPane
• Métodos estáticos para a criação desses
diálogos simples
• Estrutura básica:
mensagem
ícone
entrada de dados
botões de opção
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
JOptionPane (cont.)
• Exemplo de uso de JOptionPane
JOptionPane.showMessageDialog(null,
"no data found for " + parameter);
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
MessageDialog
• Exibe uma mensagem e aguarda OK do
usuário
INFORMATION
QUESTION
WARNING
ERROR
PLAIN
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
JOptionPane Message Dialogs
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
(Windows L&F)
Método showMessageDialog
void showMessageDialog(Component parentComponent,
Object message);
void showMessageDialog(Component parentComponent,
Object message,
String title,
int messageType);
void showMessageDialog(Component parentComponent,
Object message,
String title,
int messageType,
Icon icon);
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Exemplo de MessageDialog
JOptionPane.showMessageDialog(janela,
"Cuidado com o apagão!",
"ATENÇÃO",
JOptionPane.WARNING_MESSAGE);
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
ConfirmDialog
• Exibe uma mensagem e obtém uma
confirmação (YES/NO, OK/CANCEL)
• Conjuntos de botões de opção (optionType):
– JOptionPane.DEFAULT_OPTION
– JOptionPane.YES_NO_OPTION
– JOptionPane.YES_NO_CANCEL_OPTION
– JOptionPane.OK_CANCEL_OPTION
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
JOptionPane: Confirmation Dialogs
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
(Java L&F)
Método
showConfirmDialog
int showConfirmDialog(Component parentComponent,
Object message);
int showConfirmDialog(Component parentComponent,
Object message,
String title,
int optionType);
int showConfirmDialog(Component parentComponent,
Object message,
String title,
int optionType
int messageType,
Icon icon);
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Exemplo de
ConfirmDialog
int resp = JOptionPane.showConfirmDialog(janela,
"Prossegue com a tarefa?",
"Escolha uma opção",
JOptionPane.OK_CANCEL_OPTION);
CLOSED_OPTION
OK_OPTION
CANCEL_OPTION
InputDialog
• Exibe uma mensagem e obtém um valor de
entrada do usuário
– campo de texto editável
– combo box
Método
showInputDialog
String showInputDialog(Component parentComponent,
Object message);
String showInputDialog(Component parentComponent,
Object message,
String title,
int messageType);
Object showInputDialog(Component parentComponent,
Object message,
String title,
int messageType
Icon icon,
Object[] selectionValues,
Object defaultSelection);
Exemplo de InputDialog
String nome = JOptionPane.showInputDialog(janela,
"Qual é o seu nome?",
"Identifique-se",
JOptionPane.QUESTION_MESSAGE);
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
OptionDialog
• Exibe uma mensagem (ou objeto) e obtém
uma opção escolhida pelo usuário
• O número de botões e seus textos são
configuráveis
• A opção default é configurável
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Método
showOptionDialog
int showOptionDialog(Component parentComponent,
Object message,
String title,
int optionType
int messageType,
Icon icon,
Object[] options,
Object initialValue);
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Exemplo de
OptionDialog
Object[] opções = {"Sim", "Não", "Mais Tarde",
"Amanhã", "Sei lá!"};
int resp = JOptionPane.showOptionDialog(janela,
"Prossegue com a tarefa?",
"Escolha uma opção",
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
opções,
opções[0]);
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Exemplo de
OptionDialog
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Classe JFileChooser
• É comum uma aplicação abrir e salvar
arquivos
• A classe JFileChooser implementa uma caixa
de diálogo que permite que o usuário
navegue pelo sistema de arquivos
– semelhante às usadas por aplicações “nativas”
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Métodos de JFileChooser
void
void
void
void
setCurrentDirectory(File dir)
setSelectedFile(File file)
setMultiSelectionEnabled(boolean b)
setFileFilter(FileFilter filter)
int showOpenDialog(Component parent)
int showSaveDialog(Component parent)
int showDialog(Component parent,
String approveButtonText)
File getSelectedFile()
File[] getSelectedFiles()
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Exemplo de JFileChooser
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("c:\\Tutorial"));
int res = chooser.showOpenDialog(janela);
if (res == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
System.out.println(file.getName());
}
FileChooserDemo.java
Classe FileFilter
• Utilizada para a implementação de filtros que permitem
restringir os tipos de arquivos exibidos em um diálogo de
seleção
– FileFilter é uma classe abstrata
• A subclasse de FileFilter deverá implementar os métodos:
boolean accept(File file)
String getDescription()
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Exemplo de FileFilter
import javax.swing.filechooser.FileFilter;
public class GifFilter extends FileFilter
{
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".gif")
|| f.isDirectory();
}
public String getDescription() {
return "Arquivos GIF";
}
}
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
Conclusões
• Componentes essenciais de uma aplicação Swing:
– Contêiners são janelas ou painéis que contêm componentes.
– Layouts especificam como arranjar componentes em um
contêiner.
– Componentes: são os controles da interface gráfica com o
usuário.
– Ouvintes (listeners) são conectados a componentes e contém
o código que é executado quando o componente é usado.
• É desse modo que uma ação do usuário sobre um
componente é conectada a um método Java.
Conclusões
• Alguns IDEs têm eles próprios facilidades de
construção da interface gráfica (editores de
formulários)
– e.g. NetBeans - www.netbeans.org
• Também há ferramentas específicas para a criação de
GUIs em Java. Exemplos são:
– XUI - http://xui.sourceforge.net/
– UICompiler - http://uic.sourceforge.net/
BIBLIOGRAFIA
• SANTOS, Ismael H F. Módulo II : Interface com
usuário – GUI. Memória de aula - UniverCidade.
• SOBRAL, João Bosco; SCHWEBEL, Samuel Cristhian.
Interface Gráfica de Usuário Básica em Java.
Memória de aula da Universidade Federal de Santa
Catarina.
• DEITEL, Paul J.; DEITEL, Harvey. Java : como
programar. 8. ed. São Paulo : Pearson Prentice Hall,
2010.
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
47
BIBLIOGRAFIA
• PINHEIRO, Francisco A. C.. Fundamentos de
computação e orientação a objetivos usando Java.
Rio de Janeiro : LTC, 2006.
• KURNIAWAN, Budi. Java para a Web com servlets, JSP
e EJB. Rio de Janeiro: Ciência Moderna, 2002.
• Site da Sun, http://java.sun.com/j2se/
PROGRAMAÇÃO ORIENTADA A EVENTOS
Marcelo Henrique dos Santos
48

Documentos relacionados