public class MyPanel extends JPanel implements Printable{
// Die brauchen wir, um das ganze auszudrucken
private BufferedImage printImage;
private Dimension imageSize;
// Diese Methode wird aufgerufen, bevor das Panel ausgedruckt wird.
public void prepareForPrint(){
int w = getWidth();
int h = getHeight();
imageSize = new Dimension( w, h );
image = new BufferedImage( w, h, BufferedImage.TYPE_INT_RGB );
Graphics g = image.createGraphics();
print( g );
g.dispose();
}
// diese Methode kann man weglassen, weil sie schon in Component so implementiert ist.
// public void print( Graphics g ){
// paint( g );
// }
// Die Implementation von Printable
public int print ( Graphics g, PageFormat format, int index ) {
double imX = imageSize.getWidth() / format.getImageableWidth();
imX = (int)imX < imX ? (int)imX + 1 : imX;
double imY = imageSize.getHeight() / format.getImageableHeight();
imY = (int)imY < imY ? (int)imY + 1 : imY;
int posX = index % (int)imX;
int posY = index / (int)imX;
if ( posY >= imY )
return NO_SUCH_PAGE;
// in posX, posY ist nun angegeben, welches Rechteck gezeichnet werden sollte.
g.drawImage( printImage,
(int)format.getImageableX(),
(int)format.getImageableY(),
(int)format.getImageableWidth() + (int)format.getImageableX(),
(int)format.getImageableHeight() + (int)format.getImageableY(),
(int)(posX * format.getImageableWidth()),
(int)(posY * format.getImageableHeight()),
(int)((posX+1) * format.getImageableWidth()),
(int)((posY+1) * format.getImageableHeight()),
this );
return PAGE_EXISTS;
}
}