Hallo Java-Kenner,
da meine Java-Kenntnisse noch auf einem bescheidenen Niveau sind folegnde Frage.
Wie kann ich einen ganz bestimmten Bereich eines jPanels drucken (in dem Falle mehrere jTables, Buttons etc.). Den ganzen jPanel bekomme ich mit folgenden Code schon ganz gut hin. Jetzt müsste ich den Code noch anpassen....
Ich müsste jetzt den Code so anpassen, dass ich nur einen bestimmten Bereich davon drucke.
Schon mal im Voraus vielen Dank für Beantwortungsversuche.
da meine Java-Kenntnisse noch auf einem bescheidenen Niveau sind folegnde Frage.
Wie kann ich einen ganz bestimmten Bereich eines jPanels drucken (in dem Falle mehrere jTables, Buttons etc.). Den ganzen jPanel bekomme ich mit folgenden Code schon ganz gut hin. Jetzt müsste ich den Code noch anpassen....
Code:
public void BtnDruckenActionPerformed(ActionEvent evt){
try {
ContentPane.setLocation(440, 0);
BenutzerFenster.printComponent(ContentPane, true);
} catch (PrinterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void printComponent(JComponent comp, boolean fill) throws PrinterException {
PrinterJob pjob = PrinterJob.getPrinterJob();
PageFormat pf = pjob.defaultPage();
Paper paper = new Paper();
paper.setSize(595.0,841.0);
paper.setImageableArea(0, 0, pf.getWidth(), pf.getHeight());
pf.setPaper(paper);
pf.setOrientation(PageFormat.LANDSCAPE);
PageFormat postformat = pjob.pageDialog(pf);
if (pf != postformat) {
//Set print component
pjob.setPrintable(new ComponentPrinter(comp, fill), postformat);
if (pjob.printDialog()) {
pjob.print();
}
}
}
Code:
ublic class ComponentPrinter implements Printable {
private Component comp;
private boolean fill;
public ComponentPrinter(Component comp, boolean fill) {
this.comp = comp;
this.fill = fill;
}
@Override
public int print(Graphics g, PageFormat format, int page_index) throws PrinterException {
if (page_index > 0) {
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) g;
g2.translate(format.getImageableX(), format.getImageableY());
double width = format.getWidth();
double height = format.getHeight();
System.out.println("formatWidth: " + width);
System.out.println("formatHeight: " + height);
double compWidth = comp.getWidth();
double compHeight = comp.getHeight();
double scaleX = width/compWidth;
double scaleY = height/compHeight;
g2.scale(scaleX, scaleY);
if (comp.getParent() == null) {
comp.addNotify();
}
comp.validate();
comp.doLayout();
comp.printAll(g2);
if (comp.getParent() != null) {
comp.removeNotify();
}
return Printable.PAGE_EXISTS;
}
}
Ich müsste jetzt den Code so anpassen, dass ich nur einen bestimmten Bereich davon drucke.
Schon mal im Voraus vielen Dank für Beantwortungsversuche.