Java Interfaces Gráficas e Banco de Dados
Java Interfaces Gráficas e Banco de Dados
Java Interfaces Gráficas e Banco de Dados
Rio de Janeiro
Java bsico 2
SUMRIO
1
Java bsico 2
Atividade 2 GUI em Java (complementar) ......................................................... 31
3.10 Menus ....................................................................................................... 31
3.11 Caixas de Dilogo...................................................................................... 34
3.12 Ordem de Travessia: Tab Order ............................................................... 34
Exerccios de Fixao 3 GUI em Java ................................................................. 35
Atividade 1 GUI em Java .................................................................................... 35
Atividade 2 GUI em Java (complementar) ......................................................... 36
4
Tratamento de Erros .................................................................................................... 37
Exerccio de nivelamento Tratamento de erros ................................................................ 37
4.1
Tipos de excees..................................................................................... 38
4.2
Descrever Excees em Mtodos ............................................................ 39
4.3
Levantar uma Exceo .............................................................................. 40
4.4
Criar Novas Excees ................................................................................ 41
4.5
Capturando Excees ............................................................................... 41
Exerccios de Fixao 4 Tratamento de Erros .................................................... 42
Atividade 1 GUI em Java .................................................................................... 43
Atividade 2 GUI em Java (complementar) ......................................................... 43
5
Controle de entrada (I/O)............................................................................................. 45
Exerccio de nivelamento I/O ............................................................................................ 45
5.1
Stream em Java ........................................................................................ 47
5.2
Entrada e Sada baseada em Bytes .......................................................... 48
5.3
Serializao de Objetos ............................................................................ 49
Exerccios de Fixao 5 Java I/O ........................................................................ 52
Atividade 1 Java I/O ........................................................................................... 52
Atividade 2 Java I/O (complementar) ................................................................ 52
6
Java Database Conectivity - JDBC ................................................................................. 55
Exerccio de nivelamento JDBC ......................................................................................... 55
6.1
O que JDBC ............................................................................................ 55
6.2
Componetes JDBC .................................................................................... 57
6.3
Driver JDBC ............................................................................................... 58
6.4
Classe Connection .................................................................................... 60
6.5
Classe DriverManager e URLs JDBC.......................................................... 60
6.6
Princpios das aplicaes JDBC ................................................................. 61
6.6.1 Operao Interativa: comandos SQL estticos .................................... 62
6.7
Statement ................................................................................................. 62
6.8
ResultSet ................................................................................................... 62
6.8.1 ResultSet rolvel e atualizvel.............................................................. 64
6.8.2 Fechando Recursos............................................................................... 66
Exerccios de Fixao 6 Java JDBC...................................................................... 66
Atividade 1 Java JDBC ........................................................................................ 66
Atividade 2 Java JDBC ........................................................................................ 67
7
Manipulando Resultados de Consultas ........................................................................ 67
7.1
Uso da classe Properties .......................................................................... 68
ii
Java bsico 2
7.2
DAO e Java Bean ....................................................................................... 69
7.3
Instrues Preparadas .............................................................................. 70
7.4
Executando atualizaes em fontes de dados ......................................... 71
7.5
Exemplo Java Bean ................................................................................... 72
7.6
Exemplo DAO............................................................................................ 73
7.7
Exemplo de Incluso................................................................................. 74
7.8
Exemplo Alterao ................................................................................... 74
7.9
Exemplo de Consulta ................................................................................ 75
7.10 Exemplo de Excluso ................................................................................ 75
Exerccios de Fixao 7 Java JDBC...................................................................... 76
Atividade 1 Java JDBC ........................................................................................ 76
Atividade 2 Java JDBC ........................................................................................ 77
8
Gerenciamento de Transaes .................................................................................... 79
8.1
Stored Procedures .................................................................................... 79
8.2
Transaes ................................................................................................ 80
8.3
Execuo em Batch................................................................................... 81
Exerccios de Fixao 8 Java JDBC...................................................................... 82
Atividade 1 Java JDBC ........................................................................................ 83
Atividade 2 Java JDBC ........................................................................................ 84
9
Biblioteca Jasper Relatrios ...................................................................................... 85
9.1
Biblioteca JasperReport............................................................................ 85
9.2
Exemplo de utilizao das etapas para criao de relatrios .................. 86
9.2.1 1 Etapa Criao da conexo ............................................................. 86
9.2.2 2 Etapa Criao da conexo ............................................................. 88
9.2.3 3 Etapa Visualizao do relatrio .................................................... 94
9.3
Incluindo relatrio na aplicao Java ....................................................... 95
9.4
Classe java para gerao de relatrio ...................................................... 95
9.5
Gerando um relatrio na interface grfica .............................................. 96
9.6
Relatrio com Passagem de Parmetros ................................................. 97
Exerccios de Fixao 9 Java JDBC...................................................................... 99
Atividade 1 Java JDBC ........................................................................................ 99
Atividade 2 Java JDBC ...................................................................................... 100
10 Bibliografia ................................................................................................................. 101
iii
Java bsico 2
Voc poderia descrever alguns componentes visuais grficos que utilizou para desenvolvimento destas
interfaces?
Breve Histrico:
Java bsico 2
1.1 Introduo
Quando a linguagem Java 1.0 foi lanada, ela continha somente a biblioteca de
classes AWT (Abstract Window Toolkit) para programao GUI (Graphical User
Interface) bsica. A maneira que o AWT funciona a delegao de criao de seus
componentes GUI nativos. Na verdade, quando a criao de uma caixa de texto era feita, a
linguagem criava por trs uma caixa semelhante (peer) que fazia todos os tratamentos.
Dessa maneira conseguia-se rodar os programas em vrias plataformas, tendo o programa
com o mesmo aspecto (HORSTMANN, 2003).
Em aplicaes mais complexas, essa metodologia no era muito produtiva, pois era
realmente difcil escrever determinados cdigos. Outro problema era que o comportamento
de determinados componentes mudava de plataforma para plataforma, ou determinados
ambientes no tinham uma vasta biblioteca de componentes grficos, o que levava a um
esforo muito grande para a padronizao das aplicaes.
Em 1996 a Netscape criou a biblioteca GUI chamada IFC Internet Foundation
Classes que usava uma metodologia completamente diferente. Aqui, todos os
componentes eram desenhados numa tela em branco. Assim, os componentes grficos se
tornavam parecidos com os nativos das plataformas. A Sun trabalhou junto com a Netscape
para aprimorar essa biblioteca, e criaram a biblioteca Swing.
Assim, o conjunto swing foi tornado o kit de ferramentas GUI oficial da JFC (Java
Foundation Classes).
Evidentemente, os componentes do swing so um tanto quanto mais lentos que os
criados usando AWT, mas o uso em mquinas mais modernas mostrou que a diferena no
mais to problemtica.
O problema da aparncia em relao ao sistema nativo foi resolvido, usando o
conceito de look and feel, onde se pode escolher a aparncia que se quer que o sistema
tenha. Mesmo assim, a Sun desenvolveu uma aparncia independente de plataforma,
chamada Metal. A biblioteca swing se encontra em: javax.swing.*.
Na verso atual a linguagem Java suporta duas bibliotecas grficas: a AWT e a
Swing. A biblioteca AWT foi a primeira API voltada para interfaces grficas a surgir no
Java. Posteriormente surgiu a biblioteca Swing (a partir do Java 1.2), que possui algumas
melhorias com relao antecessora. De uma forma geral, apesar do reza o senso comum,
as bibliotecas grficas so bastante simples no que diz respeito a conceitos necessrios para
us-las.
Os sentimentos de complexidade e dificuldade visualizados no aprendizado de
interfaces grficas em Java so devidos ao tamanho das bibliotecas e enorme gama de
possibilidades, as quais certamente assustaro o desenvolvedor de primeira viagem. As
bibliotecas AWT e Swing as bibliotecas grficas oficiais, sempre inclusas em qualquer
pacote distribudo pela Sun. Porm, alm destas, existem algumas outras bibliotecas de
terceiros, sendo a mais famosa o SWT, desenvolvido pela IBM.
2
Java bsico 2
Outra questo que vale a pensa ser ressaltada o fato que a linguagem Java, antes
de tudo prima pelo lema da portabilidade e as API de interface grfica do Java no
poderiam ser diferentes. A aparncia das janelas construdas com a API Swing nica em
todas as plataformas onde roda (Windows, KDE, Gnome). Com isso pode-se afirmar que a
aplicao ter exatamente a mesma interface e aparncia com pequenas variaes geradas
por peculiaridades dos sistemas operacionais, como por exemplo, as fontes utilizadas nas
janelas. Grande parte da complexidade das classes e mtodos do Swing est no fato da API
ter sido desenvolvida tendo em mente o mximo de portabilidade possvel. Favorece-se,
por exemplo, o posicionamento relativo de componentes em detrimento do uso de
posicionamento relativo que poderia prejudicar usurios comresolues de tela diferentes
da prevista.
1.2 Janelas
Uma janela de mais alto nvel, que no est contida em nenhum outro componente,
chamada quadro (frame). Em AWT a classe Frame. Em Swing JFrame. Essa classe
no desenhada dentro de uma tela de desenho (canvas), portanto a moldura toda
desenha pelo gerenciador de janelas nativo.
Os quadros so exemplos de contineres, isto , podem conter componentes de
interface de usurio dentro deles. Por exemplo:
import javax.swing.*;
class FirstFrame extends JFrame {
public FirstFrame() {
setTitle("FirstFrame");
setSize(300, 200);
}
}
public class FirstTest {
public static void main(String[] args) {
JFrame frame = new FirstFrame();
frame.show();
}
}
Java bsico 2
void
void
void
void
void
void
void
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
windowDeactivated(WindowEvent e)
windowDeiconified(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
Java bsico 2
No nosso caso, s precisamos tratar o mtodo windowClosing. Fica incmodo ter
que implementar seis mtodos vazios. Para isso existe a classe WindowAdapter, que
implementa todos esses sete mtodos como sendo vazios. Com isso, pode-se s sobrepor
os mtodos que se quer tratar:
class Terminator extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
Java bsico 2
Por exemplo:
class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
// o cdigo de desenho vem aqui
}
}
Java bsico 2
1.7 Imagens
Para mostrar um grfico num aplicativo, usa-se a classe Toolkit. Por exemplo:
String nome = blue-ball.gif;
Image img = Toolkit.getDefaultToolkit().getImage(nome);
g.drawImage(img, 10, 10, null);
Java bsico 2
Java bsico 2
Por exemplo:
MeuPanel painel = new MeuPanel();
JButton botao = new JButton(Limpar);
botao.addActionListener(painel);
Aqui, o objeto painel ser notificado sempre que um evento ocorrer em boto. A
classe MeuPainel deve possuir uma construo parecida com:
public class MeuPainel extends JPanel implements ActionListener {
public void actionPerformed(ActionEvent evt) {
...
}
Java bsico 2
}
Quando se tem muitos botes, que possuem o mesmo ouvinte, se torna necessrio
saber qual objeto fonte gerou o evento. Existem duas maneiras fceis de se tratar isso,
dentro do mtodo actionPerformed:
String command = evt.getActionCommand();
if (command.equals(OK)) ...
Vendo a hierarquia percebe-se que o AWT faz distino entre eventos semnticos,
que expressam o que o usurio est fazendo, e de baixo nvel, que tornam os eventos
semnticos possveis. Por exemplo, um clique de um boto, na verdade uma sequncia de
outros pequenos eventos, como pressionamento do boto, movimentao do mouse
enquanto pressionado e liberao do boto.
10
Java bsico 2
pressionar TAB para mover o foco sequencialmente componente a componente, de cima
para baixo, da esquerda para direita.
Pode-se evitar que um componente receba o foco simplesmente sobrepondo o
mtodo isFocusTransversable para que retorne false.
Um ouvinte de foco precisa implementar dois mtodos: focusGained e focusLost.
Esses eventos so acionados quando a origem ganhar ou perder o foco, respectivamente.
Cada um esses mtodos tem um parmetro FocusEvent. H dois mtodos teis nessa
classe: getComponent que retorna o componente que recebeu ou perdeu o foco, e
isTemporary que retorna true se a mudana do foco foi temporria. Uma mudana
temporria do foco acontece quando um componente perde o controle temporariamente
para depois recupera-lo automaticamente.
Exemplo:
public void focusLost(FocusEvent evt) {
if (evt.getComponent()==ccField && !!evt.isTemporary()) {
If (!checarFormato(ccField.getText()))
ccField.requestFocus();
}
}
Outros mtodos podem ser sobrepostos como keyReleased, que diz quando uma
tecla foi liberada.
11
Java bsico 2
current = find(x, y);
if (current < 0) // not inside a square
add(x, y);
}
public void mouseClicked(MouseEvent evt) {
int x = evt.getX();
int y = evt.getY();
if (evt.getClickCount() >= 2) {
remove(current);
}
}
});
addMouseMotionListener(this);
}
12
Java bsico 2
3 O Pacote Swing
3.1 Componentes visuais e grficos do pacote Swing
Java bsico 2
14
Java bsico 2
Neste exemplo, a ltima linha seta o layout que ser usado na impresso dos
controles na tela. Nesse caso, os controles sero centralizados:
contentPane.setLayout(new FlowLayout(FlowLayout.CENTER));
A funo setLayout um mtodo do continer, que pode receber qualquer uns dos
layouts definidos. Em particular, o FlowLayout usado para alinhar os controles,
centralizado, esquerda ou direita.
15
Java bsico 2
3.2.1 Bordas
O gerenciador de layout de visualizao de bordas (BorderLayout) o gerenciador
padro do JFrame. Este gerenciador permite escolher em que posio se deseja colocar o
controle.
16
Java bsico 2
Por exemplo:
Class MyPanel extends Jpanel {
...
jButton1.setText("Norte");
getContentPane().add(jButton1, java.awt.BorderLayout.PAGE_START);
jButton2.setText("Sul");
getContentPane().add(jButton2, java.awt.BorderLayout.PAGE_END);
jButton3.setText("Oeste");
getContentPane().add(jButton3, java.awt.BorderLayout.LINE_START);
jButton4.setText("Leste");
getContentPane().add(jButton4, java.awt.BorderLayout.LINE_END);
jButton5.setText("Centro");
getContentPane().add(jButton5, java.awt.BorderLayout.CENTER);
...
}
3.2.2 Painis
O problema do Layout de Borda, quanto ao redimensionamento dos componentes
para que ocupem o espao disponvel em cada uma das regies disponveis, pode ser
contornado atravs do uso de painis adicionais. Esses painis agem como continers para
controles. Dentro desses painis pode-se utilizar outro layout, podendo assim fazer uma
mescla de vrios tipos.
Por exemplo:
Conteiner contentPane = getContentPane();
Jpanel panel = new JPanel();
panel.add(yellowButton);
panel.add(blueButton);
panel.add(redButton);
contentPane.add(panel, South);
3.2.3 Grade
O gerenciador de layout de visualizao de grade (GridLayout) organiza todos os
componentes em linhas e colunas como uma planilha. Neste layout as clulas so todas do
mesmo tamanho.
No construtor do objeto layout de grande, deve-se especificar quantas linhas e
colunas se quer:
panel.setLayout(new GridLayout(5, 4);
17
Java bsico 2
Pode-se tambm especificar os espaamentos horizontal e vertical (respectivamente
e em pixels) desejados:
panel.setLayout(new GridLayout(5, 4, 3, 3);
3.2.4 Caixa
O gerenciador de layout de visualizao de Caixa (BoxLayout) permite colocar
uma nica linha ou coluna de componentes com mais flexibilidade de que o layout de
grade. Existe um continer (Box) cujo gerenciador padro de layout o BoxLayout,
diferentemente da classe Panel, cujo gerenciador o FlowLayout.
Exemplos. Para criar um novo continer com layout de caixa, faz-se:
Box b = Box.createHorizontalBox();
ou
Box b = Box.createVerticalBox();
18
Java bsico 2
Para no se ter problemas com um controle que dentro de um layout de caixa fique
com uma altura no desejada, faz-se com que seu tamanho mximo seja o tamanho
preferencial. Por exemplo:
textField.setMaximumSize(textField.getPreferredSize());
Para se adicionar algum espao entre, por exemplo, botes OK e Cancel numa tela,
pode-se fazer:
b.add(okButton);
b.add(Box.createHorizontalStrut(5));
b.add(cancelButton);
Que adiciona uma escora vertical, numa caixa vertical, ou uma escora horizontal
numa caixa vertical, separando os componentes em exatamente 5 pixels (no exemplo).
Pode-se usar tambm uma rea rgida invisvel, sendo similar a um par de escoras,
separando os componentes adjacentes, mas tambm adicionando uma altura ou largura
mnima na outra direo. Por exemplo:
b.add(Box.createRigidArea(new Dimension(5, 20)));
Adiciona uma rea invisvel com largura mnima, preferencial e mxima de 5 pixels
e altura de 20 pixels, mas alinhamento centralizado.
Adicionar cola faz o contrrio que uma espora, separa os componentes tanto quanto
possvel.
b.add(okButton);
b.add(Box.createGlue());
b.add(cancelButton);
Java bsico 2
Para descrever o layout do gerenciador de bolsa de grade, necessrio percorrer o
seguinte procedimento:
Por exemplo:
GridBagLayout layout = new GridBagLayout();
panel.setLayout(layout);
GridBagConstraints restricoes = new GridBagConstraints();
restricoes.weightx = 100;
restricoes.weighty = 100;
restricoes.gridx = 100;
restricoes.gridy = 100;
restricoes.gridwidth = 100;
restricoes.gridheight = 100;
JList estilo = new JList();
panel.add(estilo, restricoes);
20
Java bsico 2
O campo anchor usado quando o componente no ocupa o espao todo da rea.
Pode-se ancor-lo em algum espao dentro do campo. Pode ser:
GridBagConstraints.CENTER,
GridBagConstraints.NORTH,
GridBagConstraints.NORTHEAST, GridBagConstraints.EAST, etc.
Para tornar a confeco desse layout mais tranquilo, pode-se usar a seguinte receita:
1. Esboar o layout do componente numa folha de papel;
2. Encontrar uma grade tal que os pequenos componentes fiquem contidos,
cada um, em uma clula, e os componentes grandes ocupem diversas
clulas;
3. Rotular as linhas e as colunas da grade com 0, 1, 2, 3, .... Com isso,
consegue-se os calores de gridx, gridy, gridwidth e gridheight;
4. Para cada componente, deve-se saber se ele precisa preencher sua clula
horizontalmente ou verticalmente. Caso no, como fica alinhado? Isso
determina fill e anchor;
5. Fazer todos os pesos iguais a 100. Contudo, se for preciso que uma linha ou
coluna fique no tamanho padro, deve-se fazer weightx ou weighty iguais
a 0 em todos os componentes que pertenam a essa linha ou coluna;
6. Escrever
cdigo.
Conferir
cuidadosamente
os
valores
de
GridBagConstraints, pois um nico valor errado poder arruinar todo o
layout.
21
Java bsico 2
Java bsico 2
Java bsico 2
O tratamento de eventos de alterao de texto pode ser feito atravs da instalao de
um ouvinte na interface Document.
textField.getDocument().addDocumentListener(ouvinte);
char[] getPassword();:
// 8 linhas e 40 colunas
24
Java bsico 2
Quando
se
quer
void selectAll();:
int getSelectionStart();:
int getSelectionEnd();:
String getSelectedText();:
especificados;
3.4 Rtulos
So componentes que possuem uma linha de texto simples, que no reagem s
opes do usurio. So usados como informativos, ou como nome de campos na tela, etc.
JLabel label = new JLabel(Nome: , JLabel.LEFT);
25
Java bsico 2
Java bsico 2
smallButton = new JRadioButton(Small, true);
mediumButton = new JRadioButton(Medium, false);
...
ButttonGroup group = new ButtonGroup();
group.add(smallButton);
group.add(mediumButton);
...
3.7 Borda
So usados para delimitar partes da interface, como diferentes grupos de rdio. Para
isso, pode-se seguir os seguintes passos:
1. Chame um mtodo esttico de BorderFactory para criar uma borda. Podese escolher entre os seguintes estilos:
a. Relevo abaixado (lowered bevel)
b. Relevo destacado (raised bevel)
c. Entalhe (etched)
d. Linha (line)
e. Fosco (matte)
f. Vazio (empty)
27
Java bsico 2
2. Se quiser, adicione um ttulo borda, passando-o ao mtodo
BorderFactory.createTitledBorder(String).
3. Se voc quiser experimentar de tudo, pode-se combinar bordas com
BorderFactory.createCompoundBorder().
4. Adicione a borda resultante ao componente usando o mtodo setBorder da
classe JComponent.
Por exemplo:
Border etched = BorderFactory.createEtchedBorder();
Border titled = BorderFactory.createTitledBorder(etched, Titulo);
Panel.setBorder(titled);
3.8 Listas
Listas so usadas para escolhas com vrias opes. O Swing oferece um objeto
muito completo para se gerenciar esse tipo de lista, permitindo tanto strings quanto objetos
quaisquer.
O componente JList usado para manter um conjunto de valores dentro de uma s
caixa para seleo, permitindo tanto selees nicas quanto mltiplas. Exemplo:
String[] words = {quick, brown, hungry, wild};
JList wordList = new JList(words);
// mostra 10 itens
Por default a lista permite mltipla seleo, para usar seleo nica, usa-se:
wordList.setSelectionModel(ListSelectionModel.SINGLE_SELECTION);
28
Java bsico 2
O mtodo de notificao, tratamento de eventos, no se d atravs do
monitoramento de eventos de ao, mas sim eventos de seleo de lista. Deve-se
implementar o mtodo:
public void valueChanged(ListSelectionEvent evt)
3.9 Combos
uma lista que fica escondida, e quando o usurio clica no campo, a lista se abre.
Se a caixa estiver configurada para ser editvel, pode-se editar a seleo como se fosse
uma caixa de texto.
style = new JComboBox();
style.setEditable(true);
style.addItem(Serif);
style.addItem(SansSerif);
...
29
Java bsico 2
Esse mtodo (addItem) adiciona a string no final da lista; pode-se tambm inserir
em qualquer lugar:
style.insertItemAt(Monospaced, 0);
Para tratar dos eventos, captura-se um evento de ao, logo, tratando-se o mtodo
actionPerformed:
public void actionPerformed(ActionEvent evt) {
JComboBox source (JComboBox)evt.getSource();
String item = (String)source.getSelectedItem();
panel.setStyle(item);
}
Java bsico 2
mover todos os itens da lista 01 para a lista 02; mover os itens selecionados da lista 02
para a lista 01; e mover todos os itens da lista 02 para lista 01. Por fim, implemente um
boto que possibilidade remover os itens selecionados de cada uma das listas (um
boto para cada lista).
2. Escreva uma aplicao Swing Java com uma interface que permita a seleo
(JComboBox) de uma entre 5 opes de cores que sero utilizadas para preencher a cor
de fundo do JFrame onde a caixa de seleo foi disponibilizada.
3. Escreva uma janela JDialog que exiba uma pergunta (em um rtulo JLabel) e cinco
alternativas de resposta (usando botes de opes de JRadioButton). A pergunta e suas
alternativas devem ser especificadas por mtodos prprios, bem como a resposta
correta. Apenas uma alternativa poder ser selecionada. Por meio de um boto JButton,
a aplicao dever avaliar se a resposta est ou no correta, impedindo a partir de seu
acionamento a alterao da resposta. Como opo ajustvel, a janela deve exibir uma
mensagem de dilogo (com JOptionPane) com a indicao de acerto ou erro.
4. Escreva uma aplicao Swing Java que implemente uma sequncia de questes a serem
apresentadas pela janela implementada no exerccio 3. Esta aplicao dever calcular e
escrever uma mensagem (JOptionPane) com o total de acertos e erros obtidos.
3.10 Menus
No necessrio um gerenciador de layout para se colocar um menu numa janela.
Sua elaborao direta:
JMenuBar menuBar = new JMenuBar();
Uma barra de menu pode ser colocada onde se queira, mas normalmente aparece na
parte superior do frame. Usa-se:
frame.setJMenuBar(menuBar);
31
Java bsico 2
editMenu.addSeparator();
...
Para criar itens de menu usando botes de rdio e check boxes, usa-se outros
objetos:
JCheckBoxMenuItem readOnlyItem = new JCheckBoxMenuItem(Read-only);
OptionsMenu.add(readOnlyItem);
32
Java bsico 2
Os itens de menu em forma de botes de rdio funcionam exatamente como
controles comuns, isto , deve-se criar um grupo para eles, para possuam o efeito esperado:
ButtonGroup group = new ButtonGroup();
JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem(Insert);
insertItem.setSelected(true);
JRadioButtonMenuItem overtypeItem = new JRadioButtonMenuItem(Overtype);
group.add(insertItem);
group.add(overtypeItem);
optionsMenu.add(insertItem);
optionsMenu.add(overtypeItem);
Mas isso pode levar o cdigo a ficar cheio de instrues lidando com os menus.
Ento pode-se usar um tratador de eventos de menu. Existe o MenuListener, com trs
mtodos:
void menuSelected(MenuEvent evt); // chamado antes do menu ser exibido
void menuDeselected(MenuEvent evt);// depois que o menu removido da tela
void menuCanceled(MenuEvent evt); // qdo a seleo cancelada
33
Java bsico 2
confirmao (OK/Cancelar);
Para se criar uma janela de dilogo prpria, como a janela sobre, deve-se derivar
uma classe de JDialog.
34
Java bsico 2
O problema ocorre quando um continer contiver outros contineres e assim por
diante. Quando o foco vai para outro continer, automaticamente ele colocado no
componente mais acima e mais esquerda desse continer, para depois percorrer os outros
componentes.
Para alterar essa ordem pode-se usar duas formas. A primeira chamando:
okButton.requestFocus();
size.
Que faz com que o prximo componente a receber o foco, depois do style seja o
35
Java bsico 2
36
Java bsico 2
4 Tratamento de Erros
Exerccio de nivelamento Tratamento de erros
Voc j desenvolveu alguma aplicao que utilizou tratamento de erros? Em que linguagem?
Tratamento de erros
Detectar e tratar erros ou falhas
Durante a execuo de mtodos
Erro de lgica
Uso inadequado da API
Uso de classes especializadas
No compromete a inteligibilidade do cdigo
Implementadas por meio de interfaces
Java bsico 2
As excees que derivam da RuntimeError incluem problemas como:
38
Java bsico 2
Java bsico 2
Em um erro de programao;
Ou, se preferir:
EOFException e = new EOFException();
throw e;
40
Java bsico 2
A EOFException tambm tem um outro construtor, que recebe uma string, que
serve para descrever a condio do erro mais detalhadamente. Exemplo:
throw new EOFException(Contedo completo recebido.);
Dentro do trecho try coloca-se o cdigo que ser executado e verificado por um
determinado erro. Se uma exceo ocorrer, ela ser de um determinado tipo, e conforme o
tipo, a execuo ser desviada para um trecho catch que trata esse tipo de exceo. Podese ter um ou mais trechos catch, conforme a necessidade.
41
Java bsico 2
42
Java bsico 2
Java bsico 2
c. getChar para leitura de um caractere, com um parmetro do tipo String
contendo um conjunto de caracteres aceitos.
5. Faa uma classe executvel Java que teste entradas de dados para cada um dos mtodos
implementados no enunciado 4 e trate possveis excees (problemas de converso
com a estrutura try-catch).
44
Java bsico 2
Pacote java.io
Leitura/Escrita de Dados
Orientada a bytes (modo binrio)
Orientada a caracteres (modo texto)
Serializao de Objetos
Outros
Acesso Aleatrio: classe RandomAccessFile
Informaes sobre arquivos e diretrios: classe File
Uma stream de I/O gera o caminho por meio do qual seus programas podem enviar
uma sequncia de bytes de uma fonte at um destino. Uma stream de entrada uma fonte
(ou produtor) de bytes e uma stream de sada o destino (ou consumidor).
Todas as funes de I/O stream tratam os arquivos de dados ou os itens de dados
como uma corrente ou um fluxo (stream) de caracteres individuais. Se for escolhida uma
funo de stream apropriada, a aplicao poder processar dados em qualquer tamanho ou
formato, desde simples caracteres at estruturas de dados grandes e complicadas.
Tecnicamente falando, quando um programa usa uma funo stream para abrir um arquivo
para I/O, o arquivo que foi aberto associado com uma estrutura do tipo FILE que contm
informaes bsicas sobre o arquivo.
45
Java bsico 2
Uma vez aberta a stream, retornado um ponteiro para a estrutura FILE. Este
ponteiro FILE algumas vezes chamado de ponteiro stream ou stream usado para fazer
referncia ao arquivo para todas as entradas/sadas subsequentes.
Todas as funes de I/O stream fornecem entrada e sada bufferizada, formatada ou
no formatada. Uma stream bufferizada proporciona uma localizao de armazenamento
intermediria para todas as informaes que so provenientes de stream e toda sada que
est sendo enviada a stream. I/O em disco uma operao que toma tempo, mas a
bufferizao da stream agilizar sua aplicao. Ao invs de introduzir os dados stream, um
caractere ou uma estrutura a cada vez, as funes I/O stream acessam os dados em um
bloco de cada vez.
medida que a aplicao necessita processar a entrada, ela simplesmente acessa o
buffer, o que um processo muito mais rpido. Quando o buffer estiver vazio, ser
acessado um novo bloco de disco. O inverso tambm verdadeiro para sada stream. Ao
invs de colocar fisicamente na sada todos os dados, medida que executada a instruo
de sada, as funes de I/O stream colocam todos os dados de sada no buffer. Quando o
buffer estiver cheio, os dados sero escritos no disco.
Dependendo da linguagem de alto nvel que estiver sendo utilizada, pode ocorrer
um problema de I/O bufferizado. Por exemplo, se o programa executar vrias instrues de
sada que no preencham o buffer de sada, condio necessria para que ele fosse
descarregado no disco, aquelas informaes sero perdidas quando terminar o
processamento de programa.
A soluo geralmente envolve a chamada de uma funo apropriada para limpar
o buffer. claro que uma aplicao bem escrita no dever ficar dependendo destes
recursos automticos, mas dever sempre detalhar explicitamente cada ao que o
programa deve tomar. Mais uma observao: se a aplicao terminar de maneira anormal
quando se estiver usando stream I/O, os buffers de sada podem no ser esgotados
(limpos), resultando em perda de dados.
O ltimo tipo de entrada e sada chamado low-level I/O I/O de baixo nvel.
Nenhuma das funes de I/O de baixo nvel executa bufferizao e formatao. Ao invs
disso, elas chamam diretamente os recursos de I/O do sistema operacional. Estas rotinas
permitem acessar arquivos e dispositivos perifricos em um nvel mais bsico do que as
funes stream.
Os arquivos abertos desta maneira retornam um manipulador de arquivo, um valor
inteiro que utilizado para fazer referncia ao arquivo em operaes subseqentes. Em
geral, uma prtica ruim de programao misturar funes de I/O stream com rotinas de
baixo nvel.
Como as funes stream so bufferizadas e as funes de baixo nvel no, a
tentativa de acessar o mesmo arquivo ou dispositivo por dois mtodos diferentes leva
confuso e eventual perda de dados nos buffers.
46
Java bsico 2
Java bsico 2
Esses mtodos sero os responsveis pela transformao da classe em bytes e viceversa. Existem classes concretas para essas interfaces, que so ObjectOutputStream e
ObjectInputStream. Este recurso, serializao, pode ser utilizado em aplicaes visuais, por
exemplo, para permitir que os usurios salvem seus trabalhos em um arquivo. Neste caso,
antes de escrever um objeto em uma stream, os objetos devero ser serializados.
Deve-se considerar a serializao de objetos semelhante diviso de um objeto em
pequenos pedaos para poder escrev-los em uma stream de bytes. O termo para este
processo serializao de objetos.
48
Java bsico 2
} catch(Exception e) {
System.out.println(e);
}
}
}
49
Java bsico 2
Depois de instanciar objetos da classe produto ns podemos ter uma aplicao Java
que possibilite a serializao destes objetos e grav-los em um arquivo em disco. O ideal
que a regra de negcio fique separada da interface grfica. Com isso, podemos criar uma
classe responsvel pelo acesso ao arquivo, onde os objetos gravados so apresentados no
cdigo a seguir:
50
Java bsico 2
Por fim, desenvolvemos uma interface grfica que ir fazer uso da classe que
permite a instncia de objetos serializados que sero repassados para a classe que gerencia
a regra de negcio da aplicao. Esta ltima ser responsvel por persistir o objeto
instanciado em memria num arquivo em disco. O cdigo a seguir ilustra o uso da classe
serializvel e da classe de regra de negcio para possibilitar a manipulao de objetos
armazenados num arquivo em disco:
51
Java bsico 2
Java bsico 2
contra-cheque de um funcionrio deve ser exibido, com as seguintes informaes:
nome do funcionrio, salrio bruto (se da categoria 1, o prprio salrio-base; se da
categoria 2, o salrio-base + 5%; se da categoria 3, o salrio-base + 15%), descontos
(se salrio bruto maior ou igual a 1000, 3% sobre o salrio bruto; caso contrrio, 1%
sobre o salrio bruto) e salrio lquido (salrio bruto descontos). Desenvolva um
aplicao GUI em Java que apresente as seguintes opes:
a) Incluir (solicitao dos dados de um funcionrio e gravao de um registro
com os dados da folha de pagamento no arquivo)
b) Listar (leitura dos dados da folha de pagamento de um funcionrio do
arquivo, mostrando as informaes do contra-cheque)
2. A comisso organizadora de um campeonato de atletismo decidiu apurar os resultados
da competio atravs de um processamento eletrnico. De cada atleta so lidos:
cdigo de identificao, nome e o tempo gasto em cada uma das 5 provas que formam
a competio. Esses dados so armazenados em um arquivo. Ao final de cada prova, a
pontuao atribuda de acordo com o tempo realizado em cada prova (quem gastou
menos tempo est em 1 lugar) e feita da seguinte maneira: 1 colocado: 5 pontos, 2
colocado: 3 pontos e 3 colocado: 1 ponto. Essa pontuao atualizada na pontuao
geral do campeonato. Desenvolva uma aplicao GUI em Java que apresente as
seguintes opes:
a) Incluso dos dados (solicitao dos dados de um atleta e gravao de um
registro no arquivo)
b) Classificao (leitura dos dados dos atletas e processamento dos tempos e
pontos)
53
Java bsico 2
54
Java bsico 2
JDBC fornece uma biblioteca padro para acessar base de dados relacionais. A API
padroniza o meio para estabelecer a conexo com a fonte de dados, a abordagem para
iniciar a execuo de uma consulta SQL, a estrutura de dados resultante da consulta SQL
para que possam ser manipuladas na interface grfica e um conjunto de classes de interface
que possibilitam manipular os dados por meio de instrues preparadas, bem como a
possibilidade de manipulao de metadados das fontes de dados que esto sendo
manipuladas. importante ressaltar que esta API no padroniza a sintaxe SQL em uso.
A arquitetura da API JDBC foi desenvolvida para ser independente de plataforma e
consiste basicamente de duas partes:
55
Java bsico 2
JDBC API, uma API java-based pura
JDBC Driver Manager, usado para estabelecer conexo com drivers
especficos de fabricantes de BD/SGBD.
56
Java bsico 2
Alm de acessos usando-se drivers, pode-se usar uma ponte que vai desde o JDBC
ao ODBC, para acesso de bases Win32.
A arquitetura JDBC pode ser visualizada na seguinte figura:
JDBC fornece em sua API um conjunto de classes genricas para acesso a qualquer
tipo de banco de dados baseado em SQL.
Java bsico 2
58
Java bsico 2
59
Java bsico 2
60
Java bsico 2
A ilustrao da figura 25 apresenta os passos necessrios para a utilizao do
DriverManager dentro de uma aplicao Java com acesso a banco de dados.
61
Java bsico 2
6.7 Statement
O objeto Statement permite o envio de comandos SQL ao banco de dados e a
obteno dos resultados produzidos por esses comandos.
A obteno dos objetos Statement feita pelo mtodo creadStatement() do objeto
Connection, e a execuo do comando SQL pelos mtodos executeQuery(),
executeUpdate() ou execute().
O objeto Statement possibilita a execuo de instrues SQL CRUD, sendo o
mtodo executeQuery() utilizado para instrues SELECT e os mtodos executeUpdate() e
execute() para instrues INSERT, UPDATE e DELETE. O uso deste objeto ilustrado
no passo 3 da figura 26.
6.8 ResultSet
O objeto ResultSet utilizado para armazenar o resultado dos comandos SQL
executados no Statement pelo mtodo executeQuery(). O acesso aos dados do ResultSet
feito pelo mtodos getXXX(), onde XXX pode ser um dos tipo JDBC apresentados a
seguir:
62
Java bsico 2
63
Java bsico 2
comum.
64
Java bsico 2
iterao bidirecional, como tambm fornecer uma visualizao "ativa" dos dados
no banco de dados quando forem alterados.
leitura.
somente
65
Java bsico 2
Java bsico 2
d. Para todo projeto localizado em Araucaria, liste o nome do projeto, o
nome do departamento de controle e o ltimo nome, endereo e data de
nascimento do gerente do departamento.
e. Encontre o nome dos empregados que trabalham em todos os projetos
controlados pelo departamento nmero 5.
f. Para cada projeto, liste o nome do projeto e o total de horas por semana (de
todos os empregados) gastas no projeto.
g. Recupere os nomes de todos os empregados que trabalhem mais de 10 horas
por semana no projeto Automatizacao.
h. Recupere os nomes de todos os empregados que no trabalham em nenhum
projeto.
i. Recupere a mdia salarial de todos os empregados do sexo feminino.
j. Para cada departamento, recupere o nome do departamento e a mdia
salarial de todos os empregados que trabalham nesse departamento.
67
Java bsico 2
Uma vez criado o arquivo de propriedades, uma aplicao Java pode acess-lo e
realizar a leitura de cada um dos valores dos identificadores nele armazenados. Para isso
devemos utilizar o mtodo getProperty() da classe Properties conforme exemplo a seguir:
68
Java bsico 2
69
Java bsico 2
Por fim, objetos das classes DAO e Java Bean sero utilizados no processo de
desenvolvimento da interface grfica para possibilitar a manipulao de dados
armazenados na fonte de dados. Este processo ilustrado na figura a seguir.
Java bsico 2
PreparedStatement pstmt = con.prepareStatement(
insert into teste (cod, nome) values (?, ?));
Esse mtodo no retorna resultado, somente gera exceo caso haja erro.
71
Java bsico 2
72
Java bsico 2
73
Java bsico 2
74
Java bsico 2
75
Java bsico 2
76
Java bsico 2
77
Java bsico 2
78
Java bsico 2
8. Gerenciamento de Transaes
8.1 Stored Procedures
So procedimentos armazenados no banco de dados, prontas para execuo, que
podem ou no ter parmetros, e tambm podem ou no ter algum resultado.
Suponha que exista uma stored procedure no nosso banco, chamada:
consultaempregado, que recebe um parmetro, o cdigo de um funcionrio e retorna o
seu nome caso o encontre. A ilustrao abaixo apresenta o cdigo da stored procedure
implementada dentro de uma SGBD:
Quando se quer que a Stored Procedure retorne um valor, sem ser um parmetro de
retorno, a sintaxe da string dentro do prepareCall :
{?= call [,, ...]}
registerOutParameter.
Todos
os
parmetros
de
sada
(OUT)
devem
Java.
ser
registrados
com
79
Java bsico 2
8.2 Transaes
Uma transao um conjunto de um ou mais comandos que so executados,
completados e ento validados (commit) ou cancelados (rollback). Quando uma transao
validada ou cancelada, outra transao se inicia.
A conexo em java , por default, auto-commit. Isso significa que sempre que um
comando executado, um commit executado no banco de dados. Se o comando autocommit for desabilitado, ento deve-se fazer explicitamente o commit ou rollback das
transaes. A maioria dos drivers JDBC suportam transaes.
Um exemplo de cdigo:
con.setAutoCommit(false);
Statement st = con.createStatement();
....
con.commit();
con.setAutoCommit(true);
80
Java bsico 2
A linha:
con.setAutoCommit(false);
Java bsico 2
afetas por eles (por isso que retorna um array de inteiros). Como o auto-commit foi
desligado, deve-se explicitamente efetuar o commit.
O cdigo da ilustrao a seguir demonstra o uso de controle de transaes dentro de
uma aplicao Java.
82
Java bsico 2
83
Java bsico 2
84
Java bsico 2
Java bsico 2
Os passos para gerar um relatrio so bem simples. O primeiro passo compilar o
relatrio em XML. Depois da compilao, o resultado um objeto do tipo JasperReport. O
prximo passo preencher o relatrio com os dados, e o resultado dessa etapa fica
armazenado em um objeto do tipo JasperPrint. Esse objeto j representa o relatrio
finalizado, a partir dele podemos enviar para impresso diretamente, ou podemos exportar
para um outro formato, como PDF por exemplo. O diagrama apresentado na figura 28
ilustra o processo completo.
86
Java bsico 2
87
Java bsico 2
Nesta tela dever ser informado o nome para esta nova fonte de dados, nome este
que ser utilizado pela biblioteca JasperReports para encontrar a fonte de dados para a
gerao do relatrio, bem como as informaes sobre o Driver JDBC, a URL com a
localizao da fonte de dados, e usurio e senha para autenticao da conexo com a fonte
de dados informada.
Utilize o boto TEST para testar se a conexo ser realizada com sucesso e, se
estiver tudo certo, clique no boto SAVE para salvar esta nova fonte de dados que ser
utilizada na gerao de relatrios na interface do iReport.
88
Java bsico 2
89
Java bsico 2
O terceiro passo onde se informa a fonte de dados para gerao do relatrio, bem
como a consulta que ser executada na fonte de dados. Inicialmente dever ser selecionada
a fonte de dados criada na primeira etapa e em seguida dever ser escrita a consulta SQL
que ir fornecer os dados para a gerao do relatrio, conforme ilustrado na figura 33.
90
Java bsico 2
No quarto passo ser necessrio informar os campos de dados que sero
visualizados no relatrio em desenvolvimento. Neste ponto o iReport ir disponibilizar
para seleo apenas os campos informados com resultado da consulta SQL informada.
Selecione a ordem de incluso dos campos, sendo a orientao da esquerda para a
direita. A figura 34 ilusta a sequencia de campos selecionados para a gerao das linhas de
dados do relatrio.
91
Java bsico 2
O sexto ltimo passo informa que voc informou os dados de maneira correta
para a gerao de um novo relatrio na interface do iReport. Clique no boto Finalizar
para que voc possa visualizar o layout do relatrio desenvolvido.
Como resultado voc ir visualizar a rea de edio do layout do relatrio criado
para que voc possa fazer as alteraes necessrias para finalizar o relatrio a ser
disponibilizado na aplicao Java em desenvolvimento.
O relatrio que foi gerado apresenta um conjunto de camadas de informaes que
so conhecidas como sees, quais sejam:
1. Title: como o nome o indica, esta seo contm o ttulo do relatrio. Esta
informao s aparece na primeira pgina do relatrio;
2. Page Header: esta seo aparece no topo de cada pgina. Geralmente utilizada
para colocar datas, numerao de pginas, etc.;
3. Column Header: esta seo aparece no topo de cada coluna de dado de se
pretende imprimir no relatrio;
4. Detail: nesta rea sero colocadas as informaes para cada item de registro. O
JasperReports gera uma seo de detalhe para cada registro retornado pela consulta
realizada na fonte de dados do relatrio;
5. Column Footer: esta seo aparece ao final de cada coluna;
6. Page Footer: esta seo aparece ao final de cada pgina;
92
Java bsico 2
7. Last Page Footer: esta seo aparece ao final da ltima pgina;
8. Summary: esta seo aparece ao trmino do relatrio, logo aps o ltimo
registro.
A figura 36 ilustra o layout sugerido para a criao do relatrio onde voc poder
realizar alteraes no ttulo e rtulo das colunas de dados do relatrio em construo.
93
Java bsico 2
94
Java bsico 2
95
Java bsico 2
Java bsico 2
no v utilizar parmetros. A String src/reports/RelatorioEmpregados.jasper informa o
nome do relatrio que se deseja visualizar.
O mtodo viewReport() torna visvel o relatrio que foi gerado e referenciado pelo
objeto da classe JasperPrint.
97
Java bsico 2
98
Java bsico 2
necessrias
para
executar
os
relatrios
99
Java bsico 2
100
Java bsico 2
10.
Bibliografia
DEITEL. Java Como Programar. 6a. ed. So Paulo: Pearson Prentice Hall, 2005.
em:
SIERRA, Kathy; BATES, Bert. Certificao Sun Para Programador Java 6 Guia de
Estudo. So Paulo: Rio de Janeiro, 2008.
101