Liebe Forengemeinde,
ich brauche Eure Hilfe beim Drucken einer JList:
Ich habe eine JList, die wie folgt definiert ist:
Dann gibt es eine Schaltfläche Drucken, an die ich folgenden ActionListener gehängt habe:
Dann gibt es noch folgende Klasse:
Funzt im Prinzip. Zu meinem Problem: Wenn die Liste länger wird, dann muss der Anwender ja scrollen (ist ja ok), aber im Druck erscheinen immer nur der sichtbare Teil der Liste. Ich möchte natürlich die ganze Liste drucken. Wer kann mir da helfen?
ich brauche Eure Hilfe beim Drucken einer JList:
Ich habe eine JList, die wie folgt definiert ist:
Code:
/*-------------------------------------------------------------------*/
/**J L i s t */
/*-------------------------------------------------------------------*/
liste_offene_fälle = new JList(defaultlistmodel_offene_fälle);
liste_offene_fälle.setSelectedIndex(0);
liste_offene_fälle.setSize(50,50);
offene_fälle_scrollPane = new JScrollPane(liste_offene_fälle);
offene_fälle_scrollPane.setViewportView(liste_offene_fälle);
Dann gibt es eine Schaltfläche Drucken, an die ich folgenden ActionListener gehängt habe:
Code:
class druckenListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
pj = PrinterJob.getPrinterJob();
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 = offene_fälle_scrollPane.getSize();
p.setSize(size);
formular = new Formular_offene_Fälle(offene_fälle_scrollPane);
pj.setPrintable(formular, pageFormat);
pj.print();
}
}
catch (PrinterException ex)
{
ex.printStackTrace();
}
/* Model immer löschen, bevor auf aktuellem Klick reagiert wird*/
defaultlistmodel_offene_fälle.clear();
dispose();
}
}
Dann gibt es noch folgende Klasse:
Code:
/* Die Klasse Formular_offene_Fälle übernimmt das Drucken der offenen Fälle*/
class Formular_offene_Fälle implements Printable
{
private Container container;
private int index = -1;
private Rectangle page = new Rectangle(0, 0, 0, 0);
Formular_offene_Fälle(Container container)
{
this.container = container;
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
{
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
int iWidth = (int) pageFormat.getImageableWidth();
int iHeight = (int) pageFormat.getImageableHeight();
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;
}
}
Funzt im Prinzip. Zu meinem Problem: Wenn die Liste länger wird, dann muss der Anwender ja scrollen (ist ja ok), aber im Druck erscheinen immer nur der sichtbare Teil der Liste. Ich möchte natürlich die ganze Liste drucken. Wer kann mir da helfen?