Liebe Forengemeinde:
Mit folgendem Listener kümmere ich mich um das Drucken:
Die Klasse Formular_Lizenzbestimmung sieht wie folgt aus:
Es wird alles bis auf den 2. Reiter ausgedruckt. Der 2. Reiter sollte mit 3 Seiten ausgedruckt werden - es werden aber nur 2 Seiten ausgedruckt. Was mache ich falsch?
Mit folgendem Listener kümmere ich mich um das Drucken:
Java:
class druckenListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
pj = PrinterJob.getPrinterJob();
try
{
if (pj.printDialog())
{
paper = new Paper();
paper.setSize(594.936, 841.536); // Set to A4 size.
paper.setImageableArea(30, 30, 530, 780);//set margins
pageFormat = new PageFormat();
pageFormat.setPaper(paper);
size = reiter1Pane.getSize();
if (tp.getSelectedIndex() == 0)
{
size = reiter1l.getSize();
}
else if(tp.getSelectedIndex() == 1)
{
size = reiter2l.getSize();
}
else if(tp.getSelectedIndex() == 2)
{
size = reiter3l.getSize();
}
else if(tp.getSelectedIndex() == 3)
{
size = reiter4l.getSize();
}
//1. Reiter drucken
reiter1l.setSize(size);
formular = new Formular_Lizenzbestimmung(reiter1l);
pj.setPrintable(formular, pageFormat);
pj.print();
//2. Reiter drucken
reiter2l.setSize(size);
formular = new Formular_Lizenzbestimmung(reiter2l);
pj.setPrintable(formular, pageFormat);
pj.print();
//3. Reiter drucken
reiter3l.setSize(size);
formular = new Formular_Lizenzbestimmung(reiter3l);
pj.setPrintable(formular, pageFormat);
pj.print();
//4. Reiter drucken
reiter4l.setSize(size);
formular = new Formular_Lizenzbestimmung(reiter4l);
pj.setPrintable(formular, pageFormat);
pj.print();
}
}
catch (PrinterException ex)
{
ex.printStackTrace();
}
}
}
Die Klasse Formular_Lizenzbestimmung sieht wie folgt aus:
Java:
class Formular_Lizenzbestimmung implements Printable
{
/** container nimmt die Elemente der GUI für den Druck auf**/
private Container container;
/** index bestimmt, welcher Reiter gerade gedruckt wird**/
private int index = -1;
/** page: Welche Seite?**/
private Rectangle page = new Rectangle(0, 0, 0, 0);
/** Konstruktor**/
Formular_Lizenzbestimmung(Container container)
{
this.container = container;
}
/** Die Methode print übernimmt den Druck**/
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
{
/** g2d nimmt den Bildschirmprint auf**/
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
/** iWidth nimmt die Breite der Seite auf**/
int iWidth = (int) pageFormat.getImageableWidth();
/** iHeigt nimmt die Höhe der Seite auf**/
int iHeight = (int) pageFormat.getImageableHeight();
/** scaleFactor???**/
double scaleFactor = (double) iWidth / (double) container.getWidth();
while (index < pageIndex)
{
if (pageIndex > container.getHeight() * scaleFactor / iHeight)
{
return NO_SUCH_PAGE;
}
page.y += page.height;
page.width = (int) (iWidth / scaleFactor);
page.height = (int) (iHeight / scaleFactor);
index++;
}
g2d.scale(scaleFactor, scaleFactor);
g2d.translate(0, -page.y);
g2d.clip(page);
container.print(g2d);
return PAGE_EXISTS;
}
}
Es wird alles bis auf den 2. Reiter ausgedruckt. Der 2. Reiter sollte mit 3 Seiten ausgedruckt werden - es werden aber nur 2 Seiten ausgedruckt. Was mache ich falsch?