/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package practica1.manejoExperimento;
import es.miguelgonzalez.jgraficacomida.JGraficaComidaDibujo;
import es.miguelgonzalez.jgraficacomida.ModeloGraficaComida;
import java.awt.*;
import java.util.ArrayList;
import javax.swing.table.JTableHeader;
import practica1.language.Language;
import practica1.logic.LogicExperimento;
import practica1.logic.LogicPoblacion;
import practica1.ui.tablaPoblacion.ModeloPoblacionTabla;
import practica1.ui.tablaPoblacion.TablaPoblacion;
/**
* Clase que permite imprimir un experimento
* @author Miguel González - Ceura
*/
public class ImprimirExperimento {
private static Font fuente = new Font("Dialog", Font.PLAIN, 10);
private static Font fuenteG = new Font("Dialog", Font.BOLD, 12);
private static int margenSuperior = 60;
private static int margenIzquierdo = 60;
private static int contadorNumLinea = 0;
private static Graphics pagina = null;
private static PrintJob pj = null;
/**
* Clase estática que imprime por impresora un experimento
* @param experimento Recibe un experimento a imprimir
*/
public static void imprimir(LogicExperimento experimento) {
nuevaPagina(experimento);
imprimirLineaVacia();
imprimirLineaVacia();
pagina.setFont(fuenteG);
imprimirLinea(Language.getI().getP("NOMBRE_EXPERIMENTO") + ": " +
experimento.getNombreExperimento(), 20);
pagina.setFont(fuente);
imprimirLineaVacia();
imprimirLinea(Language.getI().getP("NUMERO_POBLACIONES") + ": " +
experimento.countPoblaciones() , 0);
imprimirLinea(Language.getI().getP("NOMBRE_INVESTIGADOR") + ": " +
experimento.getNombreInvestigador() , 0);
imprimirLinea(Language.getI().getP("PROYECTO_INVESTIGACION") + ": " +
experimento.getProyectoInvestigacion() , 0);
imprimirLinea(Language.getI().getP("TIPO_BACTERIA") +
experimento.getTipoBacteria() , 0);
ArrayList<LogicPoblacion> poblaciones = experimento.getPoblaciones();
//Recorremos las poblaciones
for(LogicPoblacion poblacion : poblaciones) {
//Creamos una página por experimento
nuevaPagina(experimento);
imprimirLinea(Language.getI().getP("POBLACION") + ": " +
poblacion.getNombrePoblacion(), 0);
imprimirLinea(Language.getI().getP("FECHA_COMIENZO_POBLACION") +
": " + poblacion.getFecha(), 10);
imprimirLinea(Language.getI().getP("CONDICIONES_LUMINOSIDAD") +
": " + poblacion.getLuminosidad(), 10);
imprimirLinea(Language.getI().getP("TAMANIO_POBLACION") +
": " +
poblacion.getTamanioPoblacion(), 10);
imprimirLinea(Language.getI().getP("TEMPERATURA") +
": " + poblacion.getTemperatura()
+ poblacion.getEscalaTemperatura(), 10);
imprimirLineaVacia();
//Imprimimos los datos del modelo de la gráfica
ModeloGraficaComida grafica = poblacion.getModeloGraficaComida();
imprimirLinea(Language.getI().getP("DATOS_GRAFICA_COMIDA"), 0);
imprimirLinea(Language.getI().getP("ALIMENTACION_INICIAL") +
": " + grafica.getAlimentoInicial(), 10);
imprimirLinea(Language.getI().getP("ALIMENTACION_MAXIMA") +
": " + grafica.getAlimentoMax(), 10);
imprimirLinea(Language.getI().getP("DIA_ALIMENTACION_MAXIMA") +
": " + grafica.getDiaMax(), 10);
imprimirLinea(Language.getI().getP("ALIMENTACION_FINAL") +
": " + grafica.getAlimentoFinal(), 10);
//Pintamos la gráfica
Graphics graphicGrafica = pagina.create(250, 30, 300, 200);
JGraficaComidaDibujo jGrafica = new JGraficaComidaDibujo(grafica);
jGrafica.setSize(300,200);
jGrafica.paintComponent(graphicGrafica);
//Imprimimos los datos del modelo de la tabla
Graphics graphicTabla = pagina.create(70, 220, 500, 530);
ModeloPoblacionTabla modeloTabla = poblacion.getModeloPoblacionTabla();
TablaPoblacion tablaPoblacion = new TablaPoblacion(modeloTabla);
JTableHeader header = tablaPoblacion.getTableHeader();
tablaPoblacion.setSize(1, 470);
header.setSize(tablaPoblacion.getWidth(), 30);
tablaPoblacion.setPreferredScrollableViewportSize(
tablaPoblacion.getPreferredSize());
header.paint(graphicTabla);
graphicTabla.translate(0, header.getHeight());
tablaPoblacion.paint(graphicTabla);
}
//Terminamos la impresión
finImpresion();
}
/**
* Imprime una línea en un Graphics de la impresora
* @param linea String a imprimir
* @param margenIzquierdoExtra Margen izq. respecto a la hoja donde se imprime
*/
private static void imprimirLinea(String linea, int margenIzquierdoExtra) {
pagina.drawString(linea , margenIzquierdo + margenIzquierdoExtra,
margenSuperior + contadorNumLinea * 15);
contadorNumLinea++;
}
/**
* Imprime una línea vacía
*/
private static void imprimirLineaVacia() {
contadorNumLinea++;
}
/**
* Crea una nueva página donde se va a imprimir, si es la primera vez
* pregunta que impresora se quiere utilizar.
* @param experimento Recibe un experimento
*/
private static void nuevaPagina(LogicExperimento experimento) {
if(pj == null) {
pj = Toolkit.getDefaultToolkit().
getPrintJob(new Frame(), experimento.getNombreExperimento()
, null);
//Si se pulsa cancelar pj vale null
} else {
pagina.dispose();
}
if(pj == null) {
throw new RuntimeException("Se ha pulsado cancelar");
}
contadorNumLinea = 0;
pagina = pj.getGraphics();
pagina.setFont(fuente);
pagina.setColor(Color.black);
}
/**
* Finaliza la impresión
*/
private static void finImpresion() {
pagina.dispose();
pj.end();
pj = null;
pagina = null;
contadorNumLinea = 0;
}
}