07. august 2002 - 15:02Der er
5 kommentarer og 1 løsning
Problem med Book append metoden
Jeg har et problem med følgende kodefragment
Book bk = new Book(); bk.append(new PaintJTextArea(jta,font), pf, Book.UNKNOWN_NUMBER_OF_PAGES);
Da jeg ikke ved på forhånd hvor mange fysiske sider mit JTextArea vil fylde, forsøger jeg at bruge konstanten Book.UNKNOWN_NUMBER_OF_PAGES. Men append-metoden kaster java.lang.ArrayIndexOutOfBoundsException at java.util.Vector.setSize(Vector.java:242) at java.awt.print.Book.append(Book.java:140) at PrintJTextArea.print(PrintJTextArea.java:65) at MyFrameWithPrinting2.<init>(MyFrameWithPrinting2.java:67) at MyFrameWithPrinting2.main(MyFrameWithPrinting2.java:77)
Min kode virker fint hvis jeg erstatter Book.UNKNOWN_NUMBER_OF_PAGES med f.eks. 1000. også selv om jeg kun printer 1 eller 2 sider ud.
Har jeg misforstået hvordan Book.UNKNOWN_NUMBER_OF_PAGES benyttes? På forhånd tak Sten
ændrer jeg til bk.append(new PaintJTextArea(jta,font), pf); System.out.println("bkPages="+bk.getNumberOfPages()); returnere bk.getNumberOfPages() 1
Ændrer jeg til bk.append(new PaintJTextArea(jta,font), pf,7); System.out.println("bkPages="+bk.getNumberOfPages()); returnere bk.getNumberOfPages() 7 og print metoden i PaintJTextArea objektet kaldes korrekt 2 x 7 gange.
Ændrer jeg til bk.append(new PaintJTextArea(jta,font), pf, Book.UNKNOWN_NUMBER_OF_PAGES); køres Konstrukteren i PaintJTextArea korrekt, herefter kastes java.lang.ArrayIndexOutOfBoundsException. print-metoden i PaintJTextArea kaldes ikke.
Hmmm.. Ja Book implementerer interfacet Pageable og får derved attributten UNKNOWN_NUMBER_OF_PAGES.. Jeg kan desværre ikke helt forstå, hvad der er galt, men attributten bliver af en eller anden grund ikke sat..Skal da lige se efter om jeg ikke har noget kode a la det her til at ligge!
Her har du min PaintJTextClass. Print metoden kalder en statisk metode PrintJTextArea.drawJTextArea i 'Hoved klassen' PrintJTextArea. Måske kan det give lidt mere information. Klassen PrintPageShift er blot en hjælpeklasse med 2 instance variable og tilhørende get- og set-metoder til at holde styr på sideskift. Sten
class PaintJTextArea implements Printable { JTextArea jta; String[] lines; PrintPageShift pageShift = new PrintPageShift(0,0); boolean first = true; Font fnt = new Font("Times New Roman", Font.PLAIN, 8);
public PaintJTextArea(JTextArea jta, Font font) { this.jta = jta; if (font != null) fnt = font; this.lines = jta.getText().split("\n"); }
public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException { g.setFont(fnt); g.setColor(Color.black); if (!first) { pageShift = PrintJTextArea.drawJTextArea((Graphics2D) g, lines, pageShift, pf); first = true; } else first = false; if (pageShift.getPageShiftParagraph() < lines.length) return Printable.PAGE_EXISTS; else { return Printable.NO_SUCH_PAGE; } } }
Jeg har lavet nogle få ændringer i min PrintJTextArea klasse så den benytter metoden setPrintable i stedet for setPageable. Nu er det ikke nødvendigt at angive antallet af fysiske sider. Printdialogboxen spørger så om jeg vil printe side 1-9999.
Jeg vil gerne stadig benytte Book klassen, men mangler en løsning på at tælle antallet af fysiske sider der skal printes, så denne parameter kan sættes korrekt når jeg kalder Book klassens append metode. Jeg opretter et nyt spørgsmål til denne problemstilling. Sten
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.