grafix.graficos.eixos.EixoHorizontalComLabels.java Source code

Java tutorial

Introduction

Here is the source code for grafix.graficos.eixos.EixoHorizontalComLabels.java

Source

/*
  Copyright (C) 2001-2012, Joao Medeiros, Paulo Vilela (grafix2.com)
      
  Este arquivo  parte do programa Grafix2.com
      
  Grafix2.com  um software livre; voc pode redistribui-lo e/ou 
  modifica-lo dentro dos termos da Licena Pblica Geral GNU como 
  publicada pela Fundao do Software Livre (FSF); na verso 2 da 
  Licena.
    
  Este programa  distribuido na esperana que possa ser til, 
  mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAO a qualquer
  MERCADO ou APLICAO EM PARTICULAR. Veja a
  Licena Pblica Geral GNU para maiores detalhes.
    
  Voc deve ter recebido uma cpia da Licena Pblica Geral GNU
  junto com este programa, se no, veja uma cpia em
  <http://www.gnu.org/licenses/>
      
 */

package grafix.graficos.eixos;

import grafix.principal.Acao;
import grafix.telas.JanelaGraficos;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.swing.text.DateFormatter;
import org.jfree.chart.axis.*;
import org.jfree.ui.*;

public class EixoHorizontalComLabels extends EixoHorizontal {

    private Acao acao;
    private int QUANTIDADE_DATAS = 15;
    private int diasExibidosAnterior = 0;
    private List ticksAnteriores = null;
    private final long ref = 86400000;

    public EixoHorizontalComLabels(JanelaGraficos janela) {
        super(janela);
        this.acao = janela.getAcao();
        setTickLabelFont(new Font(Font.DIALOG, Font.PLAIN, 9));
        setAutoTickUnitSelection(true);
    }

    @Override
    public List refreshTicks(Graphics2D g2, AxisState state, Rectangle2D dataArea, RectangleEdge edge) {
        try {
            long l1 = this.getMaximumDate().getTime();
            long l2 = this.getMinimumDate().getTime();
            int diasExibidos = (int) ((l1 - l2) / ref);
            if (diasExibidos == diasExibidosAnterior && ticksAnteriores != null) {
                return ticksAnteriores; // otimizacao
            } else {
                List result = new ArrayList();
                int j = 0;
                for (int i = acao.getNumeroRegistros() - 1; i >= 0; i--) {
                    int n = (int) (diasExibidos / QUANTIDADE_DATAS);
                    if (j++ % n == 0) {
                        result.add(new DateTick(acao.getRegistro(i).getDataCorrida().getStart(),
                                new DateFormatter(new SimpleDateFormat("dd/MM/yy"))
                                        .valueToString(acao.getRegistro(i).getData().getStart()),
                                TextAnchor.TOP_CENTER, TextAnchor.TOP_RIGHT, 0));
                    } else {
                        result.add(new DateTick(acao.getRegistro(i).getDataCorrida().getStart(), "",
                                TextAnchor.TOP_CENTER, TextAnchor.TOP_RIGHT, 0));
                    }
                }
                ticksAnteriores = result;
                diasExibidosAnterior = diasExibidos;
                return result;
            }
        } catch (Exception e) {
            return new ArrayList();
        }
    }
}