Calculator
Grünschnabel
Hallo,
Ich arbeite gerade an einem Projekt, bei dem das Programm unter anderem
bestimmte Wörter unterstreichen, den fertigen Text auf den Bildschirm ausgeben und ausdrucken soll.
Am Bildschirm sieht noch alles ganz richtig aus, aber wenn man den Text ausdrucken will, sind die Linien unter den unterstrichenen Wörtern nicht genau unter dem Wort und sind etwas verschoben(nach links oder rechts).
Ich habe zuerst gedacht, dass es an getFontMetrics() liegt, weil ich mit Toolkit darauf zugegriffen habe. Wenn ich stattdessen das Graphics-Objekt von der print()-Methode
dafür benutze, sieht es zwar besser aus, aber die Unterstriche sind noch immer nicht ganz perfekt.
Ich habe das Problem jetzt in einem kleinen Beispiel zusammengefasst.
Seltsamerweise funktioniert hier das Unterstreichen mit g.getFontMetrics().
Auf den ersten Blick konnte ich in meinem größeren Programm keinen Fehler entdecken. Liefert g.getFontMetrics() noch immer keine genaue Angabe, oder steckt der Fehler doch irgendwo in meinem eigentlichen Programm?
Ich arbeite gerade an einem Projekt, bei dem das Programm unter anderem
bestimmte Wörter unterstreichen, den fertigen Text auf den Bildschirm ausgeben und ausdrucken soll.
Am Bildschirm sieht noch alles ganz richtig aus, aber wenn man den Text ausdrucken will, sind die Linien unter den unterstrichenen Wörtern nicht genau unter dem Wort und sind etwas verschoben(nach links oder rechts).
Ich habe zuerst gedacht, dass es an getFontMetrics() liegt, weil ich mit Toolkit darauf zugegriffen habe. Wenn ich stattdessen das Graphics-Objekt von der print()-Methode
dafür benutze, sieht es zwar besser aus, aber die Unterstriche sind noch immer nicht ganz perfekt.
Ich habe das Problem jetzt in einem kleinen Beispiel zusammengefasst.
Seltsamerweise funktioniert hier das Unterstreichen mit g.getFontMetrics().
Auf den ersten Blick konnte ich in meinem größeren Programm keinen Fehler entdecken. Liefert g.getFontMetrics() noch immer keine genaue Angabe, oder steckt der Fehler doch irgendwo in meinem eigentlichen Programm?
Code:
import java.awt.*;
import java.awt.print.*;
public class UnderlineDrucker implements Printable{
public UnderlineDrucker(){
pJob(true);
}
public int print(Graphics g,PageFormat pageFormat,int pageIndex){
if ( pageIndex >= 1 ){
return Printable.NO_SUCH_PAGE;
}
paintUnderline(g,"Ein Test",new Font("Georgia",Font.PLAIN,9)); //Bei
return Printable.PAGE_EXISTS; //Georgia ist es am deutlichsten zu sehen
}
public void paintUnderline(Graphics g,String text,Font font){
g.setFont(font);
g.drawString(text,100,100);
FontMetrics fm = g.getFontMetrics(font); //mit Toolkit - Linie zu lang
g.fillRect(100,102,fm.stringWidth(text),2);
}
private void pJob(boolean dialog){
PrinterJob pjob = PrinterJob.getPrinterJob();
if(dialog){
if ( pjob.printDialog() == false ){
return;
}
}
pjob.setPrintable(this);
try{
pjob.print();
}
catch (PrinterException e){
System.out.println("Drucken nicht möglich!");
}
}
public static void main(String[] args){
new UnderlineDrucker();
}
}