[Druckproblem] String wird nicht an Seite angepasst

Status
Nicht offen für weitere Antworten.

snoopi30

Mitglied
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:

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.
 

dotlens

Top Contributor
Das Problem besteht auch im FAQ Beitrag. Ist ihm wohl ein Fehler unterlaufen.
wende dich direkt per PN an ThE_29
 

thE_29

Top Contributor
Naja, das Problem ist halt

1. mal Größenspezifisch (desto größer du dein Font setzt, desto weniger geht sich aus)

2. wenn du zB die paint Methode überschreibst und dort auch über den sichtbaren Bereich drübermalst, teilt der das auch net in eine neue Zeile

3. man könnte zwar was einbauen, aber dazu müßte man halt die Pixelgröße und die breite des Papiers miteinbeziehen, was net so leicht ist...

Ich halt euch am Laufenden
 

dotlens

Top Contributor
wie wärs wenn man das ganze ine eine JTextArea schreibt oder so? Die schaut dann wenn eine Zeile zu lang ist.... und dann kann man die JTextArea drucken...
Kan gut sein dass ich Müll labere, hab noch nie Drucken müssen. Aber dachte ich bringe mal meine Idee ein...
 

dotlens

Top Contributor
jep das sieht gut aus. er macht zwar ziemlich grosse zeilenumbrüche, aber das ist ja auch nicht das schlimmste ;)
danke ThE_29
 

thE_29

Top Contributor
Dann mußt du das iAddY von 20 halt anpassen!

Ich werd das auch mal an die Schrifthöhe anpassen!!
 

dotlens

Top Contributor
tiptop, wenn du es in die Kommentare hingeschreiben hättest, hätt ich das sogar selbst gemerkt ;)
hatte nämlich keine Zeit den ganzen code zu studieren...
 

snoopi30

Mitglied
The method seperateString(String, FontMetrics, boolean, int) in the type Drucker is not applicable
for the arguments (Object, FontMetrics, boolean, int)

bekomme leider diesen einen fehler nicht raus :/
warscheinlich ist es ein simpler fehler, aber ich kenn mich auch noch nicht so gut mit java aus ...

vielen dank schonmal, dass ihr euch hier so mühe gebt mit mir ;)


EDIT: hat sich erledigt, mir ist wohl ein cut&paste fehler unterlaufen ...


und jetzt noch ein RICHTIG DICKES DANKESCHÖN an thE_29 für deine bemühungen, solche user braucht ein forum :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Druckproblem bei Bilder AWT, Swing, JavaFX & SWT 4
V Verstehe mein Druckproblem nicht AWT, Swing, JavaFX & SWT 2
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
H String zu int/long AWT, Swing, JavaFX & SWT 8
D String als Textdatei in ausgewähltem Speicherplatz speichern AWT, Swing, JavaFX & SWT 32
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
J SWT Search string highlite AWT, Swing, JavaFX & SWT 5
M JavaFX String aus TextField reagiert nicht wie erwartet AWT, Swing, JavaFX & SWT 3
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
J Event Handling Input auf String testen, Fehlermeldung ausgeben AWT, Swing, JavaFX & SWT 4
D JavaFX ComboBox String setzen AWT, Swing, JavaFX & SWT 20
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
X Zeilen aus einer Textdatei einzelnd als String abrufen AWT, Swing, JavaFX & SWT 8
KilledByCheese Event Handling Vom ActionEvent auf String zugreifen - genaueres in der Beschreibung AWT, Swing, JavaFX & SWT 3
T replace string AWT, Swing, JavaFX & SWT 1
D String zu StringProperty Konvertieren AWT, Swing, JavaFX & SWT 4
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
E Eigenes TableModel für ArrayList<String[]> AWT, Swing, JavaFX & SWT 5
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
P DefaultStyledDocument eingegebenen String durchsuchen und bestimmte Sachen einfärben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik String drehen/platzieren/formatieren in bestimmten Bereich AWT, Swing, JavaFX & SWT 1
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
S XML Output String Format AWT, Swing, JavaFX & SWT 2
R Swing JTextField getText() liefert leeren String AWT, Swing, JavaFX & SWT 6
P Swing String mit unterschiedlichen Formaten zusammenbauen AWT, Swing, JavaFX & SWT 14
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
J 2D-Grafik String aus array wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
L Swing JToogleButton Vordergrundfarbe bei HTML String AWT, Swing, JavaFX & SWT 4
T Swing JProgressBar mit String unschön AWT, Swing, JavaFX & SWT 5
M Swing String zerlegen AWT, Swing, JavaFX & SWT 2
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
A Text (String) zu einer Box hinzufügen AWT, Swing, JavaFX & SWT 16
D textfeld string zu float AWT, Swing, JavaFX & SWT 5
B Color String Code AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
S String is null Fehler AWT, Swing, JavaFX & SWT 2
M SomeClass.class.getResourceAsStream(String filename) funktioniert nicht in jar) AWT, Swing, JavaFX & SWT 32
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
S String Array Ausgabe im JLabel ??? AWT, Swing, JavaFX & SWT 8
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
L SWT Text SelectionText ersetzen durch anderen String AWT, Swing, JavaFX & SWT 6
B Color.BLUE in String umwandeln AWT, Swing, JavaFX & SWT 4
H String auf Knopfdruck in JPanel zeichnen. AWT, Swing, JavaFX & SWT 6
P 2D-Grafik String übergeben, PNG soll rauskommen AWT, Swing, JavaFX & SWT 9
A Formatierten String ausgeben (drawString) AWT, Swing, JavaFX & SWT 5
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
R JComboBox Ausgabe in String speichern AWT, Swing, JavaFX & SWT 3
TiME-SPLiNTER Swing JListModel: String rendern AWT, Swing, JavaFX & SWT 2
R String in JFrame ausgeben AWT, Swing, JavaFX & SWT 10
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
C Swing Text eines JButton mit String definieren? Reihenfolge? AWT, Swing, JavaFX & SWT 6
S [Button] setText("String") AWT, Swing, JavaFX & SWT 5
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
I String lowercase, uppercase und umdrehen AWT, Swing, JavaFX & SWT 3
D Swing JTextField String anhängen AWT, Swing, JavaFX & SWT 7
F Swing String Array mit JTextArea anzeigen AWT, Swing, JavaFX & SWT 13
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
T Swing Wie kann ich einen String in ein TreePath umwandeln? AWT, Swing, JavaFX & SWT 5
H String ausführen und damit weiterarbeiten AWT, Swing, JavaFX & SWT 4
radiac AWT Mausposition als String ausgeben??? AWT, Swing, JavaFX & SWT 5
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
N SWT Ende vom String in Text anzeigen AWT, Swing, JavaFX & SWT 5
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
G JTextArea: String formatieren AWT, Swing, JavaFX & SWT 2
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
S List<String> in JTextArea! AWT, Swing, JavaFX & SWT 4
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
G in JTextField wie in der Console Ein String ein lesen AWT, Swing, JavaFX & SWT 8
G Date in einen String umwandeln AWT, Swing, JavaFX & SWT 4
S schauen ob ein string leer ist AWT, Swing, JavaFX & SWT 4
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
S Suchen im String-Array AWT, Swing, JavaFX & SWT 3
mabe83 Swing: jTableCellRenderer -> Klappt nur bei String-Spalte AWT, Swing, JavaFX & SWT 2
O String aus Klasse X in Klasse Y befördern AWT, Swing, JavaFX & SWT 12
M leerzeichen aus string entfernen AWT, Swing, JavaFX & SWT 3
S String an eine andere Klasse im anderem package übergeben AWT, Swing, JavaFX & SWT 3
B NullPointerException bei String vergleich AWT, Swing, JavaFX & SWT 5
T String in String [] umwandeln?? AWT, Swing, JavaFX & SWT 4
S Checkbox oder String in JTable-Spalte AWT, Swing, JavaFX & SWT 4
E Frage zum String AWT, Swing, JavaFX & SWT 6
M BufferedImage mit html interpretierten String beschriften AWT, Swing, JavaFX & SWT 3
K Choice auswahl und String in Int AWT, Swing, JavaFX & SWT 8
Y entfernten String einer JTextPane per DocumentListener AWT, Swing, JavaFX & SWT 5
C string wird mehr fach gezeichnet AWT, Swing, JavaFX & SWT 3
S String aus JTextField AWT, Swing, JavaFX & SWT 11
B JTable String übergeben AWT, Swing, JavaFX & SWT 3
C string spiegeln AWT, Swing, JavaFX & SWT 14
M jEditorPane String to html AWT, Swing, JavaFX & SWT 2
A String aus einem JTextField an ein JLabel übergeben AWT, Swing, JavaFX & SWT 10
S double in String umwandeln AWT, Swing, JavaFX & SWT 6
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
G ActionListener zu String hinzufügen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben