quarta-feira, 30 de abril de 2008

JTextField em UpperCase - 2.a Possibilidade

Mais um post sobre como deixar um texto em uma JTextField em miusculo de uma forma diferente da anterior. Neste codigo de exemplo acontece a conversão para uppercase somente quando uma outra letra é digitada, ficando assim visivel para o usuario o processo.

Segue código:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXFrame;

public class testeUpperCase2 extends JXFrame {

JTextField nome, endereco, bairro;

public testeUpperCase2(){
super("Teste Upper Case");
setSize(400,400);
setLayout(null);
setLocationRelativeTo(null);

nome = new JTextField();
// adiciona a propriedade de alterar para upper case quando a proxima letra é digitada
nome.addKeyListener(this.keyUpperCase);
nome.setBounds(10, 10, 200, 20);
add(nome);

endereco = new JTextField();
endereco.addKeyListener(this.keyUpperCase);
endereco.setBounds(10, 40, 200, 20);
add(endereco);

bairro = new JTextField();
bairro.addKeyListener(this.keyUpperCase);
bairro.setBounds(10, 70, 200, 20);
add(bairro);
}

// metodo que cria a listener que encarregara de alterar para upper case quando adicionada nos textfields
private KeyListener keyUpperCase = new KeyListener() {

public void keyTyped(KeyEvent e) {
}

public void keyPressed(KeyEvent e) {
JTextField source = (JTextField) e.getSource();
String data = source.getText();
source.setText("");
source.validate();
data = data.toUpperCase();
source.setText( data );
source.validate();
}

public void keyReleased(KeyEvent e) {
}
};

public static void createGuiAndShow(){
testeUpperCase2 teste = new testeUpperCase2();

teste.setDefaultCloseOperation(JXFrame.EXIT_ON_CLOSE);
teste.setVisible(true);
}

public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createGuiAndShow();
}
});
}
}


:: Referência

GUJ - User: keller

terça-feira, 29 de abril de 2008

JTextField em UpperCase

Pesquisando alguns itens me deparei com uma resposta a uma duvida antiga minha, de como deixarias as palavras digitadas em um JTexField em maiusculo. Como normal do blog segue codificação de exemplo:

:: OBS: Prestem bem a atenção que o processo de deixar em UpperCase acontece na segunda classse.

1.a Classe - testeUpperCase

import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXFrame;

public class testeUpperCase extends JXFrame {

JTextField nome, endereco, bairro;

public testeUpperCase(){
super("Teste Upper Case");
setSize(400,400);
setLayout(null);
setLocationRelativeTo(null);

// chamada da segunda classe como instancia de um novo objeto JTextField.
nome = new UpperCaseField(10);
nome.setBounds(10, 10, 200, 20);
add(nome);

endereco = new UpperCaseField(10);
endereco.setBounds(10, 40, 200, 20);
add(endereco);

bairro = new UpperCaseField(10);
bairro.setBounds(10, 70, 200, 20);
add(bairro);
}

public static void createGuiAndShow(){
testeUpperCase teste = new testeUpperCase();

teste.setDefaultCloseOperation(JXFrame.EXIT_ON_CLOSE);
teste.setVisible(true);
}

public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createGuiAndShow();
}
});
}
}

2.a Classe - UpperCaseField

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

public class UpperCaseField extends JTextField {

public UpperCaseField(int cols) {
super(cols);
}

@Override
protected Document createDefaultModel() {
return new UpperCaseDocument();
}

static class UpperCaseDocument extends PlainDocument {

@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if (str == null) {
return;
}
char[] upper = str.toCharArray();

for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
}
super.insertString(offs, new String(upper), a);
}
}
}

:: Referência
Javadocs

JXTaskPane com relogio.

Post com codificação exemplo que foi solicitado por um amigo por estar tendo dificuldades de apresentar um relogio que pega a hora do sistema e apresentar um uma taskpane.

Segue codificação:


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXLabel;
import org.jdesktop.swingx.JXTaskPane;
import org.jdesktop.swingx.JXTaskPaneContainer;

