Druckprobleme bei verschiedenen Schriftarten/-größen

J

Jub

Gast
Hallo,

ich habe ein Problem beim Drucken eines Labels. Dieses tritt je nach Länge des Textes, Anzahl der Leerzeichen, usw. bei unterschiedlichen Schriftarten/-größen und -stilen auf. Das folgende Beispiel zeigt das Problem bei Arial, Fett, Größe 22: die Leerzeichen verschwinden. Verändere ich den Text, tritt das bei anderen Schriftgrößen auf. Ach so, im Frame stellt er es richtig dar, aber nach dem Druck sind die Leerzeichen erst verschwunden.
Ich verwende Windows XP, 64 bit, JDK 7. Gleiches Problem auf Windows 7, 32 bit, 64 bit, JDK 6, ...
Unter JDK 5 keine Probleme.
Kann das Problem jemand bestätigen?

Java:
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.Vector;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PrintTest extends JFrame {

	private PrintPanel panel;

	public static void main(String[] args) {
		PrintTest frame = new PrintTest();
		frame.pack();
		frame.setVisible(true);
		frame.print();
	}
	public PrintTest() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		panel = new PrintPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		Vector<Font> fonts = new Vector<Font>();
		String fontName = "Arial";
		for (int i = 18; i < 29; i++) {
			fonts.add(new Font(fontName, Font.PLAIN, i));
			fonts.add(new Font(fontName, Font.BOLD, i));
		}
		for (int i = 0; i < fonts.size(); i++) {
			JLabel label = new JLabel();
			label.setText("IYBN Isakjfgsdulgflwehflet flr asdf. Msjahfuhuihsdilf");
			label.setFont(fonts.get(i));
			panel.add(label);
		}
		add(panel);
		
	}

	private void print() {
		PrinterJob pj = PrinterJob.getPrinterJob();
		pj.setPrintable(panel);
		if(pj.printDialog()){
			try {
				pj.print();
			} catch (PrinterException e) {
				e.printStackTrace();
			}
		}
	}

	class PrintPanel extends JPanel implements Printable {

		@Override
		public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
				throws PrinterException {
			if(pageIndex>0){
				return NO_SUCH_PAGE;
			}
			Graphics2D g2d = (Graphics2D) graphics;
			g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
			double scale = pageFormat.getImageableWidth()/getWidth();
//			g2d.scale(scale, scale);
			this.paint(g2d);
			return PAGE_EXISTS;
		}
	}
	
}
 

KrokoDiehl

Top Contributor
Ruf in der print()-Methode anstelle von
Code:
this.print()
mal
Code:
super.print()
auf, vielleicht hilft das schon. Ich würde zumindest erstmal die Fehler im Code suchen als in der Java-Implementierung.
 
J

Jub

Gast
Da PrintPanel von JPanel erbt und ich die Methode
Code:
JComponent.paint(Graphics g) {}
nicht überschreibe wird ja automatisch super aufgerufen, falls du [JAVA=72]this.paint(g2d);[/code] meinst. Habe den Code eigentlich schon arg zurechtgestutzt, sodass der Fehler eigentlich nur noch in der Java-Implementierung liegen kann. Hast du den Code mal ausgeführt?
 

KrokoDiehl

Top Contributor
Habe mich selbst vertippt ... ja ich meinte den
Code:
this.paint(g2d)
Aufruf. Aber den solltest du versuchsweise mal mit
Code:
super.print(g2d)
ersetzen. In deinem Panel überschreibst du ja
Code:
print()
, rufst aber nie die Basismethode auf. Die macht vielleicht einige Dinge um deine Probleme zu beheben.
 
J

Jub

Gast
Habe ich ersetzt, aber wie gesagt, super wird sowieso aufgerufen, da ich
Code:
paint(Graphics g)
nicht überschrieben habe. Mit der überschriebenen
Code:
print()
meinst du da die
Code:
print(Graphics graphics, PageFormat pageFormat, int pageIndex)
-Methode? Die kommt ja aus dem interface
Code:
Printable
. Muss also überschrieben werden.
 

KrokoDiehl

Top Contributor
Das JPanel hat selbt eine Methode
Code:
print(Graphics)
, die meine ich. Und ja, du hast wieder Recht, du überschreibst natürlich die Printable-Methode, nicht die von JPanel (... Wochenende ruft).
Ich will darauf hinaus: Ruf die
Code:
print()
-Methode vom JPanel auf :)
Um das
Code:
paint()
geht es mir gar nicht.
 
J

Jub

Gast
Ah ok, hab's verstanden. Hab ich gemacht, aber das ändert auch nichts. Da wird ja nur die Flag gesetzt, dass gedruckt wird, und anschließend die
Code:
paint(Graphics g)
aufgerufen. Das ist schon mal nicht der Fehler. Ich vermute den Fehler irgendwo an der Schnittstelle JVM, PostScript, Drucker, da auf dem Bildschirm ja alles funktioniert. Komisch ist auch, dass es bei verschiedenen Textlängen, unterschiedlicher Anzahl Leerzeichen bei verschiedenen Schriftgrößen auftritt.
 
J

Jub

Gast
Jpanel hat ja keine
Code:
print()
-Methode, sondern nur
Code:
print(Graphics g)
. Die habe ich verwendet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
Drachenbauer Wie muss ein Konstructor aussehen, um dinge mit verschiedenen Zusätzen in den "<>" anzunehmen? Allgemeine Java-Themen 1
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
A Classpath Library in verschiedenen Projekten Allgemeine Java-Themen 2
S Spielfeld aus verschiedenen Kacheln Allgemeine Java-Themen 35
U Variablen Stringarrays mit wenig verschiedenen Zeichen effizienter speichern Allgemeine Java-Themen 10
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
M Testen von verschiedenen Produktversionen Allgemeine Java-Themen 3
C Vigenere und Caesar in verschiedenen Alphabeten Allgemeine Java-Themen 1
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
P Anzahl vo Einträgen in verschiedenen Sets Allgemeine Java-Themen 3
R Input/Output Dateizugriff aus verschiedenen Tools Allgemeine Java-Themen 3
B File Seperator unter verschiedenen OS Allgemeine Java-Themen 2
G Gleiche Packages in verschiedenen JAR Dateien - Welches Package wird verwendet? Allgemeine Java-Themen 5
K Programm mit verschiedenen Parametern starten Allgemeine Java-Themen 2
E Outputstream an verschiedenen Positionen beschreiben Allgemeine Java-Themen 4
N Dateizugriff in verschiedenen Ordnern Allgemeine Java-Themen 2
S Fragen zu verschiedenen Themen vom JCreator Allgemeine Java-Themen 2
S Frage zu verschiedenen Java Projekten Allgemeine Java-Themen 6
D Logger mit verschiedenen Ausgabezielen Allgemeine Java-Themen 2
H2SO3- sichtbarkeit in verschiedenen paketen Allgemeine Java-Themen 2
R Kann ich die jars eines Applets auf verschiedenen Domains hosten? Allgemeine Java-Themen 2
T DataFrame (Matrix mit mit verschiedenen Typen pro Spalte) Allgemeine Java-Themen 4
R Aktuelle Kompatibilitätsliste für JRE auf verschiedenen OS´s Allgemeine Java-Themen 2
MQue Methoden in verschiedenen Klassen aufrufen Allgemeine Java-Themen 21
MQue JButton an verschiedenen Variablen Allgemeine Java-Themen 2
J parsen von verschiedenen dokument typen Allgemeine Java-Themen 3
D generischer Iterator mit verschiedenen Typen Allgemeine Java-Themen 3
S Arrayelemente in verschiedenen Variationen zurückgeben Allgemeine Java-Themen 12
T Herunterfahren oder Neustarten der verschiedenen OS Allgemeine Java-Themen 11
C Sichbarkeit von Objekten / Methoden in verschiedenen Files Allgemeine Java-Themen 7
M Probleme mit Schriftarten PDFBox Allgemeine Java-Themen 3
U Schriftarten Allgemeine Java-Themen 2
U anti-alias, Schriftarten glätten Allgemeine Java-Themen 6
G CPI und Schriftarten. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben