Package com.sevenrtc.aas.ui

Source Code of com.sevenrtc.aas.ui.MovimentosDialog$iFTP

package com.sevenrtc.aas.ui;

import javax.swing.JSeparator;

import com.sevenrtc.aas.shared.Constantes;
import com.sevenrtc.aas.shared.Contas;
import com.sevenrtc.aas.shared.Contextos;
import com.sevenrtc.aas.ui.helper.JComboBoxAutoCompletion;
import com.sevenrtc.aas.entidades.Movimento;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.looks.plastic.PlasticXPLookAndFeel;

import java.awt.AWTKeyStroke;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FocusTraversalPolicy;
import java.awt.KeyboardFocusManager;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.UIManager;

/**
* Classe responsavel pelos movimentos contabeis individuais
*
* @author Anthony Accioly
*
*/
public class MovimentosDialog extends JDialog {
  /**
   * Classe interna responsavel por cuidar da ordem da transferancia de foco
   * entre objetos internos da classe
   *
   * @author Anthony Accioly
   *
   */
  class iFTP extends FocusTraversalPolicy {

    public Component getComponentAfter(Container focusCycleRoot,
        Component aComponent) {

      if (aComponent.equals(boxConta.getEditor().getEditorComponent()))
        return fieldValor;
      else if (aComponent.equals(fieldValor)) {
        if (botaoConfirmar.isEnabled())
          return botaoConfirmar;
        return botaoCancelar;
      } else if (aComponent.equals(botaoConfirmar))
        return botaoCancelar;
      else if (aComponent.equals(botaoCancelar)) {
        if (boxConta.isEnabled())
          return boxConta;
        return botaoCancelar;
      }
      return boxConta;
    }

    public Component getComponentBefore(Container focusCycleRoot,
        Component aComponent) {

      if (aComponent.equals(boxConta.getEditor().getEditorComponent()))
        return botaoCancelar;
      else if (aComponent.equals(fieldValor))
        return boxConta;
      else if (aComponent.equals(botaoConfirmar))
        return fieldValor;
      else if (aComponent.equals(botaoCancelar)) {
        if (botaoConfirmar.isEnabled())
          return botaoConfirmar;
        else if (fieldValor.isEnabled())
          return fieldValor;
        return botaoCancelar;
      }

      return boxConta;
    }

    public Component getDefaultComponent(Container focusCycleRoot) {
      if (boxConta.isEnabled())
        return boxConta;
      else
        return botaoCancelar;
    }

    public Component getFirstComponent(Container focusCycleRoot) {
      return boxConta;
    }

    public Component getLastComponent(Container focusCycleRoot) {
      return botaoCancelar;
    }

  }

  private static final long serialVersionUID = -7975413977558141485L;

  /**
   * Metodo principal da classe
   *
   * @param args
   *            Strings passadas como parametro
   */
  public static void main(String args[]) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          UIManager.setLookAndFeel(new PlasticXPLookAndFeel());
        } catch (Exception e) {
          e.printStackTrace();
        }
        new MovimentosDialog('d');

      }
    });
  }

  private JButton botaoCancelar = new JButton();

  private JButton botaoConfirmar = new JButton();

  private JComboBox boxConta = new JComboBox(Contas.getCodigos());

  private boolean confirmou = false;

  /*
   * Modificado manualmente, inicializa jFormattedTextFields com respectivos
   * formatadores
   */
  private JFormattedTextField fieldValor = new JFormattedTextField(Constantes
      .getFormatterValor());

  private JTextField fieldValorMovimento = new JTextField();

  private JSeparator jSeparator1 = new JSeparator();

  private JLabel labelConta = new JLabel();

  private JLabel labelValor = new JLabel();

  // Id do movimento
  private Movimento mv;

  // Seta configurações de foco e funções para autocompletar código
  {
    Set<AWTKeyStroke> forwardKeys = getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
    Set<AWTKeyStroke> newForwardKeys = new HashSet<AWTKeyStroke>(
        forwardKeys);
    newForwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
    setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
        newForwardKeys);
    this.setFocusTraversalPolicy(new iFTP());
    JComboBoxAutoCompletion.enable(boxConta);
    if (Contas.getCodigos().length == 0) {
      boxConta.setEnabled(false);
      fieldValor.setEnabled(false);
    }

  }

  /** Construtor para inicialização sem dependencia da interface principal */
  public MovimentosDialog(char tipo) {
    super();
    try {
      jbInit();
      this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      this.setVisible(true);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /** Construtor para novos movimentos */
  public MovimentosDialog(JDialog parent, String title, char tipo) {
    super(parent, title, true);
    try {
      jbInit();
      this.mv = new Movimento(-1, 0, 0, tipo, -1, null, Contextos
          .getContextoAtual());
      this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      this.setLocationRelativeTo(parent);
      this.setVisible(true);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /** Construtor para movimentos existentes */
  public MovimentosDialog(JDialog parent, String title, Movimento m) {
    super(parent, title, true);
    try {
      jbInit();
      this.mv = m;
      this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      this.setLocationRelativeTo(parent);
      boxConta.setSelectedItem(mv.getConta());
      fieldValor.setValue(mv.getValor());
      botaoConfirmar.setEnabled(true);
      this.setVisible(true);
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  /**
   * Adds fill components to empty cells in the first row and first column of
   * the grid. This ensures that the grid spacing will be the same as shown in
   * the designer.
   *
   * @param cols
   *            an array of column indices in the first row where fill
   *            components should be added.
   * @param rows
   *            an array of row indices in the first column where fill
   *            components should be added.
   */
  private void addFillComponents(Container panel, int[] cols, int[] rows) {
    Dimension filler = new Dimension(10, 10);

    boolean filled_cell_11 = false;
    CellConstraints cc = new CellConstraints();
    if (cols.length > 0 && rows.length > 0) {
      if (cols[0] == 1 && rows[0] == 1) {
        /** add a rigid area */
        panel.add(Box.createRigidArea(filler), cc.xy(1, 1));
        filled_cell_11 = true;
      }
    }

    for (int index = 0; index < cols.length; index++) {
      if (cols[index] == 1 && filled_cell_11) {
        continue;
      }
      panel.add(Box.createRigidArea(filler), cc.xy(cols[index], 1));
    }

    for (int index = 0; index < rows.length; index++) {
      if (rows[index] == 1 && filled_cell_11) {
        continue;
      }
      panel.add(Box.createRigidArea(filler), cc.xy(1, rows[index]));
    }

  }

  /** Metodo ativado junto ao botao cancelar */
  private void botaoCancelar_actionPerformed() {
    this.dispose();
  }

  /** Metodo ativado junto ao botao confirmar */
  private void botaoConfirmar_actionPerformed() {

    mv.setConta((String) boxConta.getSelectedItem());
    mv.setValor((Number) fieldValor.getValue());
    confirmou = true;
    this.dispose();
  }

  /** Metodo ativado quando algum item da caixa de conta é selecionado */
  private void boxConta_itemStateChanged(ItemEvent e) {

    if (e.getStateChange() == ItemEvent.SELECTED)
      fieldValorMovimento.setText(Contas.getAssinatura((String) boxConta
          .getSelectedItem()));

  }

  /**
   * Diz se o usuário confirmou a modificação
   *
   * @return true caso o usuaário tenha confirmado a modificação
   */
  public boolean getConfirmou() {
    return confirmou;
  }

  /**
   * Retorna o ID do movimento modificado
   *
   * @return long com o ID do movimento modificado
   */
  public final long getMovimentoID() {
    return mv.getId();
  }

  /**
   * Retorna o movimento modificado / recém inserido
   *
   * @return movimento trabalhado na janela
   */
  public Movimento getMv() {
    return mv;
  }

  /** Inicializa os componentes da janela
   *
   * @throws Exception caso seja impossivel iniciar o GUI
   */
  private void jbInit() throws Exception {
    JPanel painelPrincipal = new JPanel();
    FormLayout formlayout1 = new FormLayout(
        "FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:70DLU:GROW(1.0),FILL:10DLU:NONE,FILL:55DLU:GROW(0.1),FILL:DEFAULT:NONE",
        "CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:10DLU:NONE,CENTER:DEFAULT:NONE,CENTER:10DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE");

    CellConstraints cc = new CellConstraints();
    painelPrincipal.setLayout(formlayout1);

    this.getContentPane().setLayout(new BorderLayout());
    labelValor.setText("Valor:");
    labelValor.setLabelFor(fieldValor);
    labelValor.setDisplayedMnemonic('v');
    labelConta.setText("Conta:");
    labelConta.setLabelFor(boxConta);
    labelConta.setDisplayedMnemonic('n');
    fieldValor.setToolTipText("Valor da Operação");

    /*
     * Caso raro onde eu optei por um evento com logica interna para poder
     * remove-lo em tempo de execucao usando o referenciador this... Por
     * favor nao facam isso
     */
    fieldValor.addKeyListener(new KeyAdapter() {
      public void keyTyped(KeyEvent e) {
        if (Character.isDigit(e.getKeyChar())) {
          botaoConfirmar.setEnabled(true);
          fieldValor.removeKeyListener(this);
        }

      }
    });
    boxConta.setEditable(true);
    boxConta.setToolTipText("Número da conta");
    boxConta.setMaximumRowCount(4);
    boxConta.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent e) {
        boxConta_itemStateChanged(e);
      }
    });
    botaoConfirmar.setText("Confirmar");
    botaoConfirmar.setMnemonic('o');
    botaoConfirmar.setToolTipText("Confirmar movimento");
    botaoConfirmar.setEnabled(false);
    botaoConfirmar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        botaoConfirmar_actionPerformed();
      }
    });
    botaoCancelar.setText("Cancelar");
    botaoCancelar.setMnemonic('c');
    botaoCancelar.setToolTipText("Cancelar Operação");
    botaoCancelar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        botaoCancelar_actionPerformed();
      }
    });
    fieldValorMovimento.setEditable(false);
    // Modificado manualmente, atualiza o texto de field
    fieldValorMovimento.setText(Contas.getAssinatura((String) boxConta
        .getSelectedItem()));
    fieldValorMovimento.setToolTipText("Conta selecionada");
    fieldValorMovimento.setFocusable(false);

    painelPrincipal.add(labelConta, cc.xy(2, 3));
    painelPrincipal.add(labelValor, cc.xy(2, 6));
    painelPrincipal.add(jSeparator1, cc.xy(6, 8));
    painelPrincipal.add(botaoCancelar, cc.xywh(6, 5, 1, 2));
    painelPrincipal.add(botaoConfirmar, cc.xywh(6, 2, 1, 2));
    painelPrincipal.add(boxConta, cc.xy(4, 3));
    painelPrincipal.add(fieldValor, cc.xy(4, 6));
    painelPrincipal.add(fieldValorMovimento, cc.xywh(2, 10, 5, 1));
    addFillComponents(painelPrincipal, new int[] { 1, 2, 3, 4, 5, 6, 7 },
        new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 });
    this.add(painelPrincipal, BorderLayout.CENTER);
    this.pack();

  }

}
TOP

Related Classes of com.sevenrtc.aas.ui.MovimentosDialog$iFTP

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.