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