Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
-Foros de debate

Servidores de Aplicaciones J2EE
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Imprimir jTable
Enviado por Guiomar el día 11 de mayo de 2005

Yo uso el siguiente código para imprimir un componente jTable:

public int print(Graphics g, PageFormat pageFormat,
int pageIndex) throws PrinterException {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.black);
int fontHeight=g2.getFontMetrics().getHeight();
int fontDesent=g2.getFontMetrics().getDescent();


double pageHeight =
pageFormat.getImageableHeight()-fontHeight;
double pageWidth =
pageFormat.getImageableWidth();
double tableWidth = (double)
MaterialesTable.getColumnModel(
).getTotalColumnWidth();
double scale = 1;
if (tableWidth >= pageWidth) {
scale = pageWidth / tableWidth;
}

double headerHeightOnPage=
MaterialesTable.getTableHeader(
).getHeight()*scale;
double tableWidthOnPage=tableWidth*scale;

double oneRowHeight=(MaterialesTable.getRowHeight()+
MaterialesTable.getRowMargin())*scale;
int numRowsOnAPage=
(int)((pageHeight-headerHeightOnPage)/
oneRowHeight);
double pageHeightForTable=oneRowHeight*
numRowsOnAPage;
int totalNumPages=
(int)Math.ceil((
(double)MaterialesTable.getRowCount())/
numRowsOnAPage);
if(pageIndex>=totalNumPages) {
return NO_SUCH_PAGE;
}

g2.translate(pageFormat.getImageableX(),
pageFormat.getImageableY());

g2.drawString("Página: "+(pageIndex+1),
(int)pageWidth/2-35, (int)(pageHeight
+fontHeight-fontDesent));

g2.translate(0f,headerHeightOnPage);
g2.translate(0f,-pageIndex*pageHeightForTable);


if (pageIndex + 1 == totalNumPages) {
int lastRowPrinted =
numRowsOnAPage * pageIndex;
int numRowsLeft =
MaterialesTable.getRowCount()
- lastRowPrinted;
g2.setClip(0,
(int)(pageHeightForTable * pageIndex),
(int) Math.ceil(tableWidthOnPage),
(int) Math.ceil(oneRowHeight *
numRowsLeft));
}

else{
g2.setClip(0,
(int)(pageHeightForTable*pageIndex),
(int) Math.ceil(tableWidthOnPage),
(int) Math.ceil(pageHeightForTable));
}

g2.scale(scale,scale);
MaterialesTable.paint(g2);
g2.scale(1/scale,1/scale);
g2.translate(0f,pageIndex*pageHeightForTable);
g2.translate(0f, -headerHeightOnPage);
g2.setClip(0, 0,
(int) Math.ceil(tableWidthOnPage),
(int)Math.ceil(headerHeightOnPage));
g2.scale(scale,scale);
MaterialesTable.getTableHeader().paint(g2);



return Printable.PAGE_EXISTS;
}

Funciona perfectamente, pero el problema que tengo es que me gustaría imprimir una cabecera al principio y no soy capaz. Si alguién puede ayudarme. Gracias.

 
Re: Imprimir jTable
Enviado por lechuky el día 14 de mayo de 2005

perdona yo estoy intentando imprimir una tabla y he intentado usar el código que has puesto pero no me funciona me lo podrías esplicar un poco??,
a mi me habían dicho que utilizara el método tabla.printAll(grafico)
pero no me funciona tampoco, ya me parecía a mi muy fácil, si puedes hecharme una mano te estaría muy agradecido. Gracias

 
Re: Re: Imprimir jTable
Enviado por Guiomar el día 14 de mayo de 2005

Hola, prueba lo siguiente:
copias el código anterior, que es una función para imprimir. Donde pongo yo MaterialesTable, tú tienes que poner el nombre de la jTable que quieres imprimir.
Y despues pones un botón imprimir que cuando lo pulsen realize la siguientes acciones:

private void ImprimirButtonMouseClicked(java.awt.event.MouseEvent evt) {
PrinterJob pj=PrinterJob.getPrinterJob();
pj.setPrintable(ConsultarMateriales.this);
pj.printDialog();
try{
pj.print();
}catch (Exception PrintException) {}
}
Donde yo pongo "ConsultarMateriales.this" tienes que poner el nombre de la clase que contiene todo este código.this.

Ahh se me olvidaba que tambien tienes que poner que la clase qeu contiene este código implementa Printable:
implements Printable

Y tambien tienes que importar:
import java.awt.print.*;

Así te debería funcionar para una tabla sencilla, si tienes algún problema pues me comentas.

 
Re: Re: Re: Imprimir jTable
Enviado por lechuky el día 16 de mayo de 2005

muchas gracias, todo eso lo tenía ya hecho lo que me pasaba es que no mostraba la pantalla en la pantalla, es decir, que no lo metía en el frame y parece que por eso no imprimía nada. Debe de ser por el layout que utilizo que si no lo cargas la tabla no tiene tamaño y por lo tanto no imprime nada.

Ahora tengo el mismo problema que tu, quiero meterle un string como cabecera pero no lo consigo, he intentado metienedo un label pero tampoco, creo que hay que ampliar el area del gráfico o algo así.
Bueno gracias por todo y suerte si consigo algo te digo.

 
Re: Re: Re: Re: Imprimir jTable
Enviado por gemma el día 1 de junio de 2005

Hola,
Yo tenia el mismo problema y me ha ido muy bien este código para imprimir la tabla.
Supongo que ya habreis resuelto el problema del string en la cabecera, pero por si acaso os pongo la solucion que he encontrado
Modificar print y añadir el siguiente código al final (despues que se llama a paint del header de la tabla

jTable1.getTableHeader().paint(g2);

g2.scale(1/scale,1/scale);
g2.translate(0f,pageIndex*pageHeightForTable+1);
g2.translate(0f, -headerHeightOnPage+1);
g2.setClip(1, 1, (int) Math.ceil(tableWidthOnPage), (int)Math.ceil(headerHeightOnPage));

g2.scale(scale,scale);
componente-de-texto.paint(g2);

return Printable.PAGE_EXISTS;

Donde pongo componente-de-texto poner el componente que useis en el programa con 1 linea de texto

 
Re: Re: Re: Re: Re: Imprimir jTable
Enviado por Giancarlo el día 9 de febrero de 2006

El codigo sobre como Imprimir el JTable sale bien, es decir me manda el Dialog de Impresion, pero hay un problemna cuando elijo la opcion guardarlo como PDF mi makina suele colgarse o ponerse....q puedo hacer???, oes que te debo utilizar otro codigo para exportar a PDF==????

 
Re: Re: Re: Re: Re: Re: Imprimir jTable
Enviado por Javier el día 26 de junio de 2006

Muchas gracias. Me habeís ayudado a resolver un problema que me traía loco desde hace unos días.

 







Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network