Avatar billede krukken Mester
06. maj 2005 - 10:02 Der er 2 kommentarer og
1 løsning

Udskrivning af JTable til printer

Hej,

Jeg har en JTable som jeg ønsker at udskrive. Denne udskrivning vil i mange tilfælde strække sig over mange sider - men jeg kan ikke finde ud af at skifte side, når jeg printer, istedet får jeg bare udskrevet en side. Hvordan udskriver jeg indholdet fra en JTable - og findes der lettere metoder end den som er angivet nedenfor:

/****************************************
public class Print implements ActionListener,Runnable,Printable
{
    private Language lang;
    private Thread PRINTThread;

    public Print()
    {
    }

    public void actionPerformed(ActionEvent e)
    {
        Sheet mysheet =  Sheet.instance();
        //PrintUtilities.printComponent(Sheet.instance());
        if(!mysheet.isEmpty())
        {
            if (PRINTThread == null)
            {
                PRINTThread= new Thread(this, "PRINTThread");
                PRINTThread.start();
            }
        }
        else
        {
            lang = Language.instance();
            new MsgBox(lang.getText("info"),lang.getText("noprint"),false);
        }
    }

    public void run()
    {
        PrinterJob printJob = PrinterJob.getPrinterJob ();
        if (printJob.printDialog())
        {
            try
            {
                Book book = new Book ();
                PageFormat documentPageFormat = new PageFormat ();
                documentPageFormat.setOrientation (PageFormat.PORTRAIT);
                book.append (this,documentPageFormat);
                printJob.setPageable (book);
                printJob.print();
            }
            catch (Exception PrintException)
            {
                PrintException.printStackTrace();
                PRINTThread = null;
            }
            PRINTThread = null;
        }
    }

    public int print(Graphics g, PageFormat pf, int pageIndex)
    {
        int response = NO_SUCH_PAGE;
        Sheet sheet = Sheet.instance();
        if(!sheet.isEmpty())
        {
            Firm firm;
            int lines_on_page = 25;
            int pages = 0;
            int totalRows = 0;

            //--- Create the Graphics2D object
            Graphics2D g2d = (Graphics2D) g;
            //--- Translate the origin to 0,0 for the top left corner
            g2d.translate (pf.getImageableX(), pf.getImageableY());
            //--- Set the drawing color to black
            g2d.setPaint (Color.black);

            Font f = new Font( "Arial", Font.PLAIN , 10 );
            g2d.setFont(f);
            System.out.println("pageIndex:"+pageIndex);
            lang = Language.instance();
            totalRows = sheet.getRowCount();
            System.out.println("totalRows:"+totalRows);
            pages =  totalRows/lines_on_page;
            System.out.println("pages:"+pages);
            System.out.println("Printable.NO_SUCH_PAGE:"+Printable.NO_SUCH_PAGE);
            if (pageIndex >= pages)
            {
                response = Printable.NO_SUCH_PAGE;
            }
            else
            {
                float lineHeight = f.getSize2D();
                float charWidth = Float.parseFloat("7");

                float cmaxName = sheet.MaxNameLength();
                float cmaxAdress = sheet.MaxAdressLength();
                float cmaxDistrict = sheet.MaxDistrictLength();
                float cmaxZip =  sheet.MaxZipLength();
                float cmaxPhone =  sheet.MaxPhoneLength();
                float cmaxCVR =  sheet.MaxCVRLength();
                float maxWidth = (cmaxName + cmaxAdress +  cmaxDistrict + cmaxZip + cmaxPhone + cmaxCVR) * charWidth;

                float colName = charWidth;
                float colAdress = colName + cmaxAdress * charWidth;
                float colZip = colAdress + cmaxZip * charWidth;
                float colDistrict = colZip + cmaxDistrict * charWidth;
                float colPhone = colDistrict  + cmaxPhone * charWidth;
                float colCVR = colPhone + cmaxCVR * charWidth;
                int y = 16;
                Point autoScrol =  new Point(0,0);
                g2d.drawString(lang.getText("firm"), (int)(colName + autoScrol.getX()), (int)(y + autoScrol.getY()));
                g2d.drawString (lang.getText("adress"), (int)(colAdress + autoScrol.getX()), (int)(y + autoScrol.getY()));
                g2d.drawString (lang.getText("zip"), (int)(colZip + autoScrol.getX()), (int)(y + autoScrol.getY()));
                g2d.drawString (lang.getText("post"), (int)(colDistrict + autoScrol.getX()), (int)(y + autoScrol.getY()));
                g2d.drawString (lang.getText("phone"), (int)(colPhone + autoScrol.getX()), (int)(y + autoScrol.getY()));
                g2d.drawString (lang.getText("cvr"), (int)(colCVR + autoScrol.getX()), (int)(y + autoScrol.getY()));

                g2d.drawLine((int)(colName + autoScrol.getX()), (int)(y - autoScrol.getY()), (int)(maxWidth  + autoScrol.getX()),(int)(y + autoScrol.getY()));
                y += lineHeight;
                for(int i = 0; sheet.hasNext(); i++)
                {
                    firm = (Firm)sheet.next();
                    g2d.drawString(firm.getName(), (int)(colName + autoScrol.getX()), (int)(y + autoScrol.getY()));
                    g2d.drawString(firm.getAdress(), (int)(colAdress + autoScrol.getX()), (int)(y + autoScrol.getY()));
                    g2d.drawString(firm.getZipcode(), (int)(colZip + autoScrol.getX()), (int)(y + autoScrol.getY()));
                    g2d.drawString(firm.getDistrict(), (int)(colDistrict  + autoScrol.getX()), (int)(y + autoScrol.getY()));
                    g2d.drawString(firm.getPhone(), (int)(colPhone  + autoScrol.getX()), (int)(y + autoScrol.getY()));
                    g2d.drawString(firm.getCVRnumber(), (int)(colCVR  + autoScrol.getX()), (int)(y + autoScrol.getY()));
                    y += lineHeight;
                }
                response = Printable.PAGE_EXISTS;
            }

        }
        System.out.println("response:"+response);
        return response;
    }
}
*******************************************/
Avatar billede mikkelbm Nybegynder
06. maj 2005 - 10:24 #1
Hvis du bruger java 1.5 har JTable fået en print metode

table.print();
Avatar billede krukken Mester
07. maj 2005 - 00:20 #2
Det virker bare ikke - specielt ikke når man skal udskrive flere sider, så går applicationen fuldstændigt død. Endvidere tager den ikke hånd om hvis teksten er længere end det som vises i tabellen ligenu - det vil sige er der går information tabt bare pga. man ikke lige har fået tilpasset rækkernes bredde.

Jeg har selv solgt lige på google - har nogle hørt om http: Smart JPrint fra //www.activetree.com/? Jeg har læst rundt omkring at det før har været gratis - har nogle en version af den gratis model jeg må få?
Avatar billede krukken Mester
07. maj 2005 - 15:57 #3
Ikke noget svar.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester