quarta-feira, 27 de junho de 2012

Colorir linhas de um JTable de acordo com a seleção de um checkbox de uma linha

Olá, pesquisando na web, achei várias tentativas de colorir uma ou mais linhas de um JTable, mas não tão flexíveis como o que venho apresentar nesse POST.
Uma opção também é usar o Tema Nimbus que já aplica isso nas tabelas.

Eu uso essa classe em meus projetos p/ alternar a cor das linhas de uma tabela, facilitando a visualização do usuário na grade de Dados.

Exemplo :
tabela carregada sem itens selecionados
e ao clicar no checkbox da coluna ATIVO, a linha tem sua cor e fonte alterado, destacando o item selecionado, porém observação: quando seleciona a opção ativo, a linha continua como no exemplo abaixo na linha 5 pois está usando o renderer padrão da tabela.

tabela com os itens selecionados
veja em funcionamento :
http://mario.portari.com.br/~surfer/blog/colorir_jtable.swf

Classe ColorRender que extende a classe DefaultTableCellRenderer
/*
 * Colorindo jTable.java 
 * Pintas as tabelas alterando as linhas
 * Destaca uma linha se o checkbox da linha for selecionado
 * Author : Mario Cezzare Angelicola Chiodi
 * mcezzare@gmail.com
 */
package lib;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;


public class ColorRender extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(
            JTable table, Object value,
            boolean isSelected, boolean hasFocus,
            int row, int column) {

        super.getTableCellRendererComponent(table, value, isSelected,
                hasFocus, row, column);
        
        // seta o resultado p/ falso porque isso sera usado em varias Jtables do sistema
        boolean result = false;
        try{
// no nosso exemplo 

if (table.getName() != null) { // p/ não escrever um null cada vez que carregar uma célula
                if (table.getName().equals("jTable1")) {
                    result = (Boolean) table.getModel().getValueAt(row, 3);
                }
                if (table.getName().equals("titulosAutorizacao")) {
                    result = (Boolean) table.getModel().getValueAt(row, 6);
                }
            }
        }
        catch (java.lang.NullPointerException ex){
            System.out.println(ex.getMessage());
        }
        
        //se for uma linha selecionada
        if (isSelected) {
            setBackground(table.getSelectionBackground());
            setForeground(table.getSelectionForeground());
        } else {
            // se o checkbox estiver selecionado
            // pinta a linha inteira
            if (result) {
                setBackground(Color.YELLOW);
                setForeground(Color.RED);
                setFont(new Font("Verdana",Font.BOLD,10));
            } else {

                // se não , colore alternado as linhas
                if (row % 2 == 0) {
                    setBackground(Color.LIGHT_GRAY);
                    setForeground(Color.black);
                } else {
                    setBackground(Color.WHITE);
                    setForeground(Color.black);
                }
            }
        }
        return this;
    }
}


Frame testTable

//Colorindo jTable.java 
//Author : Mario Cezzare Angelicola Chiodi
// mcezzare@gmail.com



package tests;

import javax.swing.table.DefaultTableModel;
import lib.ColorRender;


public class testTable extends javax.swing.JFrame {

    /**
     * Creates new form testTable
     */
    public testTable() {
        initComponents();
        carregaTabela();
    }
    public final DefaultTableModel modelo =new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "NOME", "EMAIL", "ATIVO"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        }; 
  private void carregaTabela() {
        // apenas para dar carga na tabela
    String [] nomes={"AAA","BBB",
             "CCC","DDD",
             "EEE","FFF",
             "FFF","HHH"
         };
         for (int i=0;i<8;i++){
         Object[] row = new Object[4];
         row[0]=i;
         row[1]=nomes[i];
         row[2]=nomes[i].toLowerCase()+"@email.org";
         row[3]=false;
         modelo.addRow(row);        
         }
        jTable1.setModel(modelo); 
  // fim da carga 
   // a grande manha para funcionar, especifique um nome p/ a JTable
        jTable1.setName("jTable1");
 // aplica o ColorRender na tabela
        jTable1.setDefaultRenderer(Object.class, new ColorRender());
   
 
        jLbTotal.setText(jTable1.getRowCount()+"");
     }
     

    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        jLbTotal = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Teste Colorir tabela");
      
        jScrollPane1.setViewportView(jTable1);

        jLabel1.setText("Total de Usuários:");

        jLbTotal.setText("0");
        jLbTotal.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        jLabel2.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(0, 0, 255));
        jLabel2.setText("exemplo de Mario Cezzare - mcezzare@gmail.com");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                        .addContainerGap())
                    .add(layout.createSequentialGroup()
                        .add(jLabel1)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jLbTotal)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 23, Short.MAX_VALUE)
                        .add(jLabel2)
                        .add(14, 14, 14))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 222, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jLabel1)
                    .add(jLbTotal)
                    .add(jLabel2))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        
        // Set the Nimbus look and feel
         
        
        
         //* If Nimbus (introduced in Java SE 6) is not available, stay with the
         //* default look and feel. For details see
         //* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         //
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }


        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new testTable().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLbTotal;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration
}

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





terça-feira, 26 de junho de 2012

Calculadora Java JInternalFrame retornando valor p/ Janela Pai

Olá, como não achei uma calculadora que se atendesse minha necessidade p/ implementar como JInternalFrame, decidi fazer uma.

Este exemplo faz parte de um software de controle financeiro proprietário,  que uma das opções contém uma tela p/ controle de movimentação de conta com 4 abas:

  • Entrada
  • Transferência
  • Retirada
  • Cheque
veja a tela que chama a calculadora :
o ícone calculadora ao lado do campo valor que chama o calculadora.java


Esta Tela é um exemplo de uma aplicação MDI que contém um JDesktop principal e JInternalFrames como as janelas. A calculadora será adicionada ao JDesktop para uso.

Trecho da Classe JIRelatorioConta - que é o Frame de movimentação e chama as calculadoras:

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

import controller.*;
import java.awt.Desktop;
import lib.FormUtils;
import lib.calculadora;
import model.*;


public class JIRelatorioConta extends javax.swing.JInternalFrame {

.....
//actions dos botoes

private void jBtCalculadoraEActionPerformed(java.awt.event.ActionEvent evt) {                                               
        abrirCalculadora(jTValorE,'E');
    }

private void jBtCalculadoraTActionPerformed(java.awt.event.ActionEvent evt) {                                               
                abrirCalculadora(jTValorT,'T');
    } 

private void jBtCalculadoraRActionPerformed(java.awt.event.ActionEvent evt) {                                               
                abrirCalculadora(jTValorR,'R');
    }

private void jBtCalculadoraCActionPerformed(java.awt.event.ActionEvent evt) {                                               
                abrirCalculadora(jTValorC,'C');
    }

//abre a calculadora

    private void abrirCalculadora(JTextField F,char c) {

         JDesktopPane desktop = JFMain.getDesktop(); //MDI principal
         calculadora calculator = new calculadora(this,F,c);
         desktop.add(calculator);
      
        calculator.setVisible(true);
        calculator.show();
        calculator.requestFocus();
    }
  
  //recebe o retorno da calculadora
    public void retornoCalculdora(JTextField F, double valor){
        F.setText(valor+"");
  
    }


} // fim classe

---------------------------------------------------------------------------------
Classe calculadora.java
/*
 calculadora.java
 módulo desenvolvido p/ o Software InfoMoney
 Author : Mario Cezzare Angelicola Chiodi
 mcezzare@gmail.com
*/

package lib;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.JTextField;
import view.JIRelatorioConta;


public final class calculadora extends javax.swing.JInternalFrame {

    /**
     * Creates new form calculadora
     */
    JIRelatorioConta Pai;
    JTextField F;
    FormUtils FU = new FormUtils();

    public calculadora() { //esse construtor não será utilizado
        initComponents();
        setFocusable(true);
    }

    public calculadora(JIRelatorioConta J, JTextField F, char operacao) {
        this.Pai = J; // Frame que abriu
        this.F = F; // campo q deverá ser retornado
        initComponents();
//precisa fazer isso p/ dar o foco na calculadora e poder utilizar o teclado numérico
        setFocusable(true);
        this.requestFocusInWindow();
//implementa o KeyListener
        this.addKeyListener(kl);
        jButton0.addKeyListener(kl);
        jButton1.addKeyListener(kl);
        jButton2.addKeyListener(kl);
        jButton3.addKeyListener(kl);
        jButton4.addKeyListener(kl);
        jButton5.addKeyListener(kl);
        jButton6.addKeyListener(kl);
        jButton7.addKeyListener(kl);
        jButton8.addKeyListener(kl);
        jButton9.addKeyListener(kl);
        jBtSoma.addKeyListener(kl);
        jBtDivide.addKeyListener(kl);
        jBtMultiplica.addKeyListener(kl);
        jBtSubtrai.addKeyListener(kl);
        preencheLabelCampo(operacao);

    }
    public double valorAtual = 0;
    public double ultimoNumero = 0;
    public char operacaoCorrente = '+';
    final int INPUT_MODE = 0;
    final int RESULT_MODE = 1;
    final int ERROR_MODE = 2;
    int displayMode;

    public char getOperacaoCorrente() {
        return operacaoCorrente;
    }

    public void setOperacaoCorrente(char operacaoCorrente) {

        this.operacaoCorrente = operacaoCorrente;
        jLbOperacao.setText(operacaoCorrente + "");
    }

    public double getValorAtual() {
        return valorAtual;
    }

    public double getUltimoNumero() {
        return ultimoNumero;
    }

    public void setUltimoNumero(double ultimoNumero) {
        this.ultimoNumero = ultimoNumero;
    }

    public void setValorAtual(double valorAtual) {
        this.valorAtual = valorAtual;
        System.out.println("Valor Atual:" + valorAtual);
        registra(valorAtual);
        jTDisplay.setText(valorAtual + "");
        displayMode = RESULT_MODE;
    }
//pilhas p/ histórico

    ArrayList valores = new ArrayList();
    ArrayList operacoes = new ArrayList();

    public void empilhaValor(double valor) {
        valores.add(valor);
        if (valores.size() != 1) {
            registra(valor);
        }
//        System.out.println(valor);

    }

    public void empilhaOperacao(char C) {
        operacoes.add(C);
        if (valores.size() != 1) {
            registra(C);
        }
//        System.out.println(C);
    }

    public void registra(double valor) {
        jTHistorico.setText(jTHistorico.getText() + "\n" + valor);

    }

    public void registra(char op) {
        jTHistorico.setText(jTHistorico.getText() + "\n" + op);

    }

    public double getDisplay() {
        double retorno = 0;
        try {
            retorno = Double.parseDouble(jTDisplay.getText());

        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return retorno;
    }

    public String getDisplayString() {

        return jTDisplay.getText();
    }

    public void insereDigito(char C) {
        if (displayMode == RESULT_MODE) {
            FU.LimpaCampo(jTDisplay);
            jTDisplay.setText(C + "");
            displayMode = INPUT_MODE;
        } else {
            if (getDisplayString().equals("0") || getDisplayString().equals("")) {
                jTDisplay.setText(C + "");
            } else {
                jTDisplay.setText(getDisplayString() + C + "");
            }
        }
    }

    public void insereDigito(int C) {
        if (displayMode == RESULT_MODE) {
            FU.LimpaCampo(jTDisplay);
            jTDisplay.setText(C + "");
            displayMode = INPUT_MODE;
        } else {
            if (getDisplayString().equals("0") || getDisplayString().equals("")) {
                jTDisplay.setText(C + "");
            } else {
                jTDisplay.setText(getDisplayString() + C + "");
            }
        }
    }

    public void calcula(char op, double valor) {
        double valorAtualTMP = 0;
        if (displayMode == RESULT_MODE) {
            empilhaOperacao(op);
            setValorAtual(valor);
            empilhaValor(valor);
            displayMode = INPUT_MODE;
            jLbOperacao.setText(op + "");

        } else {
            switch (op) {
                case '+':
                    valorAtualTMP = (this.getValorAtual() + valor);
                    System.out.println("somando " + getValorAtual() + " com " + valor + " =" + valorAtualTMP);
                    break;
                case '-':
                    if (valores.isEmpty() || this.getValorAtual() == 0) {
                        valorAtualTMP = valor;
                    } else {
                        valorAtualTMP = (this.getValorAtual() - valor);
                    }
                    System.out.println("subtraindo " + getValorAtual() + " com " + valor + " =" + valorAtualTMP);
                    break;
                case '*':
                    if (valores.isEmpty() || this.getValorAtual() == 0) {
                        valorAtualTMP = valor;
                    } else {
                        valorAtualTMP = (this.getValorAtual() * valor);
                    }
                    System.out.println("multiplicando " + getValorAtual() + " com " + valor + " =" + valorAtualTMP);
                    break;
                case '/':
                    if (valores.isEmpty() || this.getValorAtual() == 0) {
                        valorAtualTMP = valor;
                    } else {
                        valorAtualTMP = (this.getValorAtual() / valor);
                    }
                    System.out.println("dividindo " + getValorAtual() + " com " + valor + " =" + valorAtualTMP);

                    break;
            }
        }
        empilhaValor(valor);
        empilhaOperacao(op);
        jLbOperacao.setText(op + "");
        FU.LimpaCampo(jTDisplay);
        setValorAtual(valorAtualTMP);

    }

    private void limpaTudo() {
        valores.clear();
        operacoes.clear();
        operacaoCorrente = '+';
        FU.LimpaCampo(jTHistorico);
        setValorAtual(0);
        FU.LimpaCampo(jTDisplay);
        FU.LimpaCampo(jLbOperacao);
//        setOperacaoCorrente();
    }

    private void mostrarResultado() {


        if (getDisplayString().equals("")) {
            jTDisplay.setText(getValorAtual() + "");
            registra('=');
            registra(getDisplay());
        } else {
//            registra('=');
//            registra(getDisplay());
            calcula(getOperacaoCorrente(), getDisplay());
        }
        displayMode = RESULT_MODE;
    }

    private void retornaPai() {
        try {
            Pai.retornoCalculdora(this.F, getValorAtual());
            this.dispose();
        } catch (java.lang.NumberFormatException ex) {
            this.dispose();
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // 
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        buttonGroup2 = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        jTDisplay = new javax.swing.JTextField();
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jButton9 = new javax.swing.JButton();
        jButton0 = new javax.swing.JButton();
        jBtInverte = new javax.swing.JButton();
        jBtPonto = new javax.swing.JButton();
        jBtSoma = new javax.swing.JButton();
        jBtIgual = new javax.swing.JButton();
        jBtPorcentagem = new javax.swing.JButton();
        jBtSubtrai = new javax.swing.JButton();
        jBtMultiplica = new javax.swing.JButton();
        jBtDivide = new javax.swing.JButton();
        jBtLimpaUltimo = new javax.swing.JButton();
        jBtReinicia = new javax.swing.JButton();
        jBtLimpaUltimoChar = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTHistorico = new javax.swing.JTextArea();
        jLabel3 = new javax.swing.JLabel();
        jLbOperacao = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLbCampo = new javax.swing.JLabel();

        setClosable(true);
        setTitle("Calculadora");
        setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ico_calculator.png"))); // NOI18N
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
// aqui que chamamos o retorno p/ o campo da janela pai
                IlClose(evt);
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
        });

        jPanel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));

        jTDisplay.setEditable(false);
        jTDisplay.setText("0");

        jPanel2.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)));

        jButton1.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton1.setForeground(new java.awt.Color(0, 51, 255));
        jButton1.setMnemonic(KeyEvent.VK_1);
        jButton1.setText("1");
        jButton1.setToolTipText("1");
        buttonGroup1.add(jButton1);
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton2.setForeground(new java.awt.Color(0, 51, 255));
        jButton2.setText("2");
        jButton2.setToolTipText("2");
        buttonGroup1.add(jButton2);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton3.setForeground(new java.awt.Color(0, 51, 255));
        jButton3.setText("3");
        jButton3.setToolTipText("3");
        buttonGroup1.add(jButton3);
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton4.setForeground(new java.awt.Color(0, 51, 255));
        jButton4.setText("4");
        jButton4.setToolTipText("4");
        buttonGroup1.add(jButton4);
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        jButton5.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton5.setForeground(new java.awt.Color(0, 51, 255));
        jButton5.setText("5");
        jButton5.setToolTipText("5");
        buttonGroup1.add(jButton5);
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jButton6.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton6.setForeground(new java.awt.Color(0, 51, 255));
        jButton6.setText("6");
        jButton6.setToolTipText("6");
        buttonGroup1.add(jButton6);
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });

        jButton7.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton7.setForeground(new java.awt.Color(0, 51, 255));
        jButton7.setText("7");
        jButton7.setToolTipText("7");
        buttonGroup1.add(jButton7);
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });

        jButton8.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton8.setForeground(new java.awt.Color(0, 51, 255));
        jButton8.setText("8");
        jButton8.setToolTipText("8");
        buttonGroup1.add(jButton8);
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });

        jButton9.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton9.setForeground(new java.awt.Color(0, 51, 255));
        jButton9.setText("9");
        jButton9.setToolTipText("9");
        buttonGroup1.add(jButton9);
        jButton9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton9ActionPerformed(evt);
            }
        });

        jButton0.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jButton0.setForeground(new java.awt.Color(0, 51, 255));
        jButton0.setMnemonic(KeyEvent.VK_0);
        jButton0.setText("0");
        jButton0.setToolTipText("0");
        buttonGroup1.add(jButton0);
        jButton0.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton0ActionPerformed(evt);
            }
        });

        jBtInverte.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtInverte.setForeground(new java.awt.Color(255, 0, 0));
        jBtInverte.setText("+/-");
        jBtInverte.setToolTipText("Inverte +/-");
        buttonGroup2.add(jBtInverte);
        jBtInverte.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtInverteActionPerformed(evt);
            }
        });

        jBtPonto.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtPonto.setForeground(new java.awt.Color(255, 0, 0));
        jBtPonto.setText(".");
        jBtPonto.setToolTipText(".");
        buttonGroup2.add(jBtPonto);
        jBtPonto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtPontoActionPerformed(evt);
            }
        });

        jBtSoma.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtSoma.setForeground(new java.awt.Color(255, 0, 0));
        jBtSoma.setText("+");
        jBtSoma.setToolTipText("+");
        buttonGroup2.add(jBtSoma);
        jBtSoma.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtSomaActionPerformed(evt);
            }
        });

        jBtIgual.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtIgual.setForeground(new java.awt.Color(255, 0, 0));
        jBtIgual.setText("=");
        jBtIgual.setToolTipText("=");
        buttonGroup2.add(jBtIgual);
        jBtIgual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtIgualActionPerformed(evt);
            }
        });

        jBtPorcentagem.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtPorcentagem.setForeground(new java.awt.Color(255, 0, 0));
        jBtPorcentagem.setText("%");
        jBtPorcentagem.setToolTipText("%");
        buttonGroup2.add(jBtPorcentagem);
        jBtPorcentagem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtPorcentagemActionPerformed(evt);
            }
        });

        jBtSubtrai.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtSubtrai.setForeground(new java.awt.Color(255, 0, 0));
        jBtSubtrai.setText("-");
        jBtSubtrai.setToolTipText("-");
        buttonGroup2.add(jBtSubtrai);
        jBtSubtrai.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtSubtraiActionPerformed(evt);
            }
        });

        jBtMultiplica.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtMultiplica.setForeground(new java.awt.Color(255, 0, 0));
        jBtMultiplica.setText("*");
        jBtMultiplica.setToolTipText("*");
        buttonGroup2.add(jBtMultiplica);
        jBtMultiplica.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtMultiplicaActionPerformed(evt);
            }
        });

        jBtDivide.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtDivide.setForeground(new java.awt.Color(255, 0, 0));
        jBtDivide.setText("/");
        jBtDivide.setToolTipText("/");
        buttonGroup2.add(jBtDivide);
        jBtDivide.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtDivideActionPerformed(evt);
            }
        });

        jBtLimpaUltimo.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtLimpaUltimo.setForeground(new java.awt.Color(255, 0, 0));
        jBtLimpaUltimo.setText("C");
        jBtLimpaUltimo.setToolTipText("Limpar último valor");
        buttonGroup2.add(jBtLimpaUltimo);
        jBtLimpaUltimo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtLimpaUltimoActionPerformed(evt);
            }
        });

        jBtReinicia.setFont(new java.awt.Font("Lucida Grande", 1, 10)); // NOI18N
        jBtReinicia.setForeground(new java.awt.Color(255, 0, 0));
        jBtReinicia.setText("CE");
        jBtReinicia.setToolTipText("Limpar Tudo");
        buttonGroup2.add(jBtReinicia);
        jBtReinicia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtReiniciaActionPerformed(evt);
            }
        });

        jBtLimpaUltimoChar.setFont(new java.awt.Font("Lucida Grande", 1, 12)); // NOI18N
        jBtLimpaUltimoChar.setForeground(new java.awt.Color(255, 0, 0));
        jBtLimpaUltimoChar.setText("Backspace");
        jBtLimpaUltimoChar.setToolTipText("Apaga o último caracter");
        buttonGroup2.add(jBtLimpaUltimoChar);
        jBtLimpaUltimoChar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtLimpaUltimoCharActionPerformed(evt);
            }
        });

        jTHistorico.setColumns(20);
        jTHistorico.setEditable(false);
        jTHistorico.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N
        jTHistorico.setLineWrap(true);
        jTHistorico.setRows(5);
        jScrollPane1.setViewportView(jTHistorico);

        jLabel3.setText("Próxima Operação:");

        jLbOperacao.setForeground(new java.awt.Color(204, 0, 0));
        jLbOperacao.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel2Layout.createSequentialGroup()
                .add(7, 7, 7)
                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jPanel2Layout.createSequentialGroup()
                        .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(jButton7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jButton8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jButton9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(jButton4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jButton5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jButton6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jButton2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jButton3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(jButton0, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jBtInverte, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(5, 5, 5)
                                .add(jBtPonto, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jBtDivide, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jBtMultiplica, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jBtSubtrai, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jBtSoma, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                        .add(5, 5, 5)
                        .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jBtLimpaUltimo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jBtReinicia, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jBtPorcentagem, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jBtIgual, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 50, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                    .add(jPanel2Layout.createSequentialGroup()
                        .add(jBtLimpaUltimoChar)
                        .add(18, 18, 18)
                        .add(jLabel3)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jLbOperacao, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 35, Short.MAX_VALUE)))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 18, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 140, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel2Layout.createSequentialGroup()
                .add(7, 7, 7)
                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jPanel2Layout.createSequentialGroup()
                        .add(jScrollPane1)
                        .addContainerGap())
                    .add(jPanel2Layout.createSequentialGroup()
                        .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                                .add(jBtLimpaUltimoChar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(jLabel3))
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(8, 8, 8)
                                .add(jLbOperacao, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 14, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                        .add(18, 18, 18)
                        .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(jBtDivide, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(10, 10, 10)
                                .add(jBtMultiplica, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(10, 10, 10)
                                .add(jBtSubtrai, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(10, 10, 10)
                                .add(jBtSoma, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(jBtLimpaUltimo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(10, 10, 10)
                                .add(jBtReinicia, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(10, 10, 10)
                                .add(jBtPorcentagem, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(10, 10, 10)
                                .add(jBtIgual, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(jPanel2Layout.createSequentialGroup()
                                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                    .add(jButton7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jButton8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jButton9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                .add(10, 10, 10)
                                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                    .add(jButton4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jButton5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jButton6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                .add(10, 10, 10)
                                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                    .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jButton2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jButton3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                .add(10, 10, 10)
                                .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                    .add(jButton0, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jBtInverte, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(jBtPonto, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
                        .add(0, 0, Short.MAX_VALUE))))
        );

        org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jTDisplay))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .add(jTDisplay, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jLabel1.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N
        jLabel1.setText("Calculando valores para o Campo:");

        jLbCampo.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N
        jLbCampo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(jLabel1)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jLbCampo, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                    .add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(jLbCampo, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 15, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// 

    private void jBtDivideActionPerformed(java.awt.event.ActionEvent evt) {                                         
        divide();
    }                                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('1');
    }                                       

    private void jButton0ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('0');
    }                                       

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('2');
    }                                       

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('3');
    }                                       

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('4');
    }                                       

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('5');
    }                                       

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('6');
    }                                       

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('7');
    }                                       

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('8');
    }                                       

    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('9');
    }                                       

    private void jBtPontoActionPerformed(java.awt.event.ActionEvent evt) {                                       
        insereDigito('.');
    }                                       

    private void jBtSomaActionPerformed(java.awt.event.ActionEvent evt) {                                       
        soma();
    }                                     

    private void IlClose(javax.swing.event.InternalFrameEvent evt) {                       
        retornaPai();
        System.out.println("fechando calculadora");
    }                       

    private void jBtSubtraiActionPerformed(java.awt.event.ActionEvent evt) {                                         
        subtrai();
    }                                         

    private void jBtMultiplicaActionPerformed(java.awt.event.ActionEvent evt) {                                             
        multiplica();

    }                                           

    private void jBtReiniciaActionPerformed(java.awt.event.ActionEvent evt) {                                           
        limpaTudo();
    }                                         

    private void jBtIgualActionPerformed(java.awt.event.ActionEvent evt) {                                       
        mostrarResultado();
    }                                       

    private void jBtLimpaUltimoActionPerformed(java.awt.event.ActionEvent evt) {                                             
        FU.LimpaCampo(jTDisplay);
    }                                             

    private void jBtLimpaUltimoCharActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        removeUltimoDigito();
    }                                                 

    private void jBtInverteActionPerformed(java.awt.event.ActionEvent evt) {
        inverteSinal();
    }

    private void jBtPorcentagemActionPerformed(java.awt.event.ActionEvent evt) {
        calculaPorcentagem();
    }
    // Variables declaration - do not modify
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.ButtonGroup buttonGroup2;
    private javax.swing.JButton jBtDivide;
    private javax.swing.JButton jBtIgual;
    private javax.swing.JButton jBtInverte;
    private javax.swing.JButton jBtLimpaUltimo;
    private javax.swing.JButton jBtLimpaUltimoChar;
    private javax.swing.JButton jBtMultiplica;
    private javax.swing.JButton jBtPonto;
    private javax.swing.JButton jBtPorcentagem;
    private javax.swing.JButton jBtReinicia;
    private javax.swing.JButton jBtSoma;
    private javax.swing.JButton jBtSubtrai;
    private javax.swing.JButton jButton0;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLbCampo;
    private javax.swing.JLabel jLbOperacao;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField jTDisplay;
    private javax.swing.JTextArea jTHistorico;
    // End of variables declaration

    private void removeUltimoDigito() {
        jTDisplay.setText(getDisplayString().substring(0, getDisplayString().length() - 1));
    }

    private void soma() {

        setOperacaoCorrente('+');
        if (displayMode == INPUT_MODE) {
            calcula('+', getDisplay());
        }
    }

    private void subtrai() {
        setOperacaoCorrente('-');
        if (displayMode == INPUT_MODE) {
            calcula('-', getDisplay());
        }
    }

    private void multiplica() {
        setOperacaoCorrente('*');
        if (displayMode == INPUT_MODE) {
            calcula('*', getDisplay());
        }
    }

    private void divide() {
        setOperacaoCorrente('/');
        if (displayMode == INPUT_MODE) {
            calcula('/', getDisplay());
        }
    }
//controle dos botoes do teclado
    @Override
    public synchronized void addKeyListener(KeyListener kl) {
        super.addKeyListener(kl);
    }
    KeyListener kl = new KeyAdapter() {

        @Override
        public void keyTyped(KeyEvent ke) {
            System.out.println(ke.getKeyCode());
            System.out.println(ke.getKeyChar());

            if (ke.getKeyChar() == '0') {
                insereDigito(0);
            }
//        if (ke.getKeyCode() == KeyEvent.VK_1) {
            if (ke.getKeyChar() == '1') {
                insereDigito(1);
            }
//        if (ke.getKeyCode() == KeyEvent.VK_2) {
            if (ke.getKeyChar() == '2') {
                insereDigito(2);
            }
//            if (ke.getKeyCode() == KeyEvent.VK_3) {
            if (ke.getKeyChar() == '3') {
                insereDigito(3);
            }
            if (ke.getKeyChar() == '4') {
                insereDigito(4);
            }
            if (ke.getKeyChar() == '5') {
                insereDigito(5);
            }
            if (ke.getKeyChar() == '6') {
                insereDigito(6);
            }
            if (ke.getKeyChar() == '7') {
                insereDigito(7);
            }
            if (ke.getKeyChar() == '8') {
                insereDigito(8);
            }
            if (ke.getKeyChar() == '9') {
                insereDigito(9);
            }
            if (ke.getKeyChar() == '.') {
                insereDigito('.');
            }

            if (ke.getKeyChar() == '+') {
                soma();
            }

//            if (ke.getKeyCode() == KeyEvent.VK_LESS) {
            if (ke.getKeyChar() == '-') {
                subtrai();
            }

//            if (ke.getKeyCode() == KeyEvent.VK_MULTIPLY) {
            if (ke.getKeyChar() == '*') {
                multiplica();
            }
//            if (ke.getKeyCode() == KeyEvent.VK_DIVIDE) {
            if (ke.getKeyChar() == '/') {
                divide();
            }
//            if (ke.getKeyCode() == KeyEvent.VK_EQUALS) {
            if (ke.getKeyChar() == '=') {
                mostrarResultado();
            }
            if (ke.getKeyChar() == '%') {
                calculaPorcentagem();
            }
            if (ke.getKeyChar() == 'c') {
                FU.LimpaCampo(jTDisplay);
            }

            if (ke.getKeyCode() == 10) {
                mostrarResultado();
            }
        }

        @Override
        public void keyPressed(KeyEvent ke) {
            System.out.println(ke.getKeyCode());
            System.out.println(ke.getKeyChar());

        }

        @Override
        public void keyReleased(KeyEvent ke) {
            System.out.println(ke.getKeyCode());
            System.out.println(ke.getKeyChar());
        }
//    }
    };

    private void inverteSinal() {
        setValorAtual(getDisplay() * (-1));
    }

    private void calculaPorcentagem() {
        setValorAtual(getDisplay() / (100));
    }



    private void preencheLabelCampo(char c) {
        String saida = "";
        switch (c) {
            case 'E':
                saida = "valor entrada";
                break;
            case 'T':
                saida = "valor transferência";
                break;
            case 'R':
                saida = "valor retirada";
                break;
            case 'C':
                saida = "valor cheque";
                break;

        }
        jLbCampo.setText(saida);


    }
}
--------------------------------------------------------------------------------
só p/ constar. Essa classe FormUtils, eu uso p/ limpar os campos, listas, tabelas, etc segue abaixo essa classe :

package lib;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class FormUtils {

    public FormUtils() {
    }

    public void LimpaCampo(JTextField T) {
        T.setText(null);
    }

    public void LimpaCampo(JTextArea T) {
        T.setText(null);
        T.setText("");
    }

    public void LimpaCampo(JLabel L) {
        L.setText(null);
        L.setToolTipText(null);
    }

    public void LimpaCampo(JList L) {
        L.removeAll();
    }

    public void LimpaCampo(JComboBox C) {
        if (C.isEnabled() && C.isValid()) {
            C.removeAllItems();
        }
    }

    public void LimpaCombo(JComboBox C) {
        C.removeAllItems();
    }

    public void LimpaCampo(JCheckBox C) {
        C.setSelected(false);
    }

    public void limpaTabela(JTable J) throws Exception {

        int totalLinha = J.getRowCount();
        int totalColuna = J.getColumnCount();

        if (totalLinha > -1) {
            for (int i = 0; i < totalLinha; i++) {
                for (int j = 0; j < totalColuna; j++) {
                    J.getModel().setValueAt(null, i, j);
                }

            }
        }
    }

    public void limpaTabela(JTable J, DefaultTableModel M) throws Exception {

        int totalLinha = J.getRowCount();
        int totalColuna = J.getColumnCount();

        for (int i = 0; i <= M.getRowCount(); i++) {
            try {
                M.removeRow(i);
            } catch (java.lang.ArrayIndexOutOfBoundsException E) {
            }
        }

        if (totalLinha > -1) {
            for (int i = 0; i < totalLinha; i++) {
                for (int j = 0; j < totalColuna; j++) {


                    try {
                        J.getModel().setValueAt(null, i, j);
                        M.removeRow(i);
                    } catch (Exception E) {// java.lang.ArrayIndexOutOfBoundsException E) {
                    }

                }
            }
        }

    }
}

sexta-feira, 30 de março de 2012

Cálculos com datas em JAVA

/* Dentro de um software de RH, na parte de datas de experiência, deve ser calculado 30 e 45 dias a partir de uma data inicial */
import java.text.SimpleDateFormat;
import java.util.Calendar;


/**
 *
 * @author Mario Cezzare Angelicola Chiodi mcezzare@gmail.com
 */

public class testeData {


    private static void calculaPeriodoExperiencia(String dataInicial,int periodo, int dias) {


        Calendar data1 = Calendar.getInstance();
        Calendar dataInicio = Calendar.getInstance();


        int dia, mes, ano;


        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        switch (periodo) {
            case 1:
                
                if (!"  /  /    ".equals(dataInicial)) {
                    String tmpData[] = dataInicial.split("\\/");
                    dia = Integer.parseInt(tmpData[0]);
                    mes = Integer.parseInt(tmpData[1]) - 1; // aqui passo -1 
                    ano = Integer.parseInt(tmpData[2]);


                    dataInicio.set(ano, mes, dia);
                    data1.set(ano, mes, dia);
                    data1.add(Calendar.DAY_OF_WEEK, dias);
                    System.out.println("inicio: " + sdf.format(dataInicio.getTime()));
                    System.out.println(dias + " : " + sdf.format(data1.getTime()));
                }


                break;
                // case 2 , se forem outros campos texto no form
        }
    }


    public static void main(String args[]) {
        String dataInicial = "01/01/2000";
        calculaPeriodoExperiencia(dataInicial,1, 29); // q são 30 dias , mas conta a data inicio
        calculaPeriodoExperiencia(dataInicial,1, 44);// q são 45 dias , mas conta a data inicio
    }
}



saida :
inicio: 01/01/2000

29 : 30/01/2000
inicio: 01/01/2000
44 : 14/02/2000

quarta-feira, 29 de dezembro de 2010

Shell Script de backup para PostgreSQL

Esse script pode ser usado p/ fazer backups diários de todas as bases postgres
exemplo no crontab diariamente as 23:50
50 23 * * * /scripts/backup_pgsql.sh

#!/bin/sh
# Script to backup postgres databases 
# Create a complete bkp with all databses and a separated for each one
# Author: Mario Cezzare mcezzare@gmail.com 
# last update on Wed Dec 29 16:24:11 on ttys005   
PGDUMPALL="$(which pg_dumpall)"
PSQL="$(which psql)"
GZIP="$(which gzip)"


x=`date '+BACKUP-%d.%m.%y'`
separator="-----------------------------------"
path_backup=/backup/pgsql/
notify="sysadmin@email.com.br"
cd $path_backup
mkdir $x
path_backup="$path_backup/$x"
echo $x
now=`date '+%d.%m.%y %H:%M:%S'`
##################################################################################
# PART 1 - LOGS 
##################################################################################
echo " starting at $x $now"  >> $path_backup/pgsql-databases-$x.log


##################################################################################
# PART 2 - ALL DATAL 
##################################################################################
$PGDUMPALL -U postgres |  $GZIP -c  > $path_backup/$x-all-pg.pgsql.gz


##################################################################################
# PART 3 - EACH ONE
##################################################################################
DIR=$path_backup
[ ! $DIR ] && mkdir -p $DIR || :
LIST=$($PSQL -U postgres -l | awk '{ print $1}' | grep -vE '^-|^List|^\(|^Name|template[0|1]')
for d in $LIST
do
  echo "Dumping $d" 
  pg_dump -U postgres $d | $GZIP -c >  $DIR/$d.pgsql.gz
  now=`date '+%d.%m.%y %H:%M:%S'`
  echo "$d em $now"  >> $path_backup/pgsql-databases-$x.log
done
##################################################################################
# PART 1B - END LOGS 
##################################################################################
echo " ending at $x $now"  >> $path_backup/pgsql-databases-$x.log


##################################################################################
# PART 4 - NOTIFICATIONS 
##################################################################################


ls -aloh $path_backup | mail -s BACKUP_POSTGRES_DATABASES $notify

Shell Script de backup para Mysql

Esse script pode ser usado p/ fazer backups diários de todas as bases mysql
exemplo no crontab diariamente as 23:50
50 23 * * * /scripts/backup_mysql.sh
como root no mysql de permissao de leitura p/ o usuario backup_operator
GRANT ALL ON *.* TO 'backup_operator'@'localhost'

#!/bin/sh
# Script to backup mysql databases
# Create a complete bkp with all databses and a separated for each one
# Author: Mario Cezzare mcezzare@gmail.com 
# last update on Wed Dec 29 16:24:11 on ttys005

x=`date '+BACKUP-%d.%m.%y'`
now=`date '+%d.%m.%y %H:%M:%S'`
separator="-----------------------------------"
path_backup=/backup/mysql/
notify="sysadmin@email.com.br"
cd $path_backup
mkdir $x
path_backup="$path_backup/$x"
echo $x
##################################################################################
# PART 1 - LOGS
##################################################################################

echo " starting at $x $now"  >> $path_backup/mysql_databases-$x.log
echo $separator

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
MYSQLUSER="backup_operator"
MYSQLPASSWD="senha_do_backup_operator"
MYSQLHOST="localhost"
GZIP="$(which gzip)"
##################################################################################
# PART 2 - ALL DATA
##################################################################################

echo "backup of mysql  databases "
mysqldump --all-databases -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASSWD | gzip -c > $path_backup/backup-all-mysql-$x.mysql.gz

##################################################################################
# PART 3 - EACH ONE
##################################################################################

DBS="$($MYSQL -u $MYSQLUSER -h $MYSQLHOST -p$MYSQLPASSWD -Bse 'show databases')"
for db in $DBS ; do
 echo "backing up $db"
 FILE="mysql_$db-$x.mysql.gz"
 $MYSQLDUMP -u $MYSQLUSER -h $MYSQLHOST -p$MYSQLPASSWD $db | $GZIP -c  > $path_backup/$FILE
 now=`date '+%d.%m.%y %H:%M:%S'`
 echo " $db at $x $now"  >> $path_backup/mysql_databases-$x.log
done

##################################################################################
# PART 3 - EACH ONE
##################################################################################

now=`date '+%d.%m.%y %H:%M:%S'` 
echo " ending at $x $now"  >> $path_backup/mysql_databases-$x.log

##################################################################################
# PART 4 - NOTIFICATIONS
##################################################################################

ls -aloh $path_backup | mail -s BACKUP_MYSQL_DATABASES $notify

segunda-feira, 9 de agosto de 2010

Calendário customizável em ASP (destaque por data) e exemplo de cálculos com datas

Mexendo em umas aplicações webs mais antigas por aqui, encontrei um script q desenvolvi há um tempo atras e que me custou um tempinho p/ fazer.
Resolvi compartilhá-lo.

Segue o código fonte abaixo , salve o como
mcezzare_calendar.asp, ou como quiser,   e aonde está o código
<a href="http://REPLACE_YOUR_SITE/agenda_itens.php?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a>

1 - Acerte o link e o target caso esteja dentro de um frame ou o detalhe do evento esteja num iframe. se não remova o texto target="miolo".
 
2 - Este calendario pode ser usado p/ varios sites :
veja um exemplo chamando script dessa maneira na url : 
http://REPLACE_YOUR_SITE/mcezzare_calendar.asp?data=01/3/2005&days=1-9-14-25-27 



<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
Option Explicit
'Mcezzare's  Calendar
'mcezzare@gmail.com last update Mon Aug  9 10:21:23 on ttys000
'version 1.3 date Fri Nov 25 08:31:32 BRST 2005
'this file display a calendar in table acording to the variable data on url ?data=dd/mm/yy
'if no value given, the default system time (now) wiill be used
' use : http://your_domain.com/calendar_final.asp?data=01/3/2005&days=1-9-14-25-27
'this calendar is mathematically correct, just chnage the line  Session.lcid = xxx to you timezone/language
'from the value data on url the script builds a ccalendar based on Year and Month
'If you want to flag some days 
Dim mes_st,mes,dia_st,dia_ini,dia_fim,dtx,mes_fresco,data,mesname,proximomes,ano,dia,mesanterior
Dim link,linkano,linkano_prox,linkmes_prox,linkmes_ant,linkano_ant,linksmes_prox
Dim i,x,z
Dim days,days_aux,high_days, color,teste,check_high
Dim diasr, diasr_aux,writeaux
Dim aux_file
Session.lcid = 1046 ' pt-BR
    if request("data") = "" then
        data = now
    else
        data = request("data")
    end if
    if not isdate(data) then data = now
' date variables
mes_st = month(data)
mes = month(data)
mesname = monthname(mes)
dia_st=1
ano = year(data)
dia_ini = dateserial(ano,mes,1)
dia_fim =dateserial(ano,mes +1,1)-1
dtx =weekday(dateserial(ano,mes,dia_st))
mes_fresco = Ucase(Left(mesname,1)) & Lcase(right(mesname,len(mesname)-1))

' file name , you can give any name.
link = Request.ServerVariables("SCRIPT_NAME") & "?data=01/"
aux_file= "http://REPLACE_YOUR_SITE/agenda_itens.php"

' if there is a other file you want to save data on database for example, you can call this page for your site
' like this
proximomes = mes + 1
mesanterior= mes - 1


'tem q fazer um select case p/ o mes qdo for 01 e 12
        linkano = ano
        linkano_prox = ano
        linkano_ant = ano
        linkmes_ant = mes
        linksmes_prox = mes

select case mes
    case 1
        linkano_ant = ano - 1
        linkmes_ant = 12
        linkmes_prox = mes + 1
    case 12
        linkano_prox= ano + 1
        linkmes_prox = 1
        linkmes_ant = mes -1
        linkano_ant = ano
    case else
        linkano = ano
        linkano_prox = ano
        linkano_ant = ano
        linkmes_ant = mes - 1
        linkmes_prox = mes + 1
end select

days=Request("days")
days_aux = split(days,"-")
diasr= Request("dias")
diasr_aux = split(diasr,"-")
 check_high = false
 color = "#FFFFFF"
function testa(x)   
testa = false
     for z = lbound(days_aux) to Ubound(days_aux)
    '    if   cdbl(days_aux(z)) =  cdbl(x)  then check_high = true
    '    if   cdbl(days_aux(z)) =  cdbl(x)  then color = "#FF0000"
        if   cdbl(days_aux(z)) =  cdbl(x)  then testa = true
        'response.write typename(vartype(days_aux(z))) & "-" & typename(vartype(x)) &   " " & check_high & "<br>"
        response.write cdbl(days_aux(z)) & "-" & cdbl(x) &   " --> " & check_high & " " & color & "<br>"
        'response.write z & "-" & days_aux(z) & "-" & x
  next

end function

'
'high_days = high_days &
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Calendario</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="calendar.css" rel="stylesheet" type="text/css">
<script language="javascript" type="text/javascript">
<!--
function pinta(x){
document.getElementById("calendar").bgColor= "#FFFF00";
}

function pintacel(x){
var f = document.form1;
var campo =  x;
//document.form1.x.class='botao3';
//window.alert(document.getElementById(''+campo).value);
//document.getElementById(''+campo)
document.ids.cp1.color="#FFFF00";
}
function pintacelretorno(x){
var f = document.form1;
var campo =  x;

document.ids.cp1.color="#6699FF";
}
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_changeProp(objName,x,theProp,theValue) { //v6.0
  var obj = MM_findObj(objName);
  if (obj && (theProp.indexOf("style.")==-1 || obj.style)){
    if (theValue == true || theValue == false)
      eval("obj."+theProp+"="+theValue);
    else eval("obj."+theProp+"='"+theValue+"'");
  }
}
//-->
</script>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="

<% for z = lbound(diasr_aux) to Ubound(diasr_aux)%>

MM_changeProp('cp<%=diasr_aux(z)%>','','style.backgroundColor','#6699FF','DIV');

<% next%>
<% for z = lbound(days_aux) to Ubound(days_aux)

%>
MM_changeProp('cp<%=days_aux(z)%>','','style.backgroundColor','#FFFF00','DIV');

<% next%>
">

<!-- <p>
mes : <% = mes %><br>
ano : <% = ano %><br>
primeiro dia da semana : <% = weekdayname(dtx) %><br>
primeiro dia do mes : <% = dia_ini %><br>
ultimo dia do mes : <% = dia_fim %><br>
dias selecionados : <% = days %>
<br>
<a href="#" onClick="pinta(1);">pinta</a> tabela<br>
<a href="#" onClick="pintacel('cp2');">pinta celula</a><br>
<a href="#" onClick="MM_changeProp('div2','','style.backgroundColor','#FFFF00','DIV')">cc
</a> <a href="#" onClick="MM_changeProp('cp2','','style.backgroundColor','#FFFF00','DIV')">cc </a> <a href="#" onClick="MM_changeProp('cp8','','style.backgroundColor','#FFFF00','DIV')">cc </a><br>
</p>


<div class="botao2" id="div2">hdskjhksdj</div>
<p>&nbsp; </p>
<p>&nbsp; </p>
-->
<form action="#" method="post" name="form1" id="form1">
  <table width="140"  border="1" align="center" cellpadding="0" cellspacing="0" class="tabela">
    <tr>
      <td valign="top">
<table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" id="calendar">
<tr align="center">
            <td colspan="7" class="center11verdanaRED">
              <!--<a href="<% = link & linkmes_ant & "/" & linkano_ant %>">&lt;&lt;</a> <a href="#">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </a> -->
<% = mes_fresco %>
              -
              <% = ano %>
              <!--   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="<% = link & linkmes_prox & "/" & linkano_prox%>"> &gt;&gt;</a> -->
            </td>
          </tr>
          <tr align="center" class="center12verdanaBOLD">
            <% for i = 1 to 7 %>
            <td>
              <% =Ucase(Left(weekdayname(weekday(i)),1))%>
            </td>
            <% next%>
          </tr>
          <tr align="center">
            <%

days_aux = split(days,"-")


 Select Case  dtx 'day of week
 case 1
color = "#FFFFFF"   

 for x = day(dia_ini) to day(dia_fim)

  %>
            <td> <div class="botao2" id="cp<%=x%>"><a href="<%=aux_file%>?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a></div></td>
            <%
 if x mod 7 =0 then response.write "    </tr><tr align='center'>"
 next
 %>
            <% case 2 %>
            <td><div class="botao2" id="branco"></div></td>
            <%  for x = day(dia_ini) to day(dia_fim)
  %>
            <td><div class="botao2" id="cp<%=x%>"><a href="<%=aux_file%>?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a></div></td>
            <%
 if x =6 then response.write "    </tr><tr align='center'>"
  if x =13 then response.write "    </tr><tr align='center'>"
  if x =20 then response.write "    </tr><tr align='center'>"
  if x =27 then response.write "    </tr><tr align='center'>"
 if x mod 7 =0 and x <> 7 and x <> 13  and x <> 14 and x <> 21  and x <> 28 then response.write "    </tr><tr align='center'>"
 next
 %>
            <% case 3 %>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <%
 for x = day(dia_ini) to day(dia_fim)
  %>
            <td><div class="botao2" id="cp<%=x%>"><a href="<%=aux_file%>?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a></div></td>
            <%
 if x =5 then response.write "    </tr><tr align='center'>"
  if x =12 then response.write "    </tr><tr align='center'>"
  if x =19 then response.write "    </tr><tr align='center'>"
  if x =26 then response.write "    </tr><tr align='center'>"

 if x mod 7 =0 and x <> 7  and x <> 14 and x <> 21 and x <> 28  then response.write "    </tr><tr align='center'>"
 next
 %>
            <% case 4 %>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <% 
       
    for x = day(dia_ini) to day(dia_fim)
  %>
            <td><div class="botao2" id="cp<%=x%>"><a href="<%=aux_file%>?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a></div></td>
            <%
  if x =4 then response.write "    </tr><tr align='center'>"
  if x =11 then response.write "    </tr><tr align='center'>"
  if x =18 then response.write "    </tr><tr align='center'>"
  if x =25 then response.write "    </tr><tr align='center'>"
 if x mod 7 =0 and x <> 7  and x <> 14 and x <> 21 and x <> 28  then response.write "    </tr><tr align='center'>"
 next
 %>
            <% case 5 %>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <% 
       
    for x = day(dia_ini) to day(dia_fim)
  %>
            <td><div class="botao2" id="cp<%=x%>"><a href="<%=aux_file%>?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a></div></td>
            <%
if x =3 then response.write "    </tr><tr align='center'>"
  if x =10 then response.write "    </tr><tr align='center'>"
  if x =17 then response.write "    </tr><tr align='center'>"
  if x =24 then response.write "    </tr><tr align='center'>"
 if x mod 7 =0 and x <> 7  and x <> 14 and x <> 21 and x <> 28  then response.write "    </tr><tr align='center'>"
 next%>
            <% case 6 %>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <% 
    for x = day(dia_ini) to day(dia_fim)
  %>
            <td><div class="botao2" id="cp<%=x%>"><a href="<%=aux_file%>?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a></div></td>
            <%
if x =2 then response.write "    </tr><tr align='center'>"
if x =9 then response.write "    </tr><tr align='center'>"
if x =16 then response.write "    </tr><tr align='center'>"
if x =23 then response.write "    </tr><tr align='center'>"
if x =30 then response.write "    </tr><tr align='center'>"

 if x mod 7 =0 and x <> 7  and x <> 14 and x <> 21 and x <> 28  then response.write "    </tr><tr align='center'>"
 next%>
            <% case 7 %>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <td><div class="botao2" id="branco"></div></td>
            <% 
    for x = day(dia_ini) to day(dia_fim)
  %>
            <td><div class="botao2" id="cp<%=x%>"><a href="<%=aux_file%>?data=<%=x%>/<%=mes%>/<%=ano%>" target="miolo"><%=x%></a></div></td>
            <%
if x =1 then response.write "    </tr><tr align='center'>"
if x =8 then response.write "    </tr><tr align='center'>"
if x =15 then response.write "    </tr><tr align='center'>"
if x =22 then response.write "    </tr><tr align='center'>"
if x =29 then response.write "    </tr><tr align='center'>"

if x mod 7 =0 and x <> 7  and x <> 14 and x <> 21 and x <> 28  then response.write "    </tr><tr align='center'>"
 next%>
            <% 
end Select
   %>
          </tr>
        </table></td>
    </tr>
  </table>
</form>
</body>
</html>