// die methode von der subclasse Panel wo Printable implementiert ist
public void paintComponent(Graphics gr)
{
super.paintComponent(gr);
int page = 0;
// vom ersten datensatz anfangen
datensatz = 0;
while(datensatz < data.size())
{
paintPage((Graphics2D)gr, page);
page++;
}
}
// diese methode wird aufgerufen für Druckvorschau und zum Drucken
// wobei Graphics einmal von paintComponent übergeben wird
// ein anderes mal von print
private void paintPage(Graphics2D gr, int page)
{
//Seitentitel ausgeben
ypos += yd;
gr.setPaint(Color.black);
// Seitenüberschrift ausgeben
gr.setFont(new Font("Arial", Font.BOLD, 12 * RESMUL));
gr.drawString("Geburtstage "+g.categorie + ", Seite " + (page + 1), xpos, ypos);
// Linie ausgeben
gr.drawLine(xpos, ypos + 6 * RESMUL, xpos + width, ypos + 6 * RESMUL);
ypos += 2 * yd;
gr.setFont(new Font("Arial", Font.PLAIN, 10 * RESMUL));
// data ist ein zweidimensionaler Vector mit "Geburtsdatum", "Name", "Vorname"
// datensatz ist ein Zähler für datensätze also alle datensätze durchgehen.
while (datensatz < data.size())
{
// die ausgabe jede 2 Zeile mit Rosa Farbe Hintergrund
if(datensatz%2 == 0)
{
gr.setPaint(new Color(255, 245, 245));
gr.fillRect(xpos,ypos-(10*RESMUL),xpos+width,ypos);
}
else
{
gr.setPaint(Color.white);
gr.fillRect(xpos,ypos-(10*RESMUL),xpos+width,ypos);
}
gr.setPaint(Color.black);
MyDate mydate = (MyDate)((Vector)data.get(datensatz)).get(2);
// das Geburtsdatum ausgeben
// tag
gr.drawString(""+mydate.day+".", xpos, ypos);
// monat
gr.drawString(DateConstants.MONTHNAME[mydate.month], xpos+(20*RESMUL), ypos);
// jahr
gr.drawString(""+mydate.year, xpos+(60*RESMUL), ypos);
// Name ausgeben
String name = (String)((Vector)data.get(datensatz)).get(0);
gr.drawString(name, xpos+(150*RESMUL), ypos);
// Vorname ausgeben
String vorname = (String)((Vector)data.get(datensatz)).get(1);
gr.drawString(vorname, xpos+(200*RESMUL), ypos);
// datensatzzähler increment
datensatz++;
ypos += yd;
if (ypos >= ymax)
break;
}
}
public int print(Graphics gr, PageFormat pf, int page)
throws PrinterException
{
int ret = PAGE_EXISTS;
if(datensatz == data.size())
ret = NO_SUCH_PAGE;
if (ret == PAGE_EXISTS)
{
//Seite ausgeben, Grafikkontext vorbereiten
Graphics2D g2 = (Graphics2D)gr;
g2.scale(1.0 / RESMUL, 1.0 / RESMUL);
ypos = (int)pf.getImageableY() * RESMUL;
xpos = ((int)pf.getImageableX() + 2) * RESMUL;
width = (int)pf.getImageableWidth();
yd = 12 * RESMUL;
ymax = ypos + (int)pf.getImageableHeight() * RESMUL - yd;
[b] /* ich rufe Print im Constructor auf damit die variablen
xpos, ypos etc. mit dem PageFormat berechnet wird
wobei printen (boolean) auf false gesetzt ist dabei wird
hier mit repaint die paintComponent methode vom Panel
aufgerufen. Danach rufe ich mit dem Button "Drucken"
den Befehl print auf wobei ich printen = true setze
der Drucker gibt mir ein sauberes Blatt raus!*[/b]
if(printen)
paintPage((Graphics2D)gr, page);
else
{
ret = NO_SUCH_PAGE;
repaint();
}
}
return ret;
}