Java - Problema al imprimir JTable

   
Vista:

Problema al imprimir JTable

Publicado por Angel (2 intervenciones) el 07/12/2015 23:03:09
Saludos..

Bueno estoy haciendo un proyecto de un sistema de facturación y estoy el la partee ya de imprimir las facturas, el problema radica en que al momento de imprimir un JPanel (donde esta el nombre del cliente/vendedor, fecha, numero de factura, monto a pagar, productos comprados/vendidos, datos del negocio, etc) me imprime todo excepto el JTable (donde se encuentran los artículos, la cantidad, precios de cada uno, etc), mi explicación podría ser la siguiente:

"Bueno dare todos los detalles aunque no sean necesarios por si acaso"

Tengo una clase que gestiona los componentes que servirán para las facturas de Compra y Venta aquí están los campos de fecha, total, algunos botones y por ultimo la tabla donde aparecerán los artículos a comprar/vender

Luego tengo otras dos clases las de la interfaz de compra y la de venta(pero solo mensionare la de compra), que crean un objeto de la primera clase y le agrega el campo de "vendedor":



Bueno, lo que sigue cuando se presiona el boton Imprimir, es otra clase llamada detallesFactura, que toma los datos de la clase compra y los ordena en un JPanel aqui hay JLabels y un JTable, que es una pre-visualizacion de la factura que se imprimira y luego obviamente una clase que implementa de Printable para realizar la impresion, lo que ocurre es como dije, sale Todo, menos la tabla donde estan los productos. (en la interfaz de detallesFactura si aparece el JTable).

Bueno ahora pondre los codigos para que entiendan mejor.

Esta el la clase detallesFactura, que resibe los datos de la clase compra para mostrar un JFrame con un JPanel con los datos de la compra.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
public class detallesFactura {
	private jFrame frame;
	private JLabel titulo,nombreNegocio,direccionNegocio,telefonoNegocio,sinDevolucion,FactNo,labelNoFact,etiquetaFecha,etiquetaNombre,etiquetaTotal;
	private javax.swing.table.DefaultTableModel dtm;
	private javax.swing.JTable jt;
	private javax.swing.JScrollPane jsp;
	private List<Integer> id,prUn,cant;
	private int NoFact;
	private String fechaFact,nombre,total;
	public JPanel facturaPanel;
	public detallesFactura(List<Integer> id,List<Integer> prUn,List<Integer> cant, int NoFact, String fechaFact,String nombre, String total){
		this.id=id;
		this.prUn=prUn;
		this.cant=cant;
		this.NoFact=NoFact;
		this.fechaFact=fechaFact;
		this.nombre=nombre;
		this.total=total;
		frame();
		Thread fc=new Thread(new facturaHilo());
		llenarTabla();
		new imprimir(facturaPanel);   //Este objeto es el que gestiona la impresion.
		fc.start();
	}
	private void frame(){
	//---------------------JFrame:
		frame=new jFrame("FACTURA A IMPRIMIR");
		frame.setSize(800,560);
		frame.setLocationRelativeTo(null);
	//---------------------JPanel:
		facturaPanel=new JPanel();
		facturaPanel.setBounds(5, 80, 790, 475);
		facturaPanel.setBackground(java.awt.Color.white);
		facturaPanel.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.BLACK));
		facturaPanel.setLayout(null);
	//Paneles para crear marcos y lineas:
		JPanel MarcoUpPanel=new JPanel();
		MarcoUpPanel.setBounds(5,80,780,5);
	//*
		JPanel MarcoDownPanel=new JPanel();
		MarcoDownPanel.setBounds(5,450,780,5);
	//*
		JPanel PanelTotal=new JPanel();
		PanelTotal.setBounds(705, 420, 75, 25);
    //---------------------JTable:
		dtm=new DefaultTableModel();
		jt=new javax.swing.JTable(dtm);
		jsp=new javax.swing.JScrollPane(jt);
		jsp.setBounds(5,120,780,290);
		String[] column={"Clave","Descripcion","Costo","Cantidad","Total"};
		for(int x=0;x<column.length;x++){
			dtm.addColumn(column[x]);
		}
	//---------------------JLabel:
		titulo=new JLabel("Factura a imprimir:");
		titulo.setFont(new java.awt.Font("TimesRoman",Font.BOLD,50));
		titulo.setBounds(200,0,450,50);
	//*
		FactNo=new JLabel("Fact. NO:");
		FactNo.setBounds(680,85,60,20);
	//*
		etiquetaNombre=new JLabel(nombre);
		etiquetaNombre.setBounds(10,75,300,50);
	//*
		labelNoFact=new JLabel(Integer.toString(NoFact));
		labelNoFact.setBounds(740,85,60,20);
	//*
		etiquetaFecha=new JLabel(fechaFact);
		etiquetaFecha.setBounds(690,95,80,35);
	//*
		etiquetaTotal=new JLabel(total);
		etiquetaTotal.setFont(new java.awt.Font("TimesRoman", Font.BOLD, 25));
		etiquetaTotal.setBounds(710,380,200,100);
	//*
		sinDevolucion=new JLabel("Verifique su producto antes de resivirlo NO ADMITIMOS DEVOLUCIONES");
		sinDevolucion.setBounds(180,440,450,50);
	//*
		nombreNegocio=new JLabel("Nombre del negocio");
		nombreNegocio.setFont(new java.awt.Font("TimesRoman",Font.BOLD,25));
		nombreNegocio.setBounds(200,5,600,50);
	//*
		direccionNegocio=new JLabel("Direccion del negocio");
		direccionNegocio.setFont(new java.awt.Font("TimesRoman",Font.BOLD,15));
		direccionNegocio.setBounds(220,25,600,50);
	//
		telefonoNegocio=new JLabel("Telefono del negocio");
		telefonoNegocio.setFont(new java.awt.Font("TimesRoman",Font.BOLD,15));
		telefonoNegocio.setBounds(320,40,300,50);
	//---------------------Asignaciones:
		frame.add(facturaPanel);
		frame.add(titulo);
		facturaPanel.add(sinDevolucion);
		facturaPanel.add(nombreNegocio);
		facturaPanel.add(direccionNegocio);
		facturaPanel.add(telefonoNegocio);
		facturaPanel.add(jsp);
		facturaPanel.add(FactNo);
		facturaPanel.add(labelNoFact);
		facturaPanel.add(etiquetaFecha);
		facturaPanel.add(etiquetaNombre);
		facturaPanel.add(etiquetaTotal);
		facturaPanel.add(PanelTotal);
		facturaPanel.add(MarcoUpPanel);
		facturaPanel.add(MarcoDownPanel);
	}
//ESTA PARTE NO ES NECESARIA PERO IGUAL LA PONGO POR SI ACASO...
	//Este metodo rellena la tabla que sera impresa.
		private void llenarTabla(){
			for(int i=0;i<id.size();i++){
				try {
					//Esta conexion es para sacar la descripcion el producto
					java.sql.Statement st=new DBConection().DBConections().createStatement();
					java.sql.ResultSet rs=st.executeQuery("select * from producto where idProducto="+id.get(i));
					rs.next();
					dtm.addRow(new Object[]{rs.getString("claveProducto"),rs.getString("descripcionProducto"),prUn.get(i),cant.get(i),prUn.get(i)*cant.get(i)});
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
}

Y esta es la clase que gestiona la impresion:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class imprimir implements java.awt.print.Printable{
	javax.swing.JPanel factura;
 
	public imprimir(javax.swing.JPanel factura){
		this.factura=factura;
 
		//Para ejecutar la impresion:
		try{
			PrinterJob gap=PrinterJob.getPrinterJob();
			gap.setPrintable(this);
			boolean top=gap.printDialog();
			if(top){
				gap.print();
			}
		}catch(PrinterException e){}
	}
 
	public int print(Graphics graf, PageFormat pageFor, int index) throws PrinterException {
		if(index>0){
			return NO_SUCH_PAGE;
		}
		Graphics2D hub=(Graphics2D)graf;
		hub.translate(pageFor.getImageableX()+30, pageFor.getImageableY()+30);
		hub.scale(0.7, 0.8);
		factura.printAll(graf);
		return PAGE_EXISTS;
	}
 
}

Bueno algo que hice para ver fue crear una clase que cree un JFrame que contenga un JPanel y este JPanel contiene un JTable, y lo comico en esta clase es que AQUI SI FUNCIONA!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class prueba implements java.awt.print.Printable{
	JPanel panel=new JPanel();
	jFrame frame;
	prueba(){
 
		frame();
 
		try{
			PrinterJob gap=PrinterJob.getPrinterJob();
			gap.setPrintable(this);
			boolean top=gap.printDialog();
			if(top){
				gap.print();
			}
		}catch(PrinterException e){}
 
	}
 
	private void frame(){
		frame=new jFrame("");
		frame.setSize(800,560);
		frame.setLocationRelativeTo(null);
 
		panel.setBounds(0,0,500,500);
		DefaultTableModel dtm=new DefaultTableModel();
		JTable jt=new JTable(dtm);
		JScrollPane jsp=new JScrollPane(jt);
		jt.setBounds(0,0,50,50);
		panel.add(jsp);
 
		String[] title={"a","b","c"};
		for(int i=0;i<title.length;i++){
			dtm.addColumn(title[i]);
		}
 
		frame.add(panel);
		frame.setVisible(true);
	}
 
	public int print(Graphics graf, PageFormat pageFor, int index) throws PrinterException {
		if(index>0){
			return NO_SUCH_PAGE;
		}
		Graphics2D hub=(Graphics2D)graf;
		hub.translate(pageFor.getImageableX()+30, pageFor.getImageableY()+30);
		hub.scale(0.7, 0.8);
		panel.printAll(graf);
		return PAGE_EXISTS;
	}
 
}

Por favir es urgente y ya no se que hacer :( si no entienden algo contesto como sea, y disculas si esta algo inentendible...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder