Mestrado em Educação (em andamento) MBA em Negócios em Mídias Digitais (em andamento) MBA em Marketing e Vendas Especialista em games Bacharel em Sistema de Informação Email: marcelosantos@outlook.com
AULA 04 Interface Gráfica em Java
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
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.
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)
JFrame f = new JFrame("Teste"); JPopupMenu p = new JPopupMenu(); JMenu m = new JMenu("Arquivo"); m.add("sair"); p.add(m); f.addmouselistener(new MouseAdapter() { Exemplo de JPopupMenu 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
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: ícone mensagem entrada de dados botões de opção
JOptionPane (cont.) Exemplo de uso de JOptionPane JOptionPane.showMessageDialog(null, "no data found for " + parameter);
MessageDialog Exibe uma mensagem e aguarda OK do usuário INFORMATION QUESTION WARNING ERROR PLAIN
JOptionPane Message Dialogs (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);
Exemplo de MessageDialog JOptionPane.showMessageDialog(janela, "Cuidado com o apagão!", "ATENÇÃO", JOptionPane.WARNING_MESSAGE);
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
JOptionPane: Confirmation Dialogs (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);
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);
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
Método showoptiondialog int showoptiondialog(component parentcomponent, Object message, String title, int optiontype int messagetype, Icon icon, Object[] options, Object initialvalue);
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]);
Exemplo de OptionDialog
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
Métodos de JFileChooser void setcurrentdirectory(file dir) void setselectedfile(file file) void setmultiselectionenabled(boolean b) void setfilefilter(filefilter filter) int showopendialog(component parent) int showsavedialog(component parent) int showdialog(component parent, String approvebuttontext) File getselectedfile() File[] getselectedfiles()
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()
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";
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. 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/ 48