porfa, ayuda con consulta mysql y con java.

#1
Hola estoy haciendo un pequeño sistemita en Java y mysql.
les cuento que se trata de un sistema que genera diferentes tipos de oficio. el usuario inserta datos que le pide y depues los guarda o lo imprime.

ya voy en una parte que la verdad se me complica bastante:eolo:, necesito un tipo de consulta que me haga una especie de resumen de
*cuantos oficios de han creado
*cuantos de cada tipo
*cuantos de cada tipo son de cierto usuario

este es el modelo de mi base de datos



como pueden ver tengo tablas para cada uno de los tipos de oficios, estos estan ligados a la tabla OFICIO por medio de la foreign key id_oficio

me gustaria que la consulta final pudiera tener esta forma

TIPO DE OFICIO // USUARIO1 // USUARIO2 // USUARIO3 // TOTAL
permiso economico // 3 // 4 // 2 //9
omision entrada //......
omision salida// .........
omision total//.........
justificante medico//.......
etc

para poder poner el resultSet en un JTable




en caso de que me pudieran ayudar con otra cosa que me ha quebrado la cabeza:
otra consulta, quiero pensar que es mas simple, una convinacion de unos campos de la tabla oficio (id_oficio, usuario_crea, fecha_creacion,)
de la tabla tipoOficio (nombre)
y de las tablas de oficios /*permiso economico, omision entrada, omision salida...etc*/ los campos id_usuario, fecha_creacion, fecha_finalizado

la salida seria de la siguiente forma:
id_oficio // nombreTipoOficio // usuario_crea // usuario(de quien es) // fecha_creacion // fecha_finalizado

10// justificante medico // Lic. Miguel // Pedrito // 2010-10-10 // 2010-10-11






ya por ultimo..... con java tengo un problemilla de impresion, encontre una forma de imprimir todo el frame en el que muestro el documento guardado
lo malo es que .... cuando porfin pude mandarlo a imprimir, se imprime literalmente todo el frame
necesito alguna ayuda para mandar imprimir el JTextPane con imagenes y el formato que tiene... ojala alguien me pueda ayudar

les muestro uno de los codigos del frame :

import java.awt.BorderLayout;
import java.awt.Container;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;



/**
* Ejemplo de JEditorPane con HTML
*
* @author Nyli
*
*/
public class VerOficio_JM_Frame{
JFrame frame;
String usuario;
boolean priv;
Container contentpane;
JTextPane editor;
ConexionDB db;
JScrollPane scroll;
String todo;
JButton printButton;
String [] consulta;
int id_oficio;
SimpleAttributeSet attrs;

private int FECHA = 0;
private int NOMBRE_JEFE_RH = 1;
private int AP_P_JEFE_RH = 2;
private int AP_M_JEFE_RH = 3;
private int PUESTO_JEFE_RH = 4;
private int FECHA_OMISION = 5;
private int COMPROBANTE = 6;
private int INSTITUCION = 7;
private int NOMBRE_USUARIO = 8;
private int AP_P_USUARIO = 9;
private int AP_M_USUARIO = 10;
private int NUM_ASIST = 11;
private int FILIACION = 12;
private int ADSCRITO = 13;
private int NOMBRE_JEFE = 14;
private int AP_P_JEFE = 15;
private int AP_M_JEFE = 16;
private int PUESTO_JEFE = 17;
private int FOLIO = 18;

public static void main(String [] args) throws BadLocationException{
//String user_name = "marilyn_salazar";
//Boolean privilegios = true;
int id_oficio = 12;
VerOficio_JM_Frame JM = new VerOficio_JM_Frame(id_oficio);
//pe.setVisible(true);
}//fin main

public VerOficio_JM_Frame(int id_of) throws BadLocationException{ //String usuario, Boolean priv, int id_oficio){
//this.usuario = usuario;
//this.priv = priv;
id_oficio = id_of;
frame = new JFrame();
db = new ConexionDB();
frame.setTitle("Justificante Medico");
frame.setSize(500,750);
frame.setLocationRelativeTo(null);
frame.addWindowListener (new ManejadorEvents());
editor = new JTextPane();
scroll = new JScrollPane(editor);


contentpane = frame.getContentPane();
contentpane.setLayout(new BorderLayout());
contentpane.add(scroll, BorderLayout.CENTER);
printButton = new JButton("Imprimir");
printButton.addActionListener(new imprimir_JM(frame));
contentpane.add(printButton, BorderLayout.SOUTH);
// Marcamos el editor para que use HTML
editor.setContentType("text/html");
attrs = new SimpleAttributeSet();
StyleConstants.setFontFamily(attrs, "Calibri");
StyleConstants.setFontSize(attrs, 12);

//hacemos consulta
consulta = db.consultaJM(id_oficio);
//"SELECT id_jefeRH, id_usuario, fecha, comprobante, institucion, folio, fecha_creado FROM justificante_medico WHERE id_oficio = " + id_oficio

insertarTextoenEditor();
frame.setVisible(true);


}

private String fecha(String fecha) {
//regresa dd de mm del yyyy.
String dia,mes,anio, fechaSalida = "";

//separar fecha
char [] arregloTemporal = new char[4];
fecha.getChars(0, 4, arregloTemporal, 0);
anio = "" + arregloTemporal[0] + arregloTemporal[1] + arregloTemporal[2] + arregloTemporal[3];
arregloTemporal = new char[2];
fecha.getChars(5, 7, arregloTemporal, 0);
mes = "" + arregloTemporal[0] + arregloTemporal[1];
fecha.getChars(8, 10, arregloTemporal, 0);
dia = "" + arregloTemporal[0] + arregloTemporal[1];
fechaSalida += dia + " de " + getNombredeMes(mes) + " del " + anio;

return fechaSalida;
}

String getNombredeMes (String mes){
String n = "";
if(mes.equals("01"))
n = "enero";
else if(mes.equals("02"))
n = "febrero";
else if(mes.equals("03"))
n = "marzo";
else if(mes.equals("04"))
n = "abril";
else if(mes.equals("05"))
n = "mayo";
else if(mes.equals("06"))
n = "junio";
else if(mes.equals("07"))
n = "julio";
else if(mes.equals("08"))
n = "agosto";
else if(mes.equals("09"))
n = "septiembre";
else if(mes.equals("10"))
n = "octubre";
else if(mes.equals("11"))
n = "noviembre";
else if(mes.equals("12"))
n = "diciembre";
return n;
}

private void insertarTextoenEditor() throws BadLocationException {
// Un icono
ImageIcon icono = new ImageIcon("src\\sello.jpg");
editor.insertIcon(icono);

// Ponemos el cursor al final del texto
editor.setCaretPosition(editor.getStyledDocument().getLength());
// espacio que lo separa del siguiente icono
String eim2 = " ";
//add texto de espacios
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), eim2, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());

// otro icono
ImageIcon icono2 = new ImageIcon("src\\sello2.jpg");
editor.insertIcon(icono2);

// Ponemos el cursor al final del texto
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);insertaNuevaLinea(editor);
//alinear a la derecha
StyleConstants.setAlignment(attrs, StyleConstants.ALIGN_RIGHT);
String oficio = " Oficio: " + id_oficio;
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), oficio, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String asunto = " Asunto: JUSTIFICANTE MEDICO";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), asunto, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String cdyFch = "San Luis Potosí, S.L.P., a " + fecha(consulta[FECHA]);
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), cdyFch, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);insertaNuevaLinea(editor);insertaNuevaLinea(editor);
//alinear a la izquierda
StyleConstants.setAlignment(attrs, StyleConstants.ALIGN_LEFT);
String jefeRH = consulta[NOMBRE_JEFE_RH] + " " + consulta[AP_P_JEFE_RH] + " " + consulta[AP_M_JEFE_RH];
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), jefeRH, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String puestoRH = consulta[PUESTO_JEFE_RH] + "";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), puestoRH, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String presente = "P R E S E N T E:";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), presente, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);insertaNuevaLinea(editor);insertaNuevaLinea(editor);
StyleConstants.setAlignment(attrs, StyleConstants.ALIGN_JUSTIFIED );
String txt = " Por medio de la presente le solicito a usted tenga a bien justificar el dia " + fecha(consulta[FECHA_OMISION]) + " al(la) trabajador " + consulta[NOMBRE_USUARIO] + " " + consulta[AP_P_USUARIO] + " " + consulta[AP_M_USUARIO] + " con el numero de control " + consulta[NUM_ASIST] + ", filiacion " + consulta[FILIACION] + " adscrito al area de trabajo " + consulta[ADSCRITO] + ".";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), txt, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String razon = " Por haber asistido al Centro Medico, como se enmarca en el(la) " + consulta[COMPROBANTE] + " expedido por el " + consulta[INSTITUCION] + " y con el numero de folio " + consulta[FOLIO] + " del cual se anexa copia.";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), razon, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String despedida = " Sin mas Por el momento, quedo de usted.";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), despedida, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);insertaNuevaLinea(editor);insertaNuevaLinea(editor);

//alinear al centro
StyleConstants.setAlignment(attrs, StyleConstants.ALIGN_CENTER);
String atte = "A T E N T A M E N T E";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), atte, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);insertaNuevaLinea(editor);
String lineas = "_____________________________";
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), lineas, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String firmas = consulta[NOMBRE_JEFE] + " " + consulta[AP_P_JEFE] + " " + consulta[AP_M_JEFE];
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), firmas, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
String puestojefe = " " + consulta[PUESTO_JEFE];
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), puestojefe, attrs);
editor.setCaretPosition(editor.getStyledDocument().getLength());
insertaNuevaLinea(editor);
editor.getStyledDocument().insertString(editor.getStyledDocument().getLength(), todo, attrs);
insertaNuevaLinea(editor);insertaNuevaLinea(editor);
//<img src=\"pie.jpg\"/>"
// Ponemos el cursor al final del texto
editor.setCaretPosition(editor.getStyledDocument().getLength());

// Un icono
ImageIcon icono3 = new ImageIcon("src\\pie.jpg");
editor.insertIcon(icono3);
}

private void insertaNuevaLinea(JTextPane editor)
throws BadLocationException
{
// Atributos null
editor.getStyledDocument()
.insertString(
editor.getStyledDocument().getLength(),
System.getProperty("line.separator"), null);
}
}

class imprimir_JM implements Printable, ActionListener {
JFrame frameToPrint;

public imprimir_JM(JFrame f) {
frameToPrint = f;
}

public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}

/* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());

frameToPrint.printAll(g); //manda imprimir todo el frame

return PAGE_EXISTS;
}

public void actionPerformed(ActionEvent e) {
PrinterJob job = PrinterJob.getPrinterJob();
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
PageFormat pf = job.pageDialog(aset);
job.setPrintable(this);
boolean ok = job.printDialog(aset);
if (ok) {
try {
job.print(aset);
} catch (PrinterException ex) {
// impresion no exitosa
}
}
}
}

mchisimas gracias
porfa si alguien sabe como justificar texto dentro de un JTextPane que esta dentro de un JScrollPane que me diga, pues he encintrado varias formas, pero me quitan el formato... :(
aunque eso no me urge, pienso "dar enters"
 
Arriba