printMethode mit bufferedString

Status
Nicht offen für weitere Antworten.

Java-Problems

Bekanntes Mitglied
Hallo zusammen,
wieso wird mir der Zeilenumbruch nicht mitgedruckt?:

Java:
String string1="ID     Beschreibung    Käufer      Verkäufer     \n";
String string2="-------------------------------------------------\n";	
String buffer= string1 + string2;

public void druckeTestseite(String buffer)
  {
    PrintJob prjob = getToolkit().getPrintJob( this, "Testseite", null );
    if( null != prjob )
    {
      final int iScreenResol           = getToolkit().getScreenResolution();
      final int iPageResol             = prjob.getPageResolution();
      final Dimension dimScreenSize    = 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;
        pg.setFont( new Font( "SansSerif", Font.PLAIN, iAddY*2/3 ) );
    
        pg.drawString(buffer,50,100);
        pg.dispose();
      }
      prjob.end();
    }
  }
 

anp

Mitglied
Hi,

ist nur eine Idee, aber versuch's mal mit
Java:
System.getProperty ( "line.separator" );
statt dem \n

VG
 

anp

Mitglied
okay, nächste Idee (bzw. das, was google mir empfohlen hat):

rufe die Methode drawString für jede Zeile einzeln auf, verändere dabei die Koordinaten, dass die nächsten Zeilen auch in die nächste Zeile gedruckt werden.
 

Java-Problems

Bekanntes Mitglied
dies ist jedoch ein wenig problematisch, da ich das ganze klassenübergreifend mache, deswegen habe ich auch im methodenkopf den String mitübergeben, damit ich in ner anderen Klasse das aufgrufen kann.
Den String wieder auseinander zu basteln wäre ziemlich kompliziert, da die 2 Zeilen ja nur Beispielzeilen sind. Es würden noch die Ergebnis-Elemente der Datenbank-Abfrage folgen. Weißt wie ich mein? Wenn dann müsste ich wohl noch nen String-Array parallel zum buffer anlegen lassen und diesen dann überben, oder?
 

heart_disease

Bekanntes Mitglied
Nach meiner Erfahrung wird das Zeilenumbruchzeichen in drawString() vollkommen ignoriert! Du musst den String also wirklich per split() aufteilen und dann Zeile für Zeile in einer Schleife ausgeben.
 

anp

Mitglied
Mir fällt auch nichts anderes ein als ein Array (String oder sowas wie ein Artikel-Objekt) zu übergeben, das du dann in der Schleife quasi Zeile für Zeile ausgibst.
 

Java-Problems

Bekanntes Mitglied
gibt es vll. so eine Art Temporäre Datei, die ich dann Drucken kann, hat da jemand eine Idee?
Oder da der buffer ja nachher eh schon in einem JOptionPane angezeigt wird, gibt es vll. die Möglichkeit, das ganze JOptionPane zu drucken?
 

Java-Problems

Bekanntes Mitglied
ich habs jetzt wie folgt abgeändert, bekomme jedoch eine NPE, woran liegts?

Java:
			String[] array = new String[50];
			array[0] = string1;
			array[1] = string2;
			
			for (int i =2; i<array.length && rs.next(); i++){
				String beschreibung = rs.getString("beschreibung");
				int id = rs.getInt("id");
				String string = (id + "      " + beschreibung + "\n");
				array[i] = string;
			}

			PrintAnyString print1 = new PrintAnyString(array);
und die printMethode:

Java:
	public PrintAnyString(String[] buffer) {
		druckeTestseite(buffer);
	}

	SimpleDateFormat formatter = new SimpleDateFormat(
			"yyyy.MM.dd ' at 'hh:mm ' Uhr '");

	private void druckeTestseite(String[] buffer) {
		PrintJob prjob = getToolkit().getPrintJob(this, "Testseite", null);
		if (null != prjob) {
			final int iScreenResol = getToolkit().getScreenResolution();
			final int iPageResol = prjob.getPageResolution();
			final Dimension dimScreenSize = 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;
				pg.setFont(new Font("SansSerif", Font.PLAIN, iAddY * 2 / 3));

				Date currentTime1 = new Date();
				pg.drawString("Das Ergebnis Ihrer Abfrage vom "
						+ formatter.format(currentTime1) + " :", 50, 90);
				for (int i = 0; i < buffer.length; i++) {
					pg.drawString(buffer[i], 50, (120+ (i*20)));
				}
				pg.dispose();
			}
			prjob.end();
		}
	}
 

Java-Problems

Bekanntes Mitglied
ich möchte an dieser stelle darauf hinweisen dass dieses problem noch nicht gelöst ist und ich ein wenig hilfe benötige!
 

anp

Mitglied
Hi,

wahrscheinlich ist dein String-Array nicht komplett befüllt. Das Array, das du der Klasse übergibst, hat eine Länge von 50, die Felder müssen aber nicht alle ausgefüllt sein, da nur 2 + Anzahl der Results aus dem RS in das Array geschrieben werden. In Z. 29-31 der PrintAnyString-Klasse kannst du z.B. eine NP-Abfrage machen oder bei der Übergabe sicherstellen, dass der buffer komplett befüllt ist.

Ein Tipp am Rande: Bei Exceptions ist es manchmal hilfreich zu wissen, an welcher Stelle die Exc. geschmissen wird.

VG
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P InputStream, BufferedString Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben