21. august 2003 - 18:36Der er
10 kommentarer og 1 løsning
Java AWT Print - det er godt nok IKKE nemt - det driller
Hejsa Eksperter....
Jeg er ved at lave en lille test til mig selv, hvor jeg prøver at udskrive en log..... men....den gør ikke som jeg vil have den til at gøre..... i får lige min kode....:
public class PrintableLog implements Printable { public static final String PAGE_TITLE = "p2pFileMover Log";
private int numberOfPages; private LinkedList logMessages;
private int pageWidth, pageHeight; private FontMetrics fm;
public PrintableLog(LinkedList logMessages, int numberOfPages) { this.numberOfPages = numberOfPages; // Only print logmessages up to "print"-action has performed - ergo....clone!!!! this.logMessages = (LinkedList)logMessages.clone(); } public int print(Graphics pg, PageFormat pf, int pageIndex) throws PrinterException { if (pageIndex >= numberOfPages) return NO_SUCH_PAGE;
int y = 0; // Y-position (Vertikal...up/down...pos of Graphics written) int x = 0; // X-position (Horizontal...left/right,,, pos of Graphics written)
// Writes Title pg.setFont(new Font("Dialog",Font.BOLD, 20)); pg.setColor(Color.BLACK); fm = pg.getFontMetrics();
y += fm.getAscent(); pg.drawString(PAGE_TITLE, x, y); pg.drawLine(x, y+2, pageWidth, y+2);
y += fm.getHeight(); // Makes "Title" distance to log-prints....
// Prints actual log pg.setFont(new Font("Dialog",Font.BOLD, 11)); fm = pg.getFontMetrics();
// TEST "PRINT OUT".... since the while-loop will produce SQUAT....damn pg.drawString("Her er noget tekst på linien efter TITLEN", x, y); y += fm.getHeight(); pg.drawString("Her er noget tekst på linien efter linien efter TITLEN", x, y); y += fm.getHeight(); pg.drawString("Her er noget tekst på linien efter linien efter linien efter TITLEN", x, y); y += fm.getHeight();
x = 0; y += fontBounds.getHeight()+2; } return PAGE_EXISTS; } }
.... problem er det, at den godt nok printer alt hvad er defineret i print(..., ..., ...)-metoden indtil den kommer til while-løkken. Jeg har testet (vha. system.out.println.....fy-ha-skamme-skamme) at den kommer ind i løkken, men alligevel producerer pg.drawString(..., ..., ...) ikke noget output på papiret....
Det skal siges at jeg er godt desperat nu..... please HELP ME.......jeg er bare så "lost".....
Umiddelbart tror jeg at theMsg.getMsgToDisplay() ikke returnerer nogen tekst
Synes godt om
Slettet bruger
21. august 2003 - 19:12#2
Jow.... det gør den.... jeg har System.out.println-testet alle værdier som bruges i løkken (der ligger i LogMessage-objekter).... Det er ikke det som er problemet....
Prøv lige at fjerne den her: x = x + (int)fontBounds.getWidth() + 5;
For mig at se, må du tegne til højre for papiret.
Synes godt om
Slettet bruger
21. august 2003 - 19:33#4
Nope _carsten, det var heller ikke det... (har lige testet)
Du skal også lige tænke på at alt hvad der sker i een iteration i while-løkken er det at skrive een linie.... Hver gang en "x = x + (......." forekommer flyttes x-koordinaten blot 5 pixels efter hvad der lige er blevet skrevet, og i slutningen af løkken flyttes x-koordinates til 0 således at der kan skrives en ny linie i den næste iteration......
I mine øjne kan der kun blive udskrevet noget på papir.
Jeg går ud fra, at du har checket værdien af 'x', mig bekendt måler getStringBounds() omfanget af en tekst, så hvis teksten som returneres fra theMsg.getType() ikke er lang og fontfarven ellers ikke er hvid, så skal det bare virke.
Så 1. Check x's værdi 2. Brug ikke usynlig blæk
:-) :-) :-)
Glad igen
Synes godt om
Slettet bruger
21. august 2003 - 20:25#6
Jeg er MEGA forvirret.... jeg har nu tjekket x's værdi, og jeg skriver faktisk også KUN med sort nu....
....det virker ikke......
Jeg har så, i et desperat forsøg - forsøgt at indsætte det følgende i bunden af min løkke:
Jeg er altså ked af at side det, men dine metoder theMsg.getMsgToDisplay(), theMsg.getType() og theMsg.getTime() returnerer IKKE noget som kan udskrives !
Jeg har testet din kode hos mig selv med få ændringer og den skriver PERFEKT hos mig - SORT PÅ HVIDT PAPIR!
Her har du ændringerne.
int sss = 0; while (sss < 10 && y < pageHeight) { System.out.println ("In the while...");
// Draw type of action fontBounds = pg.getFont().getStringBounds("KKK", frc); pg.setColor(Color.BLACK); pg.drawString("KKK", x, y); pg.drawLine(x, y, pageWidth, y);
Hvis du har løst opgaven og mener 200 points noget i overkantet, så fyr et "passende" antal points af og luk spørgsmålets!
Jeg har ingen problemer med at acceptere den løsning, din printkode er jo OK !!
Synes godt om
Slettet bruger
08. september 2003 - 10:01#11
Sorry...... Jeg havde FULDSTÆNDIGT glemt at jeg havde et åbent spørgsmål, sorry! Du får dine point nu......
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.