Beim Drucken habe ich das Problem, dass mein String nicht in mehrere Zeilen unterteilt wird, sondern er auch über die Seite hinaus weiter drucken "will", anstatt eine neue Zeile anzufangen.
Der String wird direkt aus einer DB ausgelesen. Ich habe hauptsächlich das 2. Beispiel aus der Druck-FAQ verwendet und nur gering an mein Programm angeglichen.
Hier noch der relevante Quelltext:
Gibt es da eine Möglichkeit sowas ausdrucken zu können? Ein String ist maximal 255 Zeichen lang.
Danke schon mal im vorraus für eure Hilfe,
snoopi30.
Der String wird direkt aus einer DB ausgelesen. Ich habe hauptsächlich das 2. Beispiel aus der Druck-FAQ verwendet und nur gering an mein Programm angeglichen.
Hier noch der relevante Quelltext:
Code:
miPrint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Drucker printer = new Drucker();
printer.addString(GetSQL.getGerichtName(momentanesGericht));
printer.addLeerzeile();
//printer.addTab();
printer.addString(GetSQL.getZutatenAsString(momentanesGericht));
printer.addLeerzeile();
printer.addString(GetSQL.getRezept(momentanesGericht));
printer.druckeSeite(Kochplanlayout.this, "nix", false);
}
});
Code:
import java.util.*;
import java.awt.*;
import javax.swing.*;
public class Drucker {
private Object[] data;
private ArrayList ar=null;
/***************************************************************************
* Fügt einen String hinzu und geht danach in die nächste Zeile
* @param Text String
**************************************************************************/
public void addString(String Text)
{
if (ar == null) {
ar = new ArrayList();
ar.add(Text);
}
else {
ar.add(Text);
}
}
/**************************************************************************
* fügt eine leerzeile hinzu
*************************************************************************/
public void addLeerzeile()
{
if(ar != null)
ar.add("\n");
}
/**************************************************************************
* Fügt einen Tab hinzu und somit kann man in der gleichen Zeile weiterschreiben
*************************************************************************/
public void addTab()
{
if(ar != null)
ar.add("\t");
}
/****************************************************************************
* Druckt schließlich die Seite und ob ein Rand dabei ist oder nicht
* @param f JFrame
* @param title Titel
* @param bRand Rand
***************************************************************************/
public void druckeSeite( JFrame f, String title, boolean bRand)
{
PrintJob prjob = f.getToolkit().getPrintJob(f, title, null);
if (null != prjob)
{
final int iScreenResol = f.getToolkit().getScreenResolution();
final int iPageResol = prjob.getPageResolution();
final Dimension dimScreenSize = f.getToolkit().getScreenSize();
final Dimension dimPageDimension = prjob.getPageDimension();
Graphics pg = prjob.getGraphics();
if (null != pg && 0 < iPageResol)
{
int iAddY = 20;
int iRand = (int) Math.round(iPageResol * 2. / 2.54); // 2 cm Rand
int iPosX = iRand + iRand / 4; // Textposition
int iPosY = iPosX - iAddY / 2;
int iWdth = dimPageDimension.width - iRand * 2; // innere Breite
int iMidY = dimPageDimension.height / 2;
//setzt die Schrift und die Schriftgröße
pg.setFont(new Font("SansSerif", Font.PLAIN, iAddY * 2 / 3));
if (ar != null)
{
data = ar.toArray();
for(int x= 0; x!= data.length; x++)
{
//fügt ein Leerzeichen hinzu
if(((String)data[x]).compareTo("\n") ==0)
{
iPosY += iAddY;
}
else if(((String)data[x]).compareTo("\t") ==0)
{
//der 10 steht für die Breite des Tabs, variable vereinbar
iPosX += (iAddY * 2 /3 ) * 10;
//wenn die Tab position schon weiter ist, als die Weite, dann wird auf
//Anfang gesetzt und neue Zeile
if(iPosX > iWdth)
{
iPosX = iRand + iRand / 4;
iPosY += iAddY;
}
else
iPosY -= iAddY;
}
//wenn nichts erfüllt wird, wird einfach dazugehängt
else
pg.drawString((String)data[x], iPosX, iPosY += iAddY);
}
//Buffer wird geleert
ar = null;
}
//wenn man noch gar nix hineingeschrieben hat, wird der Fehlertext gedruckt,
//variable abendbar, ob überhaupt gedruckt werden soll
else
{
pg.drawString("Error, not initialized", iPosX, iPosY += iAddY);
}
//wenn rand true ist, wird ein Rand gezeichnet
if (bRand)
{
pg.drawRect(iRand, iRand, iWdth, dimPageDimension.height - iRand * 2);
}
pg.dispose();
}
prjob.end();
}
}
}
Gibt es da eine Möglichkeit sowas ausdrucken zu können? Ein String ist maximal 255 Zeichen lang.
Danke schon mal im vorraus für eure Hilfe,
snoopi30.