Interfaces Gráficas com o Usuário 2011 Marcos Mendes 1 APIs AWT (Abstract Window Toolkit) e Swing (GUI Components) 2 Pacote java.awt Descrição AWT (Abstract Window Toolkit) é uma biblioteca para a programação de interfaces gráficas onde seus elementos dependem do sistema de interface gráfica nativo (plataforma de execução). Componentes de Interface Gráfica Gerenciadores de Layout Manipuladores de Eventos Cores Desenhos de Primitivas Gráficas Tipos de Fontes 3 Pacote javax.swing Descrição Biblioteca de componentes de interface gráfica. Possui um conjunto maior de componentes do que o AWT. Seus componentes não dependem da plataforma de execução. As aplicações java podem ter a aparência de aplicações nativas (look and feel), a aparência default é chamada de Metal. 4 Hierarquia de Componentes AWT Object Component Container Window Panel Applet Dialog Frame FileDialog 5 Hierarquia de Componentes Swing Component Object AWT Container Window JWindow Componentes Swing Panel Frame Applet JFrame JApplet JComponent JPanel JButton JLabel 6 O mínimo para a construção de Interfaces Gráficas Alguns Componentes JFrame É a tela (formulário) de uma aplicação de interface gráfica. É uma janela que possui uma barra de título, botões de controle e pode apresentar uma barra de menus. JLabel Utilizado para exibir um texto na frame. JTextField Utilizado para entrada de dados textual pelo usuário. JButton Utilizado para disparar a execução de uma ação. 7 O mínimo para a construção de Interfaces Gráficas Passos sugeridos para a criação de uma tela de interface gráfica. 1. Importe os pacotes necessários. 2. Declare a classe como sendo derivada de JFrame. 3. Declare os componentes como atributos da classe. 4. No método construtor: 5. a. Crie (instancie) os componentes com o operador new. b. Adicione os componentes na frame. c. Defina as características da frame (título, tamanho, etc.). d. Exiba a frame. No método main( ), instancie a classe. 8 O mínimo para a construção de Interfaces Gráficas //Exemplo de Tela de Interface Gráfica import java.awt.*; import javax.swing.*; public class ExemploInterface extends JFrame { JLabel lblNome; JTextField txtNome; JButton btnOk; public ExemploInterface() { lblNome = new JLabel("Nome:"); txtNome = new JTextField(); btnOk = new JButton("Krikaki"); add(lblNome, "North"); add(txtNome, BorderLayout.CENTER); add("South", btnOk); setTitle("Exemplo de Interface Gráfica"); pack(); setVisible(true); } public static void main(String[] args) { new ExemploInterface(); } } 9 Gerenciadores de Layout Um container utiliza algo chamado Gerenciador de Layout para controlar o posicionamento e dimensionamento de seus componentes. Alguns desses gerenciadores são descritos a seguir: BorderLayout FlowLayout GridLayout GridBagLayout 10 BorderLayout (java.awt.BorderLayout) North West Center East South 11 BorderLayout (java.awt.BorderLayout) Construtores Alguns Campos BorderLayout ( ) BorderLayout ( int hgap, int vgap ) CENTER “Center” EAST “East” NORTH “North” SOUTH “South” WEST “West” Alguns Métodos void setHgap ( int hgap ) Define o espaço horizontal entre as áreas. void setVgap ( int vgap ) Define o espaço vertical entre as áreas. 12 FlowLayout (java.awt.FlowLayout) 13 FlowLayout (java.awt.FlowLayout) Construtores Alguns Campos (alinhamento) FlowLayout ( ) FlowLayout ( int alinhamento ) FlowLayout (int alinhamento, int hgap, int vgap ) CENTER LEFT RIGHT Alguns Métodos void setAlignment ( int alinhamento ) Define o alinhamento horizontal dos componentes. void setHgap ( int hgap ) Define o espaço horizontal entre os componentes. void setVgap ( int vgap ) Define o espaço vertical entre os componentes. 14 GridLayout (java.awt.GridLayout) 15 GridLayout (java.awt.GridLayout) Construtores GridLayout ( ) GridLayout ( int rows, int cols ) GridLayout (int rows,int cols, int hgap,int vgap ) Alguns Métodos void setColumns ( int cols ) Define a quantidade de colunas da grade. void setHgap ( int hgap ) Define o espaço horizontal entre as células. void setRows ( int rows ) Define a quantidade de linhas da grade. void setVgap ( int vgap ) Define o espaço vertical entre as células. 16 GridBagLayout (java.awt.GridBagLayout) 17 GridBagLayout Construtor (java.awt.GridBagLayout) GridBagLayout ( ) Utilização GridBagLayout gbl = new GridBagLayout( ); painel.setLayout (gbl); GridBagConstraints gbc = new GridBagConstraints( ); gbc.weightx = 100; gbc.weighty = 100; // peso gbc.gridx = 0; gbc.gridy = 0; // posição gbc.gridwidth = 1; gbc.gridheight = 3; // tamanho painel.add ( componente, gbc ); 18 GridBagConstraints (java.awt.GridBagConstraints) Construtores GridBagConstraints ( ) GridBagConstraints (int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady ) 19 GridBagConstraints (java.awt.GridBagConstraints) Alguns Campos fill gridx gridy gridheight gridwidth anchor weightx weighty insets ipadx ipady BOTH HORIZONTAL NONE VERTICAL RELATIVE REMAINDER CENTER, EAST, NORTH, NORTHEAST, NORTHWEST, SOUTH, SOUTHEAST, SOUTHWEST, WEST 20 Exemplo de GridBagLayout import java.awt.*; import javax.swing.*; public class ExemploGBL extends JFrame { JButton btnNorte, btnEsq1, btnEsq2, btnEsq3, btnCentro; public ExemploGBL() { setLayout (new GridBagLayout( )); GridBagConstraints gbc = new GridBagConstraints( ); btnNorte = new JButton("Norte"); gbc.weightx = 30; gbc.weighty = 30; // peso gbc.gridx = 0; gbc.gridy = 0; // posição gbc.gridwidth = 3; gbc.gridheight = 1; // tamanho gbc.fill = GridBagConstraints.BOTH; // preenchimento add (btnNorte, gbc); btnEsq1 = new JButton("Esquerdo 1"); gbc.gridx = 0; gbc.gridy = 1; // posição gbc.gridwidth = 1; gbc.gridheight = 1; // tamanho add(btnEsq1, gbc); 21 Exemplo de GridBagLayout btnEsq2 = new JButton("Esquerdo 2"); gbc.gridx = 0; gbc.gridy = 2; // posição add(btnEsq2, gbc); btnEsq3 = new JButton("Esquerdo 3"); gbc.gridx = 0; gbc.gridy = 3; // posição add(btnEsq3, gbc); btnCentro = new JButton("Posição Central"); gbc.weightx = 100; gbc.weighty = 100; // peso gbc.gridx = 1; gbc.gridy = 1; // posição gbc.gridwidth = 2; gbc.gridheight = 3; // tamanho add(btnCentro, gbc); pack(); setBounds(100, 50, 300, 200); setVisible(true); } public static void main(String args[]) { new ExemploGBL(); } } 22 Modificando o Layout dos containers Para alterar o gerenciador de layout de um container, você invoca o método setLayout( ) com uma instância do gerenciador de layout desejado. Normalmente a chamada deste método ocorre no construtor da classe da GUI. ... setLayout( new FlowLayout( ) ); ... Quando utilizado o gerenciador de layout GridBagLayout, deve-se definir um constraints para cada componente. 23 Agrupando componentes em painéis Pode-se adicionar diretamente em uma área do layout apenas um único componente. Para se adicionar vários componentes, é necessário agrupá-los em painéis, aí então adicioná-se o painel na posição de layout desejada. 24 Agrupando componentes em painéis import javax.swing.*; public class TestaPainel extends JFrame { JButton btn1, btn2, btn3; JPanel p; public TestaPainel() { btn1 = new JButton("Botão 1"); btn2 = new JButton("Botão 2"); btn3 = new JButton("Botão 3"); p = new JPanel(); p.add(btn1); p.add(btn2); p.add(btn3); add(p, "South"); setBounds(100, 50, 200, 300); setVisible( true ); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String args[]) { new TestaPainel(); } } 25 Alguns Containers Swing Container é um componente que aloca outros componentes. JFrame JPanel JOptionPane JFileChooser JColorChooser JEditorPane JTabbedPane 26 JFrame (javax.swing.JFrame) É a tela (formulário) de uma aplicação de interface gráfica. É uma janela que possui uma barra de título, botões de controle e pode apresentar uma barra de menus. Alguns Construtores JFrame ( ) JFrame (String titulo) Alguns Métodos Component add(Component componente) ( ) Adiciona um componente na frame. void pack ( ) Define um tamanho mínimo para a frame. void setSize (int largura, int altura) Define o tamanho da frame. void setLocation (int margemEsquerda, int margemSuperior) Define a posição no monitor de vídeo do canto superior esquerdo da frame. void setBounds (int margemEsquerda, int margemSuperior, int largura, int altura) Define o tamanho e a posição da frame. void setVisible (boolean visível) Define se a frame está ou não visível. 27 JFrame (javax.swing.JFrame) void setDefaultCloseOperation (int operação) Define qual operação será realizada ao fechar a frame. void setLayout (LayoutManager gerenciador) Define o gerenciador de layout que será utilizado pela frame. void setLocationRelativeTo (Component componente) Define a posição da frame relativamente a um componente. Se o componente for null, a frame será centralizada no vídeo. void setIconImage (Image imagem) Define a imagem que será usada como ícone a frame. void setResizable (boolean alteraTamanho) Define se o tamanho da frame pode ser alterado ou não pelo usuário. void setMinimumSize (Dimension tamanhoMínimo) Define o tamanho mínimo que a frame pode ter. void setJMenuBar (JMenuBar menu) Define uma barra de menu para a frame. void setUndecorated (boolean decorar) Define se a barra de título e a borda da frame irão aparecer ou não. 28 JFrame (javax.swing.JFrame) Método setDefaultCloseOperation() Define a operação que deverá ser executada quando o usuário fechar a frame. O valor da operação pode ser um dos seguintes: DO_NOTHING_ON_CLOSE (definido em WindowConstants): Não faz nada; o programa deve controlar o fechamento através de um ouvinte de janela. HIDE_ON_CLOSE (definido em WindowConstants): Automaticamente esconde a frame. DISPOSE_ON_CLOSE (definido em WindowConstants): Automaticamente esconde e elimina a frame. EXIT_ON_CLOSE (definido em JFrame): Encerra a aplicação usando o método System.exit(). O valor default é HIDE_ON_CLOSE. 29 JFrame (javax.swing.JFrame) import java.awt.*; import javax.swing.*; public class ExemploJFrame extends JFrame { public ExemploJFrame() { setSize(300, 200); setMinimumSize(new Dimension(300, 200)); //setResizable(false); setLocationRelativeTo(null); Toolkit tk = getToolkit(); Image img = tk.getImage("duke.jpg"); setIconImage(img); setTitle("Exemplo de Janela"); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new ExemploJFrame(); } } 30 JPanel (javax.swing.JPanel) Componente utilizado para agrupar componentes em uma determinada área da frame. Alguns Construtores JPanel ( ) JPanel ( LayoutManager gerenciador ) 31 Alguns Componentes Swing JLabel JCheckbox JTextField ButtonGroup JTextArea JRadioButton JButton JList JToggleButton JComboBox 32 JComponent Construtor ( javax.swing.JComponent ) JComponent ( ) Alguns Métodos void setBackground ( Color corDeFundo ) Define a cor de fundo do componente. void setForeground ( Color corDeFrente ) Define a cor da "letra" do componente. void setFont ( Fonte tipo ) Define a fonte do componente. void setToolTipText ( String dica ) Define o texto de ajuda do componente. 33 JComponent ( javax.swing.JComponent ) void setOpaque ( boolean flag ) Define se o componente é opaco ou transparente. void setBorder ( Border borda ) Define a borda do componente. Graphics getGraphics ( ) Retorna o contexto gráfico do componente. void paintComponent ( Graphics g ) Pinta o componente. Normalmente é sobreposto. void setVisible ( boolean flag ) Define se o componente está visível ou não. 34 JLabel ( javax.swing.JLabel ) Construtores JLabel ( ) JLabel ( Icon ícone ) JLabel ( Icon ícone, int alinhamento ) JLabel ( String texto ) JLabel ( String texto, Icon ícone, int alinhamento ) JLabel ( String texto, int alinhamento ) 35 JLabel ( javax.swing.JLabel ) Alguns Métodos String getText ( ) Retorna o texto do label. void setHorizontalAlignment ( int alinhamento ) Define o alinhamento horizontal. void setHorizontalTextPosition ( int posição ) Define a posição do texto em relação à imagem. void setIcon ( Icon ícone ) Define uma imagem para o label void setText ( String texto ) Define o texto do label void setVerticalAlignment ( int alinhamento ) Define o alinhamento vertical. void setVerticalTextPosition ( int posição ) Define a posição do texto em relação à imagem. 36 JTextField ( javax.swing.JTextField ) Alguns Construtores JTextField ( ) JTextField ( int colunas ) JTextField ( String texto ) JTextField ( String texto, int colunas ) 37 JTextField ( javax.swing.JTextField ) Alguns Métodos void addActionListener ( ActionListener ouvinte ) Adiciona um ouvinte de ação ao componente. String getSelectedText ( ) Retorna o texto selecionado. int getSelectionEnd ( ) Retorna a posição final da seleção. int getSelectionStart ( ) Retorna a posição inicial da seleção. String getText ( ) String getText ( int posição, int tamanho ) Retorna o texto do componente. bollean isEditable ( ) Informa se o componente pode ser editado. 38 JTextField ( javax.swing.JTextField ) void replaceSelection ( String texto ) Troca o texto selecionado. void select ( int início, int fim ) Seleciona uma parte do texto. void selectAll ( ) Seleciona todo o texto. void setColumns ( int colunas ) Define a quantidade de colunas do componente. void setEditable ( boolean b ) Define se o componente poderá ser editado. void setHorizontalAlignment ( int alinhamento ) Define o alinhamento horizontal do texto. void setText ( String texto ) Define o texto do componente. 39 JTextArea ( javax.swing.JTextArea ) Alguns Construtores JTextArea ( ) JTextArea (int linhas, int colunas ) JTextArea ( String texto ) JTextArea ( String texto, int colunas, int linhas ) 40 JTextArea ( javax.swing.JTextArea ) Alguns Métodos void append ( String texto ) Adiciona um texto ao conteúdo do componente. int getColumns ( ) Retorna o número de colunas do componente. int getRows ( ) Retorna o número de linhas do componente. int getLineCount ( ) Retorna o quantidade de linhas de texto contidas no componente. void setLineWrap ( boolean quebra ) Define se há (true) ou não a quebra de linhas. bollean setWrapStyleWord ( boolean estilo) Define se as quebras de linha ocorrem entre as palavras (true). 41 JButton ( javax.swing.JButton ) Construtores JButton ( ) JButton ( Icon ícone ) JButton ( String texto) JButton ( String texto, Icon ícone) 42 JButton ( javax.swing.JButton ) Alguns Métodos void addActionListener ( ActionListener ouvinte ) Adiciona um ouvinte de ação ao componente. String getText ( ) Retorna o texto do componente. void doClick ( ) Executa programaticamente um click no componente. void setEnable ( boolean estado ) Define se o componente está ativado. void setHorizontalAlignment ( int alinhamento ) Define o alinhamento horizontal do texto. void setHorizontalPosition ( int posição ) Define a posição do texto em relação à imagem. void setIcon ( Icon ícone ) Define uma imagem para o componente. 43 JButton ( javax.swing.JButton ) void setMnemonic ( char atalho ) Define uma tecla de atalho para o componente. void setPressedIcon ( Icon ícone ) Define a imagem que será exibida quando o componente for pressionado. void setRolloverEnabled ( boolean estado ) Define se o efeito rollover está ativado ou não. void setRolloverIcon ( Icon ícone ) Define a imagem que será exibida quando o mouse passar por cima do componente. void setText ( String texto ) Define o texto do componente. void setVerticalAlignment ( int alinhamento ) Define o alinhamento vertical do texto. void setVerticalPosition ( int posição ) Define a posição do texto em relação à imagem. 44 Exemplo de Componente Swing import javax.swing.*; public class ExemploJButton extends JFrame { JButton btn; public ExemploJButton( ) { setTitle ("Exemplo de Botão" ); setSize (300, 200); btn = new JButton ("Botão de Teste" ); btn.setIcon ( new ImageIcon ("f:duke.jpg") ); btn.setRolloverIcon(new ImageIcon ("f:duke2.jpg")); btn.setPressedIcon(new ImageIcon ("f:duke3.jpg")); btn.setToolTipText ("Dica do componente" ); btn.setMnemonic ( 'B' ); add ( btn, "North" ); setVisible( true ); } public static void main(String[] args) { new ExemploJButton(); } } 45 Exercício proposto Crie a seguinte interface: Agenda Pessoal Nome: Endereço: Telefone: Anterior Próximo Sair 46 Exercício Programa de Cálculos Programa de Cálculos Número: Par / Ímpar Primo Fatorial Perfeito Resultado: ___________ 47 Criação de um Painel com Borda de Título JPanel p = new JPanel ( new GridLayout(linhas, colunas) ); TitledBorder titulo = BorderFactory.createTitledBorder("Título"); p.setBorder(titulo); Outros métodos da classe BorderFactory para criação de bordas: createLineBorder ( ) Borda de linha simples createMatteBorder ( ) Borda larga preenchida com uma cor ou ícone repetido. createEmptyBorder ( ) Borda vazia createEtechedBorder ( ) Borda de linha com efeito 3D. createBevelBorder( ) createLoweredBevelBorder ( ) createRaisedBevelBorder ( ) Bordas com efeito de superfície em relevo. 48 JCheckBox ( javax.swing.JCheckBox ) Alguns Construtores JCheckBox ( ) JCheckBox ( String texto ) JCheckBox ( String texto, boolean estado ) 49 JCheckBox ( javax.swing.JCheckBox ) Alguns Métodos boolean isSelected ( ) Retorna true se o componente estiver selecionado. void setSelected ( boolean estado ) Define o estado do componente. String getText ( ) Retorna o rótulo do componente. void setText ( String texo ) Define o rótulo do componente. void setActionCommand ( String texto) Define o texto de ação de commando do componente. void addAcitonListener ( ActionListener a ) void addItemListener ( ItemListener i ) 50 Exemplo com JCheckBox import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; public class ExemploJCheckBox extends JFrame implements ActionListener { JCheckBox chkProgramacao, chkBancoDados, chkAnalise; JButton btn; public ExemploJCheckBox() { chkProgramacao = new JCheckBox("Programação"); chkBancoDados = new JCheckBox("Banco de Dados"); chkAnalise = new JCheckBox("Análise de Sistemas"); btn = new JButton("krikaki"); btn.addActionListener(this); JPanel p = new JPanel(new GridLayout(3,1)); TitledBorder titulo = BorderFactory.createTitledBorder("Assunto"); p.setBorder(titulo); p.add(chkProgramacao); p.add(chkBancoDados); p.add(chkAnalise); add(p, "Center"); add(btn, "South"); pack(); setVisible(true); } 51 Exemplo com JCheckBox public void actionPerformed(ActionEvent evt) { String resp = ""; boolean nada = true; if (chkProgramacao.isSelected()) { resp = chkProgramacao.getText(); nada = false; } if (chkBancoDados.isSelected()) { resp += "\n" + chkBancoDados.getText(); nada = false; } if (chkAnalise.isSelected()) { resp += "\n" + chkAnalise.getText(); nada = false; } if (nada) { JOptionPane.showMessageDialog(null, "Nenhum Assunto"); } else JOptionPane.showMessageDialog(null, resp); } public static void main(String[] args) { new ExemploJCheckBox(); } } 52 JRadioButton ( javax.swing.JRadioButton ) Alguns Construtores JRadioButton ( ) JRadioButton ( String texto ) JRadioButton ( String texto, boolean estado ) 53 JRadioButton ( javax.swing.JRadioButton ) Alguns Métodos boolean isSelected ( ) Retorna true se o componente estiver selecionado. void setSelected ( boolean estado ) Define o estado do componente. String getText ( ) Retorna o rótulo do componente. void setText ( String texo ) Define o rótulo do componente. void setActionCommand ( String texto) Define o texto de ação de commando do componente. void addAcitonListener ( ActionListener a ) void addItemListener ( ItemListener i ) 54 ButtonGroup ( javax.swing.ButtonGroup ) Utilizado para agrupar JRadioButton's Construtor ButtonGroup ( ) Alguns Métodos void add ( AbstractButton b ) Adiciona um botão no grupo. void clearSelection ( ) Limpa a seleção no grupo. String getSelection.getActionCommand ( ) Retorna o texto de ação de comando do componente selecionado. 55 Exemplo com JRadioButton import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; public class ExemploJRadioButton extends JFrame implements ActionListener { JRadioButton rbMasc, rbFem; JButton btn; ButtonGroup bgSexo; public ExemploJRadioButton() { rbMasc = new JRadioButton("Masc.", true); rbMasc.setActionCommand("Masculino"); rbFem = new JRadioButton("Fem."); rbFem.setActionCommand("Feminino"); bgSexo = new ButtonGroup(); bgSexo.add(rbMasc); bgSexo.add(rbFem); btn = new JButton("krikaki"); btn.addActionListener(this); 56 Exemplo com JRadioButton JPanel p = new JPanel(new GridLayout(3,1)); TitledBorder titulo = BorderFactory.createTitledBorder("Sexo"); p.setBorder(titulo); p.add(rbMasc); p.add(rbFem); add(p, "Center"); add(btn, "South"); pack(); setVisible(true); } public void actionPerformed(ActionEvent evt) { String resp = bgSexo.getSelection().getActionCommand(); JOptionPane.showMessageDialog(null, resp); } public static void main(String[] args) { new ExemploJRadioButton(); } } 57 JList (javax.swing.JList) Alguns Construtores JList ( ) JList ( Object[] elementos ) JList ( ListModel modelo ) Alguns Métodos int getSelectedIndex ( ) retorna o índice do primeiro elemento selecionado. int [ ] getSelectedIndices ( ) retorna um array com os índices de todos os elementos selecionados. Object getSelectedValue ( ) Retorna o primeiro elemento selecionado. Object [ ] getSelectedValues ( ) Retorna um array com todos os elementos selecionados. void clearSelection ( ) Limpa a seleção dos elementos. ListModel getModel ( ) Retorna o modelo de dados da lista. void setListData ( Object [ ] elementos ) Cria um ListModel através do array e o aplica à lista. 58 JList (javax.swing.JList) boolean isSelectedIndex ( int índice ) retorna true se o elemento estiver selecionado. boolean isSelectionEmpty ( ) retorna true se não houver nenhum elemento selecionado. void setVisibleRowCount (int qtd) Define a quantidade de elementos exibidos. void setSelectedIndex ( int índice ) Seleciona um elemento. void setSelectedIndices ( int [] índices ) Seleciona todos os elementos indicados no array. void setSelectionMode ( int modo) Define o modo de seleção, modo pode ser: ListSelectionModel.SINGLE_SELECTION ListSelectionModel.SINGLE_INTERVAL_SELECTION ListSelectionModel.MULTIPLE_INTERVAL_SELECTION 59 DefaultListModel Construtor (javax.swing.DefaultListModel) DefaultListModel ( ) Alguns Métodos void addElement ( Object elemento ) Adiciona um elemento ao final da lista. void clear ( ) Remove todos os elementos da lista. Object getElementAt ( int índice ) Retorna o elemento especificado. int getSize ( ) Retorna o número de elementos na lista. boolean isEmpty ( ) Retorna true se a lista estiver vazia. Object remove ( int índice ) Remove um elemento de índice especificado. 60 Exemplo JList import javax.swing.*; import java.awt.event.*; public class ExemploJList extends JFrame implements ActionListener { JList lista; DefaultListModel modelo; JButton btn; public ExemploJList() { String dados[] = {"JavaSE", "JavaEE", "JavaME"}; modelo = new DefaultListModel(); for (String texto:dados) { modelo.addElement(texto); } // No lugar do for, você pode usar: // lista.setListData(dados); lista = new JList(modelo); lista.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane sp = new JScrollPane(lista); add(sp, "Center"); 61 Exemplo JList btn = new JButton("krikaki"); btn.addActionListener(this); add(btn, "South"); pack(); setVisible(true); } public void actionPerformed(ActionEvent evt) { Object selecionados[] = lista.getSelectedValues(); for (Object texto:selecionados) { System.out.println(texto); } } public static void main(String[] args) { new ExemploJList(); } } 62 JComboBox (javax.swing.JComboBox) Alguns Construtores JComboBox ( ) JComboBox ( Object[] elementos ) JComboBox ( ComboBoxModel modelo ) Alguns Métodos int getSelectedIndex ( ) Retorna o índice do primeiro elemento selecionado. Object getSelectedItem ( ) Retorna o primeiro elemento selecionado. void addItem ( Object elemento ) Adiciona um item na lista. void removeAllItems ( ) Remove todos os elementos da lista. void setMaximumRowCount ( int qtdLinhas) Define o número máximo de linhas a ser exibido. void setSelectedIndex ( int índice ) Seleciona um determinado elemento. ComboBoxModel getModel ( ) Retorna o modelo da lista. 63 DefaultComboBoxModel (javax.swing.DefaultComboBoxModel) Alguns Construtores DefaultComboBoxModel ( ) DefaultComboBoxModel ( Object [] elementos) Alguns Métodos void addElement ( Object elemento ) Adiciona um elemento ao final da lista. Object getElementAt ( int índice ) Retorna o elemento especificado. int getSize ( ) Retorna o número de elementos na lista. void removeAllElements ( ) Remove todos os elementos da lista. Object removeElementAt ( int índice ) Remove um elemento de índice especificado. 64 Exemplo JComboBox import javax.swing.*; import java.awt.event.*; public class ExemploJComboBox extends JFrame implements ActionListener { JComboBox combo; JButton btn; public ExemploJComboBox() { String dados[] = {"JavaSE", "JavaEE", "JavaME"}; combo = new JComboBox(dados); combo.addItem("Todas"); combo.setSelectedIndex(3); combo.setMaximumRowCount(2); add(combo, "Center"); btn = new JButton("krikaki"); btn.addActionListener(this); add(btn, "South"); 65 Exemplo JComboBox pack(); setVisible(true); } public void actionPerformed(ActionEvent evt) { Object selecionado = combo.getSelectedItem(); JOptionPane.showMessageDialog(null, selecionado); } public static void main(String[] args) { new ExemploJComboBox(); } } 66 JTable Alguns Construtores (javax.swing.JTable) JTable ( ) JTable ( Object [] [] dados, Object [] nomeColunas ) JTable ( TableModel modelo ) Alguns Métodos TableModel getModel ( ) Retorna o TableModel da tabela. int getRowCount ( ) Retorna a quantidade de linhas no modelo da tabela. int getSelectedColumn ( ) Retorna o índice da coluna selecionada, -1 se nenhuma coluna estiver selecionada. int getSelectedRow ( ) Retorna o índice da linha selecionada, -1 se nenhuma linha estiver selecionada. int [ ] getSelectedRows ( ) Retorna um array contendo os índices de todas as linha selecionadas. int getSelectedRowCount ( ) Retorna a quantidade de linhas selecionadas. Object getValueAt (int linha, int coluna ) Retorna o valor de uma célula. void setValueAt ( Object valor, int linha, int coluna ) Define o valor de uma célula. 67 DefaultTableModel (javax.swing.table.DefaultTableModel) Alguns Construtores DefaultTableModel ( ) DefaultTableModel ( int linhas, int colunas ) DefaultTableModel ( Object [] [] dados, Object [] nomeColunas ) Alguns Métodos void addRow ( Object [] linha ) Adiciona uma linha no final do modelo da tabela. int getColumnCount ( ) Retorna a quantidade de colunas do modelo da tabela. int getRowCount ( ) Retorna a quantidade de linhas do modelo da tabela. Object getValueAt (int linha, int coluna ) Retorna o valor de uma célula. void insertRow ( int índice, Object [] linha ) Insere uma linha no modelo da tabela. void removeRow ( int índice ) Remove uma linha no modelo da tabela. void setValueAt ( Object valor, int linha, int coluna ) Define o valor de uma célula. 68 Exemplo JTable import javax.swing.*; import javax.swing.table.*; import java.awt.event.*; public class ExemploJTable extends JFrame implements ActionListener { JTable tabela; DefaultTableModel modelo; JButton btn; public ExemploJTable() { String colunas[] = {"Nome", "Endereço", "Telefone"}; String dados[][] = { {"João", "Rua Tal", "4444"}, {"Maria", "Av Tal", "3333"} }; modelo = new DefaultTableModel(dados, colunas); tabela = new JTable(modelo); JScrollPane sp = new JScrollPane(tabela); add(sp, "Center"); btn = new JButton("krikaki"); btn.addActionListener(this); add(btn, "South"); pack(); setVisible(true); } 69 Exemplo JTable public void actionPerformed(ActionEvent evt) { int linha = tabela.getSelectedRow(); int coluna = tabela.getSelectedColumn(); if (linha != -1 && coluna != -1) { String dado = (String) tabela.getValueAt(linha, coluna); JOptionPane.showMessageDialog(this, dado); } else { JOptionPane.showMessageDialog(this, "Nenhuma célula selecionada"); } } public static void main(String[] args) { new ExemploJTable(); } } 70 Exemplo JTable usando um ResultSet import java.sql.*; import javax.swing.*; Classe Principal onde a tabela é criada public class ExemploDBGrid extends JFrame { JTable tabela; DBGridModel modelo; Connection con; ResultSet rs; public ExemploDBGrid( ) { try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/uniban"; con = DriverManager.getConnection(url, "root", "admin"); Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = st.executeQuery("Select * from Cliente order by Nome"); } catch (Exception ex) { ex.printStackTrace( ); } 71 Exemplo JTable usando um ResultSet modelo = new DBGridModel(rs); tabela = new JTable(modelo); JScrollPane sp = new JScrollPane(tabela); add(sp, "Center"); pack(); setVisible(true); } public static void main(String[] args) { new ExemploDBGrid(); } } 72 Exemplo JTable usando um ResultSet import javax.swing.table.*; import java.sql.*; public class DBGridModel extends AbstractTableModel { private ResultSet rs; private ResultSetMetaData estrutura; public DBGridModel(ResultSet rs) { this.rs = rs; try { estrutura = rs.getMetaData(); rs.first(); } catch (SQLException e) { e.printStackTrace(); } } public int getColumnCount() { int qtdColunas = 0; try { qtdColunas = estrutura.getColumnCount(); } catch (SQLException e) { e.printStackTrace(); } return qtdColunas; } Classe que Implementa os métodos obrigatórios de AbstractTableModel 73 Exemplo JTable usando um ResultSet public int getRowCount() { int qtdLinhas = 0; try { rs.last(); qtdLinhas = rs.getRow(); } catch (SQLException e) { e.printStackTrace(); } return qtdLinhas; } public Object getValueAt(int linha, int coluna) { Object valor = null; try { rs.absolute(linha + 1); valor = rs.getObject(coluna + 1); } catch (SQLException e) { e.printStackTrace(); } return valor; } } 74 Exemplo JTable ResultSet Atualizável import java.sql.*; import javax.swing.*; import java.awt.event.*; Classe Principal onde a tabela é criada public class ExemploDBGridRW extends JFrame implements ActionListener { JTable tabela; DBGridModelRW modelo; Connection con; ResultSet rs; JButton btnIncluir, btnExcluir; public ExemploDBGridRW() { try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/uniban"; con = DriverManager.getConnection(url, "root", "admin"); Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = st.executeQuery("Select * from Cliente"); } catch (Exception ex) { ex.printStackTrace(); } 75 Exemplo JTable ResultSet Atualizável modelo = new DBGridModelRW(rs); tabela = new JTable(modelo); JScrollPane sp = new JScrollPane(tabela); add(sp, "Center"); btnIncluir = new JButton("Incluir"); btnIncluir.addActionListener(this); btnExcluir = new JButton("Excluir"); btnExcluir.addActionListener(this); JPanel pBtn = new JPanel(); pBtn.add(btnIncluir); pBtn.add(btnExcluir); add(pBtn, "South"); pack(); setVisible(true); } 76 Exemplo JTable ResultSet Atualizável } public void actionPerformed(ActionEvent evt) { Object btn = evt.getSource(); if (btn == btnIncluir) { Object dados[] = new Object[5]; dados[0] = JOptionPane.showInputDialog("Qual o nome?"); dados[1] = JOptionPane.showInputDialog("Qual o sexo?"); dados[2] = JOptionPane.showInputDialog("Qual a data?"); dados[3] = JOptionPane.showInputDialog("Qual o estado?"); dados[4] = new Boolean(JOptionPane.showInputDialog("Está ativo?")); modelo.addRow(dados); } else if (btn == btnExcluir) { if (tabela.getSelectedRowCount() == 0) { JOptionPane.showMessageDialog(this, "Não há linhas selecionadas"); } else { int linhas[] = tabela.getSelectedRows(); for (int cont = linhas.length - 1; cont >= 0; cont--) { modelo.removeRow(linhas[cont]); } } } } public static void main(String[] args) { new ExemploDBGridRW(); } 77 Exemplo JTable ResultSet Atualizável import javax.swing.table.*; import java.sql.*; Classe que Implementa os métodos obrigatórios de AbstractTableModel public class DBGridModelRW extends AbstractTableModel { private ResultSet rs; private ResultSetMetaData estrutura; public DBGridModelRW(ResultSet rs) { this.rs = rs; try { estrutura = rs.getMetaData(); rs.first(); } catch (SQLException e) { e.printStackTrace(); } } public int getColumnCount() { int qtdColunas = 0; try { qtdColunas = estrutura.getColumnCount(); } catch (SQLException e) { e.printStackTrace(); } return qtdColunas; } 78 Exemplo JTable ResultSet Atualizável public int getRowCount() { int qtdLinhas = 0; int linhaCorrente = 1; try { linhaCorrente = rs.getRow(); rs.last(); qtdLinhas = rs.getRow(); if (linhaCorrente > 0) { rs.absolute(linhaCorrente); } } catch (SQLException e) { e.printStackTrace(); } return qtdLinhas; } public Object getValueAt(int linha, int coluna) { Object valor = null; try { rs.absolute(linha + 1); valor = rs.getObject(coluna + 1); } catch (SQLException e) { e.printStackTrace(); } return valor; } 79 Exemplo JTable ResultSet Atualizável public String getColumnName(int coluna) { String nomeColuna = ""; try { nomeColuna = estrutura.getColumnName(coluna + 1); } catch (SQLException e) { e.printStackTrace(); } return nomeColuna; } public void setValueAt(Object value, int linha, int coluna) { try { rs.absolute(linha + 1); rs.updateObject(coluna + 1, value); rs.updateRow(); } catch (SQLException e) { e.printStackTrace(); } } public boolean isCellEditable(int linha, int coluna) { //Coluna Id não deve ser editável if (coluna == 0) { return false; } return true; } 80 Exemplo JTable ResultSet Atualizável } public void addRow(Object[] linha) { try { rs.moveToInsertRow(); for (int cont = 0; cont < linha.length; cont++) { rs.updateObject(cont + 2, linha[cont]); } rs.insertRow(); //Atualiza a tabela fireTableDataChanged(); } catch (SQLException e) { e.printStackTrace(); } } public void removeRow(int linha) { try { rs.absolute(linha + 1); rs.deleteRow(); //Atualiza a tabela fireTableRowsDeleted(linha, linha); } catch (SQLException e) { e.printStackTrace(); } } 81 Cores, Desenhos e Fontes Color Graphics Font / FontMetrics 82 Color (java.awt.Color) Alguns Construtores Color ( float r, float g, float b ) Color ( float r, float g, float b, float a ) Color ( int r, int g, int b ) Color ( int r, int g, int b, int a ) Valores entre 0.0f e 1.0f Valores entre 0 e 255 Color ( int rgb ) Color ( int rgb, boolean hasalpha ) bits: 24-31=alpha; 16-23=red; 8-15=green; 0-7=blue 83 Color (java.awt.Color) Alguns Campos black blue cyan darkGray 0, 0, 0 0, 0, 255 0, 255, 255 64, 64, 64 gray green lightGray magenta 128, 128, 128 0, 255, 0 192, 192, 192 255, 0, 255 orange pink red white 255, 200, 0 255, 175, 175 255, 0, 0 255, 255, 255 yellow 255, 255, 0 84 Color (java.awt.Color) Alguns Métodos Color brighter ( ) Cria uma nova cor mais clara. Color darker ( ) Cria uma nova cor mais escura. int getAlpha ( ) int getBlue ( ) int getGreen ( ) int getRed ( ) int getRGB ( ) Não possui métodos set Retorna o valor do campo determinado. 85 Font (java.awt.Font) Construtores Font ( Map atributos ) Font ( String nome, int estilo, int tamanho ) Alguns Campos BOLD ITALIC PLAIN 86 Font (java.awt.Font) Alguns Métodos String getFontName ( ) Retorna o nome do font face. String getName ( ) Retorna o nome lógico da fonte. int getSize ( ) Retorna o tamanho em pontos da fonte. int getStyle ( ) Retorna o estilo da fonte. boolean isBold ( ) indica se o estilo da fonte é BOLD. boolean isItalic ( ) indica se o estilo da fonte é ITALIC. boolean isPlain ( ) indica se o estilo da fonte é PLAIN. 87 Font Nomes Lógicos de Fontes (java.awt.Font) Dialog DialogInput Monospaced SansSerif Serif Exemplo de definição de Font de um componente: Font f1 = new Font ( "Serif", Font.BOLD, 14 ); Button btn = new Button ( "Oi tudo bem"); btn.setFont ( f1 ); 88 Font (java.awt.Font) import java.awt.*; import javax.swing.*; Exemplo que mostra como alterar a fonte de um componente public class FontComp extends JFrame { public FontComp( ) { setTitle("Tipo de Fonte do Componente"); Font f = new Font ("SansSerif", Font.BOLD+Font.ITALIC, 20); JButton btn = new JButton ("krikaki"); btn.setFont ( f ); getContentPane().add ( btn, "North" ); pack(); setVisible(true); } } 89 Font (java.awt.Font) import java.awt.*; Classe para obter as class Fontes extends Frame { fontes instaladas no public Fontes(){ computador local setTitle("Tipos de Fontes"); List lst = new List(); lst.setBackground(Color.lightGray); String fontfamily[] = GraphicsEnvironment. getLocalGraphicsEnvironment(). getAvailableFontFamilyNames(); for (int x=0; x< fontfamily.length; x++) lst.add(fontfamily[x]); add(lst); pack(); setVisible(true); } } 90 Alteração de Look And Feel import javax.swing.*; public class TestaGUI extends JFrame { public TestaGUI() { add(new JButton("Oi tudo bem"), "North"); pack(); setVisible(true); } public static void main(String[] args) throws Exception { UIManager.setLookAndFeel( "javax.swing.plaf.metal.MetalLookAndFeel"); // UIManager.getCrossPlatformLookAndFeelClassName() //"com.sun.java.swing.plaf.motif.MotifLookAndFeel" //"javax.swing.plaf.metal.MetalLookAndFeel" //"com.sun.java.swing.plaf.gtk.GTKLookAndFeel" //"com.sun.java.swing.plaf.windows.WindowsLookAndFeel" new TestaGUI(); } } 91 Manipulação de Eventos Eventos de Ação Eventos de Janela Eventos de Mouse 92 Eventos de Ação Interface ActionListener Método actionPerformed Não possui classe adaptadora Eventos gerados por: Button List MenuItem TextField 93 Eventos de Ação import java.awt.*; import java.awt.event.*; import javax.swing.*; Ação de um Botão 1 public class AcaoBtn1 extends JFrame { JButton btn; public AcaoBtn1 ( ) { btn = new JButton ("Botão de Comando" ); btn.addActionListener ( new ActionListener( ) { public void actionPerformed ( ActionEvent evt ) { btn.setBackground ( Color.red ); } } ); add ( btn, "North" ); setVisible( true ); } public static void main (String args[ ]) { new AcaoBtn1( ); } } 94 Eventos de Ação import java.awt.*; import java.awt.event.*; import javax.swing.*; Ação de um Botão 2 public class AcaoBtn2 extends JFrame implements ActionListener { JButton btn; public AcaoBtn2 ( ) { btn = new JButton ("Botão de Comando" ); btn.addActionListener ( this ) ; add( btn, "North" ); setVisible ( true ); } public void actionPerformed ( ActionEvent evt ) { Object source = evt.getSource( ); if ( source == btn ) btn.setBackground(Color.red); } public static void main (String args[ ]) { new AcaoBtn2( ); } } 95 Exercício Implementar a funcionalidade do programa de cálculos. 96 Eventos de Janela Interface WindowListener Métodos windowClosing windowOpened windowIconified windowDeiconified windowClosed windowActivated windowDeactivated Classe adaptadora: WindowAdapter 97 Eventos de Janela import java.awt.*; import java.awt.event.*; Fechamento import javax.swing.*; de Janela public class FechaFrame extends JFrame { public FechaFrame ( ) { setTitle ( "Oi Tudo Bem" ); setSize (300, 200); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener ( new WindowAdapter ( ) { public void windowClosing ( WindowEvent e ) { int resp = JOptionPane.showConfirmDialog(null, "Deseja sair ?"); if ( resp == JOptionPane.YES_OPTION ) System.exit ( 0 ); } } ); setVisible ( true ); } public static void main ( String args [ ] ) { new FechaFrame( ); } 98 } Eventos de Janela import java.awt.event.*; import javax.swing.*; public class EventosJanela extends JFrame { public EventosJanela() { setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowListener() { public void windowClosing (WindowEvent e) { int resp = JOptionPane.showConfirmDialog(null, "Deseja sair ?"); if (resp == JOptionPane.YES_OPTION) System.exit(0); } public void windowOpened (WindowEvent arg0) { System.out.println("Janela Aberta!"); } public void windowClosed (WindowEvent arg0) { System.out.println("Janela Fechada!"); } 99 Eventos de Janela public void windowIconified (WindowEvent arg0) { System.out.println("Janela Minimizada!"); } public void windowDeiconified (WindowEvent arg0) { System.out.println("Janela Restaurada!"); } public void windowActivated (WindowEvent arg0) { System.out.println("Janela Ativada!"); } public void windowDeactivated (WindowEvent arg0) { System.out.println("Janela Desativada!"); } }); setVisible(true); } public static void main(String args[]) { new EventosJanela(); } } 100 JColorChooser (javax.swing.JColorChooser) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DialogoCor extends JFrame implements ActionListener { JButton btn; public DialogoCor() { btn = new JButton("krikaki"); btn.addActionListener(this); getContentPane().add(btn, "West"); pack(); setVisible(true); } public void actionPerformed(ActionEvent e) { Color corAtual = btn.getBackground(); Color novaCor = JColorChooser.showDialog(DialogoCor.this, "Escolha a cor", corAtual); btn.setBackground(novaCor); } public static void main ( Stirng args [ ] ) { new DialogoCor ( ); } } 101 Eventos de Mouse Interface MouseListener Métodos mousePressed mouseReleased mouseEntered mouseExited mouseClicked Classe adaptadora: MouseAdapter Interface MouseMotionListener Métodos mouseDragged mouseMoved Classe adaptadora: MouseMotionAdapter 102 Eventos de Mouse import java.awt.*; import java.awt.event.*; import javax.swing.*; Eventos de Mouse no Botão public class Botao extends JFrame { JButton btn; public Botao ( ) { btn = new JButton ("Passe o mouse aqui !"); btn.addMouseListener ( new MouseAdapter ( ) { public void mouseEntered ( MouseEvent evt ) { btn.setBackground ( Color.yellow ); } public void mouseExited ( MouseEvent evt ) { btn.setBackground ( Color.red ); } } ); add ( btn, "South" ); setVisible ( true ); } public static void main ( Stirng args [ ] ) { new Botao ( ); } } 103 Eventos de Teclado 104 Exemplo: Várias Janelas import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Janelas extends JFrame implements ActionListener { JFrame fr1, fr2; JButton btnFr1, btnFr2, btnVolta1, btnVolta2; public Janelas() { setTitle("Janela Principal"); btnFr1 = new JButton("Chama Janela 1"); btnFr1.addActionListener(this); btnFr2 = new JButton("Chama Janela 2"); btnFr2.addActionListener(this); add(btnFr1, "North"); add(btnFr2, "South"); 105 Exemplo: Várias Janelas fr1 = new JFrame("Janela 1"); fr1.setBounds(100, 100, 300, 100); fr1.getContentPane().setBackground(Color.yellow); btnVolta1 = new JButton("Voltar"); fr1.add(btnVolta1, "South"); btnVolta1.addActionListener(this); fr2 = new JFrame("Janela 2"); fr2.setBounds(200, 200, 300, 100); fr2.getContentPane().setBackground(Color.green); btnVolta2 = new JButton("Voltar"); fr2.add(btnVolta2, "South"); btnVolta2.addActionListener(this); setSize(300, 200); setVisible(true); } 106 Exemplo: Várias Janelas } public void actionPerformed(ActionEvent evt) { Object btn = evt.getSource(); if (btn == btnFr1) { setVisible(false); fr1.setVisible(true); } if (btn == btnFr2) { setVisible(false); fr2.setVisible(true); } if (btn == btnVolta1) { setVisible(true); fr1.setVisible(false); } if (btn == btnVolta2) { setVisible(true); fr2.setVisible(false); } } public static void main(String[] args) { new Janelas(); } 107 Exemplo: Várias Janelas public void actionPerformed(ActionEvent evt) { Object btn = evt.getSource(); if (btn == btnFr1) { setVisible(false); fr1.setVisible(true); } if (btn == btnFr2) { setVisible(false); fr2.setVisible(true); } if (btn == btnVolta1) { setVisible(true); fr1.setVisible(false); } if (btn == btnVolta2) { setVisible(true); fr2.setVisible(false); } 108 Exemplo: Botão Personalizado import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Botão extends JButton { String texto; Font letra; Color frente, fundo, realce; public Botão(String texto, Font letra, Color frente, Color fundo, Color realce){ super(texto); this.texto = texto; this.letra = letra; this.frente = frente; this.fundo = fundo; this.realce = realce; 109 Exemplo: Botão Personalizado setFont(letra); setForeground(frente); setBackground(fundo); addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent evt) { setBackground(Botão.this.realce); Font letra = Botão.this.letra; letra = new Font(letra.getFamily(), letra.getStyle(), letra.getSize() + 5); Botão.this.setFont(letra); } public void mouseExited(MouseEvent evt) { setBackground(Botão.this.fundo); Botão.this.setFont(Botão.this.letra); } }); } } 110 Tipos de Cursor (java.awt.Cursor) CROSSHAIR_CURSOR Cursor em formato de cruz. CUSTOM_CURSOR Cursor personalizado. DEFAULT_CURSOR Cursor default E_RESIZE Redimensionamento Leste HAND_CURSOR Cursor em formato de mão MOVE_CURSOR Cursor de movimentação N_RESIZE_CURSOR Redimensionamento Norte 111 Tipos de Cursor (java.awt.Cursor) NE_RESIZE_CURSOR Redimensionamento Nordeste NW_RESIZE_CURSOR Redimensionamento Noroeste S_RESIZE_CURSOR Redimensionamento Sul SE_RESIZE_CURSOR Redimensionamento Sudeste SW_RESIZE_CURSOR Redimensionamento Sodoeste TEXT_CURSOR Texto W_RESIZE_CURSOR Redimensionamento Oeste WAIT_CURSOR Cursor de pausa 112 Exemplo de Tipos de Cursor import java.awt.*; import javax.swing.*; public class Cursores extends JFrame { public Cursores() { setLayout(new FlowLayout()); JButton btn1 = new JButton("Cruz"); JButton btn2 = new JButton("Mão"); JButton btn3 = new JButton("Movimento"); JButton btn4 = new JButton("Texto"); JButton btn5 = new JButton("Espera"); btn1.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); btn2.setCursor(new Cursor(Cursor.HAND_CURSOR)); btn3.setCursor(new Cursor(Cursor.MOVE_CURSOR)); btn4.setCursor(new Cursor(Cursor.TEXT_CURSOR)); btn5.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 113 Exemplo de Tipos de Cursor cp.add(btn1); cp.add(btn2); cp.add(btn3); cp.add(btn4); cp.add(btn5); pack(); setVisible(true); } public static void main(String[] args) { new Cursores( ); } } 114 Exemplo de Cursor Personalizado import java.awt.*; import javax.swing.*; public class CursorPessoal extends JFrame { JButton btn; public CursorPessoal() { Toolkit tk = Toolkit.getDefaultToolkit(); Image img = tk.getImage("imagem.gif"); setIconImage(img); Cursor cursor = tk.createCustomCursor(img, new Point(20, 20), "Oi"); btn = new JButton("krikaki"); btn.setToolTipText("Oi tudo bem"); btn.setCursor(cursor); add(btn, "North"); setBounds(100,100, 200, 300); setVisible(true); } public static void main(String[] args) { new CursorPessoal(); } } 115 Tratamento de Exceções 116 Tratamento de Exceções import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Excecao extends JFrame implements ActionListener { JRadioButton divide, badCast, arrayBounds, nullPointer; public Excecao(){ Container cp = getContentPane(); cp.setLayout(new GridLayout(7, 1)); ButtonGroup g = new ButtonGroup(); divide = new JRadioButton("Divisão por zero", false); divide.addActionListener(this); g.add(divide); cp.add(divide); 117 Tratamento de Exceções badCast = new JRadioButton("Cast Inválido", false); badCast.addActionListener(this); g.add(badCast); cp.add(badCast); arrayBounds = new JRadioButton("Índice inválido", false); arrayBounds.addActionListener(this); g.add(arrayBounds); cp.add(arrayBounds); nullPointer = new JRadioButton("Referência nula", false); nullPointer.addActionListener(this); g.add(nullPointer); cp.add(nullPointer); pack(); setVisible(true); } 118 Tratamento de Exceções } public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); try { if (source == divide) { int a = 1, b; b = 5 / (a - a); } else if (source == badCast) { Frame f = (Frame) evt.getSource(); } else if (source == arrayBounds) { int a[] = new int[5]; int b = a[5]; } else { Frame f = null; f.setSize(200, 300); } } catch (Exception e) { System.out.println("Exceção: " + e); } } public static void main ( String args [ ] ) { Excecao oi = new Excecao(); } 119 Desenhando Formas Geométricas import java.awt.*; import java.awt.geom.*; import javax.swing.*; public class Desenho extends JFrame { PainelDesenhado painel; public Desenho() { painel = new PainelDesenhado(); add(painel); setBounds(100, 100, 350, 250); setVisible(true); } public static void main(String[] args) { new Desenho(); } class PainelDesenhado extends JPanel { protected void paintComponent(Graphics g) { //super.paintComponent(g); g.setColor(new Color(0, 200, 0)); g.fillRect(0, 0, 300, 200); g.setColor(Color.YELLOW); int x[] = {150, 300, 150, 0, 150}; int y[] = {0, 100, 200, 100, 0}; g.fillPolygon(x, y, 5); g.setColor(new Color(0, 0, 200)); g.fillOval(100, 50, 100, 100); g.setColor(Color.WHITE); for (int cont = 1; cont <= 10; cont++) g.drawArc(100, cont + 80, 100, 50, 0, 180 ); } } } 120 Imagens Como ler um arquivo de imagem: Toolkit tk = Toolkit.getDefaultToolkit ( ) ; // Arquivo Local: Image img = tk.getImage (“nomearq.gif”); // Imagem na Internet: URL u = new URL ("http://www.algumlugar.com/umaImg.gif"); Image img = tk.getImage ( u ); Como alterar o ícone de uma Frame: setIconImage ( img ); 121 Imagens Como carregar uma imagem através de um observador de imagens (ImageObserver): Toolkit tk = Toolkit.getDefaultToolkit ( ); Image img = tk.getImage ("nomearq.gif"); MediaTracker mt = new MediaTracker (this); mt.addImage (img, 0); try { mt.waitForID ( 0 ); } catch (InterruptedException e) { } 122 Imagens (exemplo) import java.awt.*; public class TestPanelImg extends Frame { public TestPanelImg(String nomearq) { setTitle ("Teste de Imagem"); Panel p1 = new PanelImg (nomearq); add(p1); setBounds(100, 100, 200, 200); setVisible(true); } public static void main (String args[ ] ) { TestPanelImg oi = new TestPanelImg(args[0]); } } 123 Imagens (exemplo) class PanelImg extends Panel { Image img; public PanelImg (String nomearq) { img = Toolkit.getDefaultToolkit( ).getImage(nomearq); MediaTracker mt = new MediaTracker(this); mt.addImage (img, 0); // Carrega a imagem try { mt.waitForID (0); // Aguarda pelo carregamento } catch ( InterruptedException e ) { } } public void paint ( Graphics g ) { super.paint ( g ); Dimension d = getSize(); int largura = d.width; int altura = d.height; g.drawImage(img, 0, 0, largura, altura, this); } } 124 Imagens import java.awt.*; import java.io.File; (exemplo 2) import java.awt.event.*; import javax.swing.*; public class ViewImageFile extends JFrame implements ActionListener { PanelImg pImage; JButton btnFile; public ViewImageFile() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Visualizador de Imagens"); pImage = new PanelImg(null); btnFile = new JButton("Carrega Arquivo"); btnFile.addActionListener(this); Container cp = getContentPane(); cp.add(pImage, BorderLayout.CENTER); cp.add(btnFile, BorderLayout.SOUTH); setBounds(100, 100, 300, 300); setVisible(true); } 125 Imagens (exemplo 2) public void actionPerformed(ActionEvent e) { File arquivo = null; JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(this) == 0) { arquivo = fc.getSelectedFile(); String nomearq = arquivo.getAbsolutePath(); pImage.load(nomearq); } } public static void main(String[] args) { new ViewImageFile(); } 126 Imagens (exemplo 2) class PanelImg extends Panel { Image img; public PanelImg (String nomearq) { if (nomearq != null) load(nomearq); } public void load(String nomearq) { img = Toolkit.getDefaultToolkit().getImage(nomearq); MediaTracker mt = new MediaTracker(this); mt.addImage (img, 0); // Carrega a imagem try { mt.waitForID (0); // Aguarda pelo carregamento } catch ( InterruptedException e ) { } } 127 Imagens (exemplo 2) public void paint ( Graphics g ) { super.paint ( g ); Dimension d = getSize(); int largura = d.width; int altura = d.height; g.drawImage(img, 0, 0, largura, altura, this); } } } 128 Menus Barra de Menus JMenu (javax.swing.JMenuItem) JMenuItem Separadores (javax.swing.JMenu) Itens de Menus JMenuBar Menus (javax.swing.JMenuBar) addSeparator ( ) Adição da Barra de Menus à Frame JFrame.setJMenuBar ( ) 129 Menus Abilitar e Desabilitar Itens de Menus Ícones em Itens de Menus setIcon ( ) JMenuItem item = new JMenuItem ("Cut", new ImageIcon ( "cut.gif" ); Mnemônicos em Itens de Menus setEnable ( ) setMnemonic ( ) item.setMnemonic ( 'C' ); Teclas de Atalho em Itens de Menus setAccelerator ( ) item.setAccelerator ( KeyStroke.getKeyStroke ( KeyEvent.VK_C, InputEvent.CTRL_MASK) ); 130 Menus Caixas de Seleção em Itens de Meuns JCheckBoxMenuItem (javax.swing.JCheckBoxMenuItem) JCheckBoxMenuItem item = new JCheckBoxMeunItem ("Ready" ); menu.add ( item ); Botões de Rádio em Itens de Menus ButtonGroup (javax.swing.ButtonGroup) JRadioButtonMenuItem (javax.swing.JRadioButtonMenuItem) ButtonGroup bg = new ButtonGroup ( ); JRadioButtonMenuItem mitem = new JRadioButtonMenuItem ("Masc" ); mitem.setSelected ( true ); JRadioButtonMenuItem fitem = new JRadioButtonMenuItem ("Fem" ); bg.add ( mitem ); bg.add ( fitem ); menu.add ( mitem ); menu.add ( fitem ); 131 Menus (javax.swing.JMenu) class MeuMenu extends JFrame implements ActionListener { public MeuMenu ( ) { JMenuBar barraMenu = new JMenuBar ( ); JMenu editMenu = new JMenu ("Edit" ); JMenuItem item1 = new JMenuItem ("Paste" ); item1.addActionListener ( this ); editMenu.add ( item1 ); editMenu.addSeparator ( ); JMenuItem item2 = new JMenuItem ("Copy" ); item2.addActionListener ( this ); Importar: editMenu.add ( item2 ); java.awt.* barraMenu.add ( editMenu ); java.awt.event.* setJMenuBar ( barraMenu ); javax.swing.* show( ); } public void actionPerformed ( ActionEvent evt ) { } } 132 Menus Menus Flutuantes (pop-up) JPopupMenu (javax.swing.JPopupMenu) btn = new JButton ("Oi tudo bem"); getContentPane().add (btn, "South"); itemAzul = new JMenuItem ( "Azul" ); itemAzul.addActionListener ( this ); itemVermelho = new JMenuItem ( "Vermelho" ); itemVermelho.addActionListener ( this ); popup = new JPopupMenu(); popup.add ( itemAzul ); popup.add ( itemVermelho ); btn.addMouseListener ( new MouseAdapter ( ) { public void mouseReleased ( MouseEvent evt ) { if ( evt.isPopupTrigger() ) popup.show ( evt.getComponent(), evt.getX(), evt.getY() ); } } ); 133