public class taskPane extends JXFrame implements ActionListener {

// responsavel pelo formato de apresentação da hora.
DateFormat formatarHora = new SimpleDateFormat("HH:mm:ss");
// responsavel pelo tempo de atualização do relogio.
Timer timer;
// responsavel em aporesentar o relogio.
JXLabel label;

public taskPane(){
super("TaskPane");
setSize(800, 600);
setJMenuBar(createMenuBar());
add(createTaskPaneContainer(), BorderLayout.WEST);

// adiciona timer no frame e inicializa o temporizador
timer = new Timer(0, null);
timer.addActionListener(this);
timer.setCoalesce(true);
timer.start();
}

protected JMenuBar createMenuBar(){
JMenuBar menuBar = new JMenuBar();

JMenu menu = new JMenu("Menu");
menu.setMnemonic(KeyEvent.VK_M);
menuBar.add(menu);

JMenuItem menuItem = new JMenuItem("Sair");
menuItem.setMnemonic(KeyEvent.VK_S);
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_S,
ActionEvent.ALT_MASK));
menuItem.setActionCommand("sair");
menuItem.addActionListener(this);
menu.add(menuItem);

return menuBar;
}

protected JXTaskPaneContainer createTaskPaneContainer(){
JXTaskPaneContainer taskPaneContainer = new JXTaskPaneContainer();

JXTaskPane taskPane = new JXTaskPane();
taskPane.setTitle("Relógio ");
taskPane.setSpecial(true);
taskPaneContainer.add(taskPane);

label = new JXLabel();
taskPane.add(label);

return taskPaneContainer;
}

public static void createGuiAndShow(){
taskPane taskPaneDemo = new taskPane();
taskPaneDemo.setExtendedState(JXFrame.MAXIMIZED_BOTH);
taskPaneDemo.setDefaultCloseOperation(JXFrame.EXIT_ON_CLOSE);
taskPaneDemo.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
// apresenta e atualiza o display do relogio, pegando a hora diretamente do sistema.
label.setText(formatarHora.format(System.currentTimeMillis()));

if("sair".equals(e.getActionCommand())){
System.exit(0);
}
}

public static void main(String args[]){

SwingUtilities.invokeLater(new Runnable() {
public void run() {
createGuiAndShow();
}
});
}
}


:: Referência

SwingLabs API

Lançado Netbeans 6.1

Foi lançado oficialmente no ultimo dia 26 a versão 6.1 Final da IDE de codigo aberto Netbeans, muitas novidades foram implementadas na IDE entre elas suporte a JavaScript, Suporte direto a MySQL na Database Explorer, Compartilhamento de libraries entre outras.

Agora com premissas de abertura em ate 40% mais rapida, comsumo de memória reduzido, erros de semantica e code completation mais rapidos, manipulação de tabelas em MySQL, beans patterns no browser Navigator e muito mais.

Para quem pretende se aventurar no mundo desta IDE que do meu ponto de vista não faz feio perto de nenhuma outra, mas como religião, política e IDE cada um tem a sua, deixo como sugestão somente, mas segue os requerimentos (minimos) para rodar a IDE:

:: Microsoft Windows XP Professional SP2:
Processor: 800MHz Intel Pentium III or equivalent
Memory: 512 MB
Disk space: 750 MB of free disk space


:: Microsoft Windows Vista:
Processor: 800MHz Intel Pentium III or equivalent
Memory: 512 MB
Disk space: 750 MB of free disk space

:: Red Hat EL 4:
Processor: 800 MHz Intel Pentium III or equivalent
Memory: 512 MB
Disk space: 450 MB of free disk space

---------------------------------------------------------

:: Referências

Netbeans 6.1 - Information

segunda-feira, 28 de abril de 2008

Aplicação MDI Simples - 4.a Parte

1.a e 2.a Parte - Aqui
3.a Parte - Aqui

A 4.a parte do post é sobre a codificação classe CadClientes responsavel pelas operações de incluir/excluir/editar/consultar da janela clientes.

OBS: Todos os metodos apresentados nesta classe foram desenvolvidos para serem apresentados da maneira mais simples possivel, mesmo que funcional não traz tratamento de erros, excessões nem os metodos mais corretos existentes, como informado anteriormente e vale ressaltar que tutorial foi feito somente para incentivar e instigar os leitores (aprendizes assim como eu) ao estudo e pesquisa para um melhor aperfeiçoamento.

Segue codificação da classe CadClientes:



import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JFormattedTextField;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.text.MaskFormatter;

public class CadClientes extends JInternalFrame implements ActionListener {

JTextField tfCodigo,
tfNome,
tfLog,
tfBairro,
tfCidade;

JFormattedTextField tfRG,
tfCPF,
tfDataNasc,
tfFone,
tfCel;

JComboBox cbUF;

String [] UF = { "AC","AL","AM","AP","BA","CE","DF","ES","GO","MA","MG","MS",
"MT","PA","PB","PE","PI","PR","RJ","RN","RO","RR","RS","SC",
"SE","SP","TO" };

JSeparator linha;

Conexao conexao = new Conexao();
String status;

public CadClientes(){
super("Loja MDI - Cadastro de Clientes", true, true, false, true);
setSize(600, 320);
setResizable(false);
setLayout(null);

JLabel label = new JLabel("Código");
label.setBounds(20, 10, 60, 20);
add(label);

tfCodigo = new JTextField();
tfCodigo.setBounds(80, 10, 80, 20);
add(tfCodigo);

linha = new JSeparator();
linha.setOrientation(SwingConstants.HORIZONTAL);
linha.setBounds(10, 45, 570, 20);
add(linha);

label = new JLabel("Nome");
label.setBounds(20, 60, 60, 20);
add(label);

tfNome = new JTextField();
tfNome.setBounds(80, 60, 500, 20);
add(tfNome);

label = new JLabel("Logradouro");
label.setBounds(20, 90, 80, 20);
add(label);

tfLog = new JTextField();
tfLog.setBounds(110, 90, 240, 20);
add(tfLog);

label = new JLabel("Bairro");
label.setBounds(370, 90, 60, 20);
add(label);

tfBairro = new JTextField();
tfBairro.setBounds(420, 90, 150, 20);
add(tfBairro);

label = new JLabel("Cidade");
label.setBounds(20, 120, 60, 20);
add(label);

tfCidade = new JTextField();
tfCidade.setBounds(80, 120, 240, 20);
add(tfCidade);

label = new JLabel("Estado");
label.setBounds(340, 120, 60, 20);
add(label);

cbUF = new JComboBox(UF);
cbUF.setMaximumRowCount(4);
cbUF.setBounds(395, 120, 50, 20);
add(cbUF);

label = new JLabel("RG");
label.setBounds(20, 150, 40, 20);
add(label);

tfRG = new JFormattedTextField(formatRG());
// acerto de bug do formattedtextfield
tfRG.setFocusLostBehavior(JFormattedTextField.PERSIST);
tfRG.setBounds(60, 150, 120, 20);
add(tfRG);

label = new JLabel("CPF");
label.setBounds(200, 150, 40, 20);
add(label);

tfCPF = new JFormattedTextField(formatCPF());
tfCPF.setFocusLostBehavior(JFormattedTextField.PERSIST);
tfCPF.setBounds(240, 150, 120, 20);
add(tfCPF);

label = new JLabel("Data de Nasc.");
label.setBounds(380, 150, 100, 20);
add(label);

tfDataNasc = new JFormattedTextField(formatData());
tfDataNasc.setFocusLostBehavior(JFormattedTextField.PERSIST);
tfDataNasc.setBounds(470, 150, 100, 20);
add(tfDataNasc);

label = new JLabel("Fone Res.");
label.setBounds(20, 180, 80, 20);
add(label);

tfFone = new JFormattedTextField(formatFone());
tfFone.setFocusLostBehavior(JFormattedTextField.PERSIST);
tfFone.setBounds(100, 180, 120, 20);
add(tfFone);

label = new JLabel("Fone Cel.");
label.setBounds(250, 180, 80, 20);
add(label);

tfCel = new JFormattedTextField(formatFone());
tfCel.setFocusLostBehavior(JFormattedTextField.PERSIST);
tfCel.setBounds(320, 180, 120, 20);
add(tfCel);

linha = new JSeparator();
linha.setOrientation(SwingConstants.HORIZONTAL);
linha.setBounds(10, 220, 570, 20);
add(linha);

JButton button = new JButton("Inserir");
button.setMnemonic(KeyEvent.VK_I);
button.setActionCommand("inserir");
button.addActionListener(this);
button.setBounds(25, 245, 100, 20);
add(button);

button = new JButton("Excluir");
button.setMnemonic(KeyEvent.VK_E);
button.setActionCommand("excluir");
button.addActionListener(this);
button.setBounds(135, 245, 100, 20);
add(button);

button = new JButton("Editar");
button.setMnemonic(KeyEvent.VK_E);
button.setActionCommand("editar");
button.addActionListener(this);
button.setBounds(245, 245, 100, 20);
add(button);

button = new JButton("Consultar");
button.setMnemonic(KeyEvent.VK_C);
button.setActionCommand("consultar");
button.addActionListener(this);
button.setBounds(355, 245, 100, 20);
add(button);

button = new JButton("Sair");
button.setMnemonic(KeyEvent.VK_S);
button.setActionCommand("sair");
button.addActionListener(this);
button.setBounds(465, 245, 100, 20);
add(button);

centralizar(LojaMDI.desktopPane);
setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}

public static MaskFormatter formatRG(){
MaskFormatter date = new MaskFormatter();

try{
date.setMask("##.###.###-#");
date.setPlaceholderCharacter('_');
}
catch(ParseException exc){
exc.printStackTrace();
}
return date;
}

public static MaskFormatter formatCPF(){
MaskFormatter date = new MaskFormatter();

try{
date.setMask("###.###.###-##");
date.setPlaceholderCharacter('_');
}
catch(ParseException exc){
exc.printStackTrace();
}
return date;
}

public static MaskFormatter formatData(){
MaskFormatter date = new MaskFormatter();

try{
date.setMask("##/##/####");
date.setPlaceholderCharacter('_');
}
catch(ParseException exc){
exc.printStackTrace();
}
return date;
}

public static MaskFormatter formatFone(){
MaskFormatter date = new MaskFormatter();

try{
date.setMask("(##)####-####");
date.setPlaceholderCharacter('_');
}
catch(ParseException exc){
exc.printStackTrace();
}
return date;
}

public void centralizar(JDesktopPane dp) {
Dimension ds = dp.getSize();
Dimension dw = this.getSize();
this.setLocation((ds.width - dw.width) / 2, (ds.height - dw.height) / 2);
}

public String inserir(){
status = "Método não inicializado.";
try{
conexao.abrirConexao();
Statement stmt = conexao.con.createStatement();
String query = "insert into clientes values (" + tfCodigo.getText()
+ ",'" + tfNome.getText()
+ "','" + tfLog.getText()
+ "','" + tfBairro.getText()
+ "','" + tfCidade.getText()
+ "','" + cbUF.getSelectedItem()
+ "','" + tfRG.getText()
+ "','" + tfCPF.getText()
+ "','" + tfDataNasc.getText()
+ "','" + tfFone.getText()
+ "','" + tfCel.getText()+ "');";
int resultado = stmt.executeUpdate(query);
if(resultado == 1){
status = "Dados Inseridos com sucesso.";
}
else{
status = "Dados não inseridos.";
}
conexao.fecharConexao();
stmt.close();
}
catch(SQLException excIns){
excIns.printStackTrace();
}
return status;
}

public void consultar() {

String cons = JOptionPane.showInputDialog(null,"Digite o código do cliente");
DateFormat data = new SimpleDateFormat("ddMMyyyy");

try{
conexao.abrirConexao();
Statement stmt = conexao.con.createStatement();

ResultSet rsCons = stmt.executeQuery("select * from clientes where " +
"cod_cli = "+cons+";");

while(rsCons.next()){
tfCodigo.setText(rsCons.getString("cod_cli"));
tfNome.setText(rsCons.getString("nom_cli"));
tfLog.setText(rsCons.getString("log"));
tfBairro.setText(rsCons.getString("bairro"));
tfCidade.setText(rsCons.getString("cidade"));
if(rsCons.getString("uf").equals("AC")){
cbUF.setSelectedIndex(0);
}
if(rsCons.getString("uf").equals("AL")){
cbUF.setSelectedIndex(1);
}
if(rsCons.getString("uf").equals("AM")){
cbUF.setSelectedIndex(2);
}
if(rsCons.getString("uf").equals("AP")){
cbUF.setSelectedIndex(3);
}
if(rsCons.getString("uf").equals("BA")){
cbUF.setSelectedIndex(4);
}
if(rsCons.getString("uf").equals("CE")){
cbUF.setSelectedIndex(5);
}
if(rsCons.getString("uf").equals("DF")){
cbUF.setSelectedIndex(6);
}
if(rsCons.getString("uf").equals("ES")){
cbUF.setSelectedIndex(7);
}
if(rsCons.getString("uf").equals("GO")){
cbUF.setSelectedIndex(8);
}
if(rsCons.getString("uf").equals("MA")){
cbUF.setSelectedIndex(9);
}
if(rsCons.getString("uf").equals("MG")){
cbUF.setSelectedIndex(10);
}
if(rsCons.getString("uf").equals("MS")){
cbUF.setSelectedIndex(11);
}
if(rsCons.getString("uf").equals("MT")){
cbUF.setSelectedIndex(12);
}
if(rsCons.getString("uf").equals("PA")){
cbUF.setSelectedIndex(13);
}
if(rsCons.getString("uf").equals("PB")){
cbUF.setSelectedIndex(14);
}
if(rsCons.getString("uf").equals("PE")){
cbUF.setSelectedIndex(15);
}
if(rsCons.getString("uf").equals("PI")){
cbUF.setSelectedIndex(16);
}
if(rsCons.getString("uf").equals("PR")){
cbUF.setSelectedIndex(17);
}
if(rsCons.getString("uf").equals("RJ")){
cbUF.setSelectedIndex(18);
}
if(rsCons.getString("uf").equals("RN")){
cbUF.setSelectedIndex(19);
}
if(rsCons.getString("uf").equals("RO")){
cbUF.setSelectedIndex(20);
}
if(rsCons.getString("uf").equals("RR")){
cbUF.setSelectedIndex(21);
}
if(rsCons.getString("uf").equals("RS")){
cbUF.setSelectedIndex(22);
}
if(rsCons.getString("uf").equals("SC")){
cbUF.setSelectedIndex(23);
}
if(rsCons.getString("uf").equals("SE")){
cbUF.setSelectedIndex(24);
}
if(rsCons.getString("uf").equals("SP")){
cbUF.setSelectedIndex(25);
}
if(rsCons.getString("uf").equals("TO")){
cbUF.setSelectedIndex(26);
}
tfRG.setText(rsCons.getString("rg"));
tfCPF.setText(rsCons.getString("cpf"));
tfDataNasc.setText(data.format(rsCons.getDate("dt_nasc")));
tfFone.setText(rsCons.getString("fone"));
tfCel.setText(rsCons.getString("cel"));
}
stmt.close();
conexao.fecharConexao();
}
catch(SQLException excCon){
excCon.printStackTrace();
}
}

public void deletar(){
try{
conexao.abrirConexao();
Statement stmt = conexao.con.createStatement();

Object [] simNao = { "Sim", "Não" };

int opcao = JOptionPane.showOptionDialog(null, "Deseja excluir este registro ?",
"Loja MDI", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
simNao, simNao[0]);
if(opcao == JOptionPane.YES_OPTION){
stmt.executeUpdate("delete from clientes where cod_cli = " +
tfCodigo.getText() + ";");
}
stmt.close();
conexao.fecharConexao();
}
catch(SQLException excCon){
excCon.printStackTrace();
}
}

public void atualizar(){
try{
conexao.abrirConexao();
Statement stmt = conexao.con.createStatement();

Object [] simNao = { "Sim", "Não" };

int opcao = JOptionPane.showOptionDialog(null, "Deseja atualiza este registro ?",
"Loja MDI", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
simNao, simNao[0]);
if(opcao == JOptionPane.YES_OPTION){
stmt.executeUpdate("update clientes set nom_cli = '" + tfNome.getText()
+ "', log = '" + tfLog.getText()
+ "', bairro = '" + tfBairro.getText()
+ "', cidade = '" + tfCidade.getText()
+ "', uf = '" + cbUF.getSelectedItem()
+ "', rg = '" + tfRG.getText()
+ "', cpf = '" + tfCPF.getText()
+ "', dt_nasc = '" + tfDataNasc.getText()
+ "', fone = '" + tfFone.getText()
+ "', cel = '" + tfCel.getText()
+ "' where cod_cli = " + tfCodigo.getText() + ";");
}
stmt.close();
conexao.fecharConexao();
}
catch(SQLException excCon){
excCon.printStackTrace();
}
}

public void limpaForm(){
tfCodigo.setText("");
tfNome.setText("");
tfLog.setText("");
tfBairro.setText("");
tfCidade.setText("");
cbUF.setSelectedIndex(0);
tfRG.setText("");
tfCPF.setText("");
tfDataNasc.setText("");
tfFone.setText("");
tfCel.setText("");
}

public void actionPerformed(ActionEvent e) {
if("inserir".equals(e.getActionCommand())){
this.inserir();
this.limpaForm();
JOptionPane.showMessageDialog(null, status,
"Loja MDI - Cadastro de Cliente",
JOptionPane.INFORMATION_MESSAGE);
}

if("consultar".equals(e.getActionCommand())){
this.consultar();
}

if("editar".equals(e.getActionCommand())){
this.atualizar();
this.limpaForm();
}

if("excluir".equals(e.getActionCommand())){
this.deletar();
this.limpaForm();
}

if("sair".equals(e.getActionCommand())){
dispose();
}
}
}


:: Referências

GUJ
Java Free
Oraculo

Aplicação MDI Simples - 3.a Parte

1.a e 2.a Parte - Aqui

Seguiremos agora com a 3.a Parte do codigo que demonstra a codificação da janela Principal, representada pela classe LojaMDI e é responsavel pela chamada das demais janelas.

Tentei deixar o maximo possivel de comentario sobre os componentes, qualquer duvida deixe um post para que possamos discutir assim que possivel.

Segue codificação :



import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;

public class LojaMDI extends JFrame implements ActionListener {

static JDesktopPane desktopPane;

public LojaMDI(){
super("Loja MDI");
setSize(800,600);

// define menu
setJMenuBar(createMenuBar());

desktopPane = new JDesktopPane();
desktopPane.setLayout(null);
desktopPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
setContentPane(desktopPane);
}

// metodo responsavel pela criação do menu
protected JMenuBar createMenuBar(){
JMenuBar menuBar = new JMenuBar();

// criação menu Cadastro
JMenu menu = new JMenu("Cadastro");
menu.setMnemonic(KeyEvent.VK_C);
menuBar.add(menu);

// criação de itens do menu Cadastro - Clientes
JMenuItem menuItem = new JMenuItem("Clientes");
menuItem.setMnemonic(KeyEvent.VK_L);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,
ActionEvent.ALT_MASK));
menuItem.setActionCommand("cadCli");
menuItem.addActionListener(this);
menu.add(menuItem);

// criação de itens do menu Cadastro - Produtos
menuItem = new JMenuItem("Produtos");
menuItem.setMnemonic(KeyEvent.VK_P);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
ActionEvent.ALT_MASK));
menuItem.setActionCommand("cadProd");
menuItem.addActionListener(this);
menu.add(menuItem);

// criação de itens do menu Cadastro - Venda
menuItem = new JMenuItem("Venda");
menuItem.setMnemonic(KeyEvent.VK_V);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
ActionEvent.ALT_MASK));
menuItem.setActionCommand("cadVenda");
menuItem.addActionListener(this);
menu.add(menuItem);

// criação menu Sistema
menu = new JMenu("Sistema");
menu.setMnemonic(KeyEvent.VK_S);
menuBar.add(menu);

// criação de itens do menu Sistema - Ajuda
menuItem = new JMenuItem("Ajuda");
menuItem.setMnemonic(KeyEvent.VK_A);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
ActionEvent.ALT_MASK));
menuItem.setActionCommand("ajuda");
menuItem.addActionListener(this);
menu.add(menuItem);

// criação de separador no menu Sistema
menu.addSeparator();

// criação de itens do menu Sistema - Sair
menuItem = new JMenuItem("Sair");
menuItem.setMnemonic(KeyEvent.VK_R);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
ActionEvent.ALT_MASK));
menuItem.setActionCommand("sair");
menuItem.addActionListener(this);
menu.add(menuItem);

return menuBar;
}

// metodo responsavel por montagem de componentes do frame principal
private static void createAndShowGui(){
// altera skin das janelas e dialogs
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);

LojaMDI frmLoja = new LojaMDI();

// define pções de inicialização da janela principal.
frmLoja.setExtendedState(JFrame.MAXIMIZED_BOTH);
frmLoja.setLayout(null);
frmLoja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmLoja.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if("cadCli".equals(e.getActionCommand())){
CadClientes frmCadCli = new CadClientes();
desktopPane.add(frmCadCli);
// opção para definir que o ultimo internalframe abersto
// seja o que ficará com foco.
try {
frmCadCli.setSelected(true);
} catch (java.beans.PropertyVetoException error) {
error.printStackTrace();
}
}

if("sair".equals(e.getActionCommand())){
// customização de optionpane para que altere os valores de en_US
// para pt_BR, pode ser adicionado mais customizações, como icone
// enre outros, para isto consultar referência no fim do post.
Object [] simNao = { "Sim", "Não" };

int opcao = JOptionPane.showOptionDialog(null, "Deseja sair do sistema ?",
"Loja MDI", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
simNao, simNao[0]);
if(opcao == JOptionPane.YES_OPTION){
System.exit(0);
}
}
}

public static void main(String args[]){
// thread de exibiçao da gui
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}



:: Referência

- Pagina de componentes Swing

Aplicação MDI simples

Aplicação MDI simples com objetivo de demonstrar alguns "objetos" qua muitos aprendizes desta linguagem assim como eu tem dificuldades de encontrar exemplos e/ou ate mesmo ainda não chegou a nem conhecer.

O intuito deste post de forma alguma visa representar a melhor forma de programar em java nem mesmo o melhor dos conceitos e padrões de programação e sim visa deixar um gancho para maiores pesquisas e busca de conceitos para chegar a determinado objetivo de forma correta pesquisando trocando informações e aprendendo que é o maior de meus objetivos. Portanto caso alguém souber alguma medida que torne algum metodo aqui apresentado com uma didatica ainda mais facil para inicio de aprendizado esteja avontade para corrigir. Lembrando minha pretenção foi deixar os códigos mais simples possiveis porem de forma funcional.

OBS 1: Nosso objetivo aqui não é uma codificação clean nem tratamento de erros, porém pode ser uma deixa para futuros exemplos de codificação.

OBS 2: Como o post se tornou muito grande faremos ele em lgumas etapas, o que também dará espaço para termino das demais classes e metodos.

OBJETIVO DO APLICATIVO:

Cliar uma plicação MDI (Com internal Frames) que faça inclusão/alteração/exclusao/consulta de Clientes, inclusão/alteração/exclusao/consulta de Produtos e efetue Vendas.

ANDAMENTO:

- Base de dados - OK (Sujeito a alterações conforme o andamento dos posts)
- Janela Principal - OK
- Janela Clientes - OK
- Janela Produtos - Em andamento
- Janela de Vendas - Aguardando termino de produtos.

1.a Parte - Estrurura da base de dados em Firebird.

- Criar uma pasta nomeada database em C:\ (C:\database) e criar a nova databese com nome de lojadb.

Após criada a databese criar uma tabela nomeada clientes com a seguinte estrutura:


CREATE TABLE CLIENTES (
COD_CLI SMALLINT NOT NULL,
NOM_CLI VARCHAR(40),
LOG VARCHAR(50),
BAIRRO VARCHAR(30),
CIDADE VARCHAR(30),
UF CHAR(2),
RG CHAR(12) NOT NULL,
CPF CHAR(14) NOT NULL,
DT_NASC DATE,
FONE VARCHAR(13),
CEL VARCHAR(13)
);

ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (COD_CLI);



Crie outra tabela com nome de produtos e com a estrutura a seguir:



CREATE TABLE PRODUTOS (
COD_PROD SMALLINT NOT NULL,
DESC_PROD VARCHAR(50),
QTD SMALLINT,
VALOR FLOAT
);

ALTER TABLE PRODUTOS ADD CONSTRAINT PK_PRODUTOS PRIMARY KEY (COD_PROD);



Teremos uma outra tabela, porem deixaremos a implementação dela para os próximos posts.

2.a Parte - Conexão.

Para efetuarmos a conexão usaremos uma classe ja apresentada aqui no blog, e pode ser acessada pelo seguinte link >> Conexão: Java + Firebird.


->Próximos Postagens

:: 3.a Parte - Janela Principal

:: 4.a Parte - Janela Clientes

:: 5.a Parte - Janela Produtos

:: 6.a Parte - Janela Vendas

quinta-feira, 24 de abril de 2008

Conexão: Java + Firebird

o intuito deste post é ajudar quem esta tendo dificuldades em efetuar conexão entre Java e Firebird. Será apresentadas duas classes simples, uma responsável pela conexão e a outra para testes.

1ª Classe - Conexao -responsavel pela conexão com firebird


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {

Connection con = null;
String status = null;

public String abrirConexao(){
status = "Falha na conexão.";

try{

// Comando responsavel pelo reconhecimento do driver jdbc
// OBS: baixar o driver relativo a versão do JDK que esta utilizando
Class.forName("org.firebirdsql.jdbc.FBDriver");
// Define a localização do banco de dados, usuario e senha
con = DriverManager.getConnection("jdbc:firebirdsql:localhost:C:/AGENDADB.FDB",
"sysdba",
"masterkey");
status = "Conectado com sucesso.";
}
catch(ClassNotFoundException excUm){
excUm.printStackTrace();
}
catch(SQLException excDois){
excDois.printStackTrace();
}
return status;
}

public String fecharConexao(){
status = "Falha ao finalizar conexão.";

try{
// Finaliza conexão com banco de dados
con = null;
status = "Conexão finalizada com sucesso.";
}
catch(Exception exc){
exc.printStackTrace();
}
return status;
}
}

2ª Classe - teste - testa conexão inserindo dados.

import java.sql.SQLException;
import java.sql.Statement;
import Agenda.Conexao.*;
public class teste {
Conexao conexao = new Conexao();
String status = null;

public teste(){

}

public String inserir(){
status = "Método não inicializado.";
try{
conexao.abrirConexao();
Statement stmt = conexao.con.createStatement();
String query = "insert into contatos(nome, endereco, telefone, email)" +
" values('nome um', 'endereco um', '(11)1111-1111', 'email@um');";
int resultado = stmt.executeUpdate(query);
if(resultado == 1){
status = "Dados Inseridos com sucesso.";
}
else{
status = "Dados não inseridos.";
}
conexao.fecharConexao();
stmt.close();
}
catch(SQLException exc){
exc.printStackTrace();
}
return status;
}

public static void main(String args[]){
teste testeDB = new teste();
testeDB.inserir();
System.out.print(testeDB.status);
}
}



Espero que tenha esclarecido um pouco sobre conexão entre Java e Firebird, lembrando que a classe conexão pode ser usada para outro SGBD mudando somente as linhas abaixo:


Class.forName("org.firebirdsql.jdbc.FBDriver");
con = DriverManager.getConnection("jdbc:firebirdsql:localhost:C:/AGENDADB.FDB",
"sysdba",
"masterkey");


Obrigado, até o próximo post.