Avatar billede javaged Nybegynder
24. april 2001 - 09:36 Der er 38 kommentarer og
1 løsning

Udskrift med java til printer

Hej \"Eksperter\"

Hvordan udskriver man til printer ved hjælp af java???

I et projekt skal jeg have udskrevet diverse lister (tabeller) samt labels og evt. billeder til en printer, og derfor vil jeg høre om ikke der er nogen der kan komme med fyldestgørrende forklaring af hvilke muligheder jeg har med hensyn til udskrfiter.... Hvilke udskriftsklasser findes der, og hvilke funktioner ligger der på disse klasser??????

På forhånd tak!!!
Avatar billede disky Nybegynder
24. april 2001 - 09:42 #1
Kig i java API\'en

Det er mange klasser der styrer udprintning:

f.eks.
Interface Printable
Class PrinterJob
Class PrintJob

osv.

tag specielt en kigger på.
http://www.javasoft.com/j2se/1.3/docs/api/java/awt/print/package-summary.html

der står alt du skal bruge.
Avatar billede javaged Nybegynder
24. april 2001 - 09:48 #2
disky>> OK, jeg kan se at der står en del godt på den side, men et eksempel, hvor nogen rent faktisk har lavet noget der virker ville være bedre!!!!!
Avatar billede disky Nybegynder
24. april 2001 - 09:57 #3
det har du ret i, jeg har bare ikke en printer ved hånden.

men jeg kigger lidt på det
Avatar billede disky Nybegynder
24. april 2001 - 10:03 #4
et styks eksempel på udprintning af grafik:
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.awt.geom.*;
import java.awt.print.*;

public class SimpleBook extends JPanel implements ActionListener{

  final static Color bg = Color.white;
    final static Color fg = Color.black;
    final static Color red = Color.red;
    final static Color white = Color.white;

    final static BasicStroke stroke = new BasicStroke(2.0f);
    final static BasicStroke wideStroke = new BasicStroke(8.0f);

    final static float dash1[] = {10.0f};
    final static BasicStroke dashed = new BasicStroke(1.0f,
                                                      BasicStroke.CAP_BUTT,
                            BasicStroke.JOIN_MITER,
                                                      10.0f, dash1, 0.0f);
    final static JButton button = new JButton(\"Print\");

  public SimpleBook() {
      setBackground(bg);
        button.addActionListener(this);
  }

  public void actionPerformed(ActionEvent e) {

    // Get a PrinterJob
    PrinterJob job = PrinterJob.getPrinterJob();
    // Create a landscape page format
    PageFormat landscape = job.defaultPage();
    landscape.setOrientation(PageFormat.LANDSCAPE);
    // Set up a book
    Book bk = new Book();
    bk.append(new PaintCover(), job.defaultPage());
    bk.append(new PaintContent(), landscape);
    // Pass the book to the PrinterJob
    job.setPageable(bk);
    // Put up the dialog box
    if (job.printDialog()) {
        // Print the job if the user didn\'t cancel printing
        try { job.print(); }
            catch (Exception exc) { /* Handle Exception */ }
    }
}

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        drawShapes(g2);
    }     

    static void drawShapes(Graphics2D g2){
        int gridWidth = 600 / 6;
        int gridHeight = 250 / 2;
       
        int rowspacing = 5;
        int columnspacing = 7;
        int rectWidth = gridWidth - columnspacing;
        int rectHeight = gridHeight - rowspacing;
       
        Color fg3D = Color.lightGray;
   
        g2.setPaint(fg3D);
        g2.drawRect(80, 80, 605 - 1, 265);
        g2.setPaint(fg);
           
        int x = 85;
        int y = 87;

   
        // draw Line2D.Double
        g2.draw(new Line2D.Double(x, y+rectHeight-1, x + rectWidth, y));
        x += gridWidth;
       
    Graphics2D temp = g2;
        // draw Rectangle2D.Double
        g2.setStroke(stroke);
        g2.draw(new Rectangle2D.Double(x, y, rectWidth, rectHeight));
        x += gridWidth;
       
        // draw  RoundRectangle2D.Double
        g2.setStroke(dashed);
        g2.draw(new RoundRectangle2D.Double(x, y, rectWidth,
                                            rectHeight, 10, 10));
        x += gridWidth;
       
        // draw Arc2D.Double
        g2.setStroke(wideStroke);
        g2.draw(new Arc2D.Double(x, y, rectWidth, rectHeight, 90,
                                135, Arc2D.OPEN));
        x += gridWidth;
       
        // draw Ellipse2D.Double
        g2.setStroke(stroke);
       
        g2.draw(new Ellipse2D.Double(x, y, rectWidth, rectHeight));
        x += gridWidth;
       
        // draw GeneralPath (polygon)
        int x1Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y1Points[] = {y, y+rectHeight, y+rectHeight, y};
      GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
                                              x1Points.length);
        polygon.moveTo(x1Points[0], y1Points[0]);
        for ( int index = 1; index < x1Points.length; index++ ) {
            polygon.lineTo(x1Points[index], y1Points[index]);
        };
        polygon.closePath();
       
        g2.draw(polygon);

        // NEW ROW
        x = 85;
        y += gridHeight;
       
        // draw GeneralPath (polyline)
       
        int x2Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y2Points[] = {y, y+rectHeight, y+rectHeight, y};
        GeneralPath polyline = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
                                              x2Points.length);
        polyline.moveTo (x2Points[0], y2Points[0]);
      for ( int index = 1; index < x2Points.length; index++ ) {
            polyline.lineTo(x2Points[index], y2Points[index]);
        };
       
        g2.draw(polyline);
        x += gridWidth;
                                             
        // fill Rectangle2D.Double (red)
        g2.setPaint(red);
        g2.fill(new Rectangle2D.Double(x, y, rectWidth, rectHeight));
        g2.setPaint(fg);
        x += gridWidth;
       
        // fill RoundRectangle2D.Double
        GradientPaint redtowhite = new GradientPaint(x,y,red,x+rectWidth,y,white);
        g2.setPaint(redtowhite);
        g2.fill(new RoundRectangle2D.Double(x, y, rectWidth,
                                            rectHeight, 10, 10));
        g2.setPaint(fg);
        x += gridWidth;
       
        // fill Arc2D
        g2.setPaint(red);
        g2.fill(new Arc2D.Double(x, y, rectWidth, rectHeight, 90,
                                135, Arc2D.OPEN));
        g2.setPaint(fg);
        x += gridWidth;
           
        // fill Ellipse2D.Double
        redtowhite = new GradientPaint(x,y,red,x+rectWidth, y,white);
        g2.setPaint(redtowhite);
      g2.fill (new Ellipse2D.Double(x, y, rectWidth, rectHeight));
        g2.setPaint(fg);                     
        x += gridWidth;
        // fill and stroke GeneralPath
        int x3Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y3Points[] = {y, y+rectHeight, y+rectHeight, y};
        GeneralPath filledPolygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
                                                    x3Points.length);
        filledPolygon.moveTo(x3Points[0], y3Points[0]);
        for ( int index = 1; index < x3Points.length; index++ ) {
            filledPolygon.lineTo(x3Points[index], y3Points[index]);
        };
        filledPolygon.closePath();
        g2.setPaint(red);
        g2.fill(filledPolygon);
        g2.setPaint(fg);
        g2.draw(filledPolygon);
    g2.setStroke(temp.getStroke());
    }



  public static void main(String[] args) {
        WindowListener l = new WindowAdapter() {
                public void windowClosing(WindowEvent e) {System.exit(0);}
                public void windowClosed(WindowEvent e) {System.exit(0);}
        };
        JFrame f = new JFrame();
        f.addWindowListener(l);
        JPanel panel = new JPanel();
        panel.add(button);
        f.getContentPane().add(BorderLayout.SOUTH, panel);
        f.getContentPane().add(BorderLayout.CENTER, new SimpleBook());
        f.setSize(775, 450);
        f.show();
  }

}

class PaintCover implements Printable {
  Font fnt = new Font(\"Helvetica-Bold\", Font.PLAIN, 48);

  public int print(Graphics g, PageFormat pf, int pageIndex)
        throws PrinterException {
    g.setFont(fnt);
    g.setColor(Color.black);
    g.drawString(\"Sample Shapes\", 100, 200);
    return Printable.PAGE_EXISTS;
  }
}

class PaintContent implements Printable {
  public int print(Graphics g, PageFormat pf, int pageIndex)
  throws PrinterException {
      SimpleBook.drawShapes((Graphics2D) g);
      return Printable.PAGE_EXISTS;

  }


}

Avatar billede disky Nybegynder
24. april 2001 - 10:07 #5
Ved at ændre i de to nederste klasser kan du selvfølgelig udskrive ren text istedet hvis du ønsker det.
Avatar billede javaged Nybegynder
24. april 2001 - 10:16 #6
Okay.... Det ser godt ud, men du skriver at jeg skal ændre i de to nederste klasser for at udskrive tekst.... Hvordan det?????

Da jeg forsøgte at køre din test, så kom der kun en side ud hvor der stod \"Sample Shapes\"!!! Det kan dog muligvis være fordi at min printer gik i ged - Ellers så det dog fint ud!
Avatar billede javaged Nybegynder
24. april 2001 - 10:19 #7
ok.. den skal kun skrive sample shapes  ud, eller hvad .. jeg er lidt i tvivl
Avatar billede disky Nybegynder
24. april 2001 - 10:20 #8
der skulle egentligt komme to side :)

i class PaintCover er der en

g.drawString(\"sample shapes\",100,100);

dette funktions kald gentager du bare for at skrive hele din tabel

men jeg roder videre :)
Avatar billede disky Nybegynder
24. april 2001 - 10:20 #9
side 2 er der noget grafik på
Avatar billede disky Nybegynder
24. april 2001 - 10:21 #10
kan du ikke lige teste det her ?

Jeg har ingen printer til min PC kun via netværk og der virker det her ikke

/*
* test.java
*
* Created on 24. april 2001, 10:16
*/
import java.io.*;

/**
*
* @author  reinke
* @version
*/
public class test extends Object
{
   
    /** Creates new test */
    public test()
    {
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main (String args[])
    {
        try
        {
            PrintWriter out=new PrintWriter(new FileOutputStream( new File(\"lpt1\") ) );
           
            out.print(\"Dette er en test\");
           
        }
        catch(IOException e)
        {
        }
       
       
    }
   
}
Avatar billede javaged Nybegynder
24. april 2001 - 10:27 #11
Hmmm Når jeg kører din lille test sker der intet!! Kan det måske skyldes at jeg også sidder og bruger en netværksprinter???
Avatar billede disky Nybegynder
24. april 2001 - 10:30 #12
ok

er tilbage om lidt igen :)
Avatar billede disky Nybegynder
24. april 2001 - 10:34 #13
bingo nu har jeg løsningen på ren text udskrivning:

/*
* test.java
*
* Created on 24. april 2001, 10:16
*/
import java.io.*;

/**
*
* @author  reinke
* @version
*/
public class test extends Object
{
   
    /** Creates new test */
    public test()
    {
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main (String args[])
    {
        try
        {
            PrintWriter out=new PrintWriter(new FileOutputStream( new File(\"lpt1:\") ) );
           
            out.print(\"Dette er en test\");
           
            out.close();
           
        }
        catch(IOException e)
        {
        }   
    }
}


Hvis du sidder på en netværksprinter skal du gå i command prompt og skrive

net use lpt1: \\\\servernavn\\printernavn

servernavn og printernavn kan jeg ikke fortælle dig hvad er, det ved din sysadm.

har testet det og printeren skriver skam noget ud :)
Avatar billede javaged Nybegynder
24. april 2001 - 10:35 #14
Jeg forsøgte at køre dit udskrift program igen, og denne gang printede den to sider. Den første side stod der som sidst \"Sample Shapes\" på, så det er jo godt nok... Den næste skulle der så vidt jeg kan se i koden have været lidt grafik på, men det var der ikke... Det eneste der kom frem på parpiret var en sort streg i bunden. Dette kan dog skyldes at det er en laserprinter jeg sidder og udskriver på... Den kan måske ikke håndtere de røde farver.....

.... OK - Giv dig bare god til!!! :-)
Avatar billede disky Nybegynder
24. april 2001 - 10:38 #15
mystisk, min sort/hvis printer skrev grafik ud

men det andet eksempel virker fint med ren text
Avatar billede javaged Nybegynder
24. april 2001 - 10:51 #16
Det virker sgu ikke når jeg skriver det du  siger i command prompten..... Det jeg skriver er:

lpt1: \\\\Svend01\\LOK319_Q\\HP LaserJet 2100 Series PS

Når jeg skriver det får jeg en fejlmeddelelse!!
Avatar billede javaged Nybegynder
24. april 2001 - 10:54 #17
UPS!!!! 2 Sek
Avatar billede disky Nybegynder
24. april 2001 - 10:56 #18
prøv med

net use lpt1: \"\\\\Svend01\\LOK319_Q\\HP LaserJet 2100 Series PS\"
Avatar billede javaged Nybegynder
24. april 2001 - 10:57 #19
Nej, det virker ikke... Det jeg skriver er:

net use lpt1:\\\\Svend01\\LOK319_Q\\HP LaserJet 2100 Series PS

Til dette får jeg en fejlmeddelese!!!
Avatar billede javaged Nybegynder
24. april 2001 - 11:01 #20
en accepterede kommandoen da jeg skrev:

net use lpt1: \\\\Svend01\\LOK319_Q

Altså uden printernavnet, men når jeg kører testen kommer der stadig ikke noget ud

Når jeg skriver det samme med \"\" omkring får jeg en ny fejlmeddelelse, hvor der står at denne handling ikke kan udføres fra den computer som jeg sidder ved!!!! - Jeg har sgu nok ikke rettigheder til at ændre det!!
Avatar billede disky Nybegynder
24. april 2001 - 11:06 #21
prøv at få din administrator til at give printeren et navn uden mellemrum.

min printer hedder \'husum\' og det virker fint
Avatar billede javaged Nybegynder
24. april 2001 - 11:13 #22
Jeg har selv oprettet en printer på denne computer som bruger netværksprinteren (Jeg er ikke skide gode venner med administratorne). Denne nye printer har jeg kaldt for \"printer\".

Så prøvede jeg at skrive:

net use lpt: \\\\Svend01\\LOK319_Q\\printer

Til det fik jeg følgende fejl:
Fejl 50: Du forsøgte en handling, der ikke kan udføres fra denne computer, eller som ikke understøttes af den angivne server. Kontroller, at du benytter den korrekte server til den kommando eller opgave, du vil udføre. Hvis problemet ikke forsvinder, skal du kontakte netværksadministratoren.

?????

Er der ikke en anden vej jeg kan komme rundt om problemet på... Evt. ved at buge printerjob???
Avatar billede disky Nybegynder
24. april 2001 - 11:17 #23
puha det ved jeg ikke.

men den fejl lyder som om du ikke har rettigheder eller lignende.

Jeg kigger lidt mere på det med PrinterJob.
Avatar billede javaged Nybegynder
24. april 2001 - 11:22 #24
OK!!
Avatar billede disky Nybegynder
24. april 2001 - 11:25 #25
jeg kan ikke lige finde en løsning til brug af PrinterJob uden at gøre det som grafik :(

Men prøv f.eks.

import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.awt.geom.*;
import java.awt.print.*;

public class SimpleBook extends JPanel implements ActionListener
{
   
    final static Color bg = Color.white;
    final static Color fg = Color.black;
    final static Color red = Color.red;
    final static Color white = Color.white;
   
    final static BasicStroke stroke = new BasicStroke(2.0f);
    final static BasicStroke wideStroke = new BasicStroke(8.0f);
   
    final static float dash1[] ={10.0f};
    final static BasicStroke dashed = new BasicStroke(1.0f,    BasicStroke.CAP_BUTT,    BasicStroke.JOIN_MITER,    10.0f, dash1, 0.0f);
    final static JButton button = new JButton(\"Print\");
   
    public SimpleBook()
    {
        setBackground(bg);
        button.addActionListener(this);
    }
   
    public void actionPerformed(ActionEvent e)
    {
       
        // Get a PrinterJob
        PrinterJob job = PrinterJob.getPrinterJob();
        // Create a landscape page format
        PageFormat landscape = job.defaultPage();
        landscape.setOrientation(PageFormat.LANDSCAPE);
        // Set up a book
        Book bk = new Book();
        bk.append(new PaintCover(), job.defaultPage());
        // Pass the book to the PrinterJob
        job.setPageable(bk);
        // Put up the dialog box
        if (job.printDialog())
        {
            // Print the job if the user didn\'t cancel printing
            try
            { job.print(); }
            catch (Exception exc)
            { /* Handle Exception */ }
        }
    }
   
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
    }
   
    public static void main(String[] args)
    {
        WindowListener l = new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {System.exit(0);}
            public void windowClosed(WindowEvent e)
            {System.exit(0);}
        };
        JFrame f = new JFrame();
        f.addWindowListener(l);
        JPanel panel = new JPanel();
        panel.add(button);
        f.getContentPane().add(BorderLayout.SOUTH, panel);
        f.getContentPane().add(BorderLayout.CENTER, new SimpleBook());
        f.setSize(775, 450);
        f.show();
    }
   
}

class PaintCover implements Printable
{
    Font fnt = new Font(\"Helvetica-Bold\", Font.PLAIN, 12);
    Font fnt2 = new Font(\"Helvetica-Bold\", Font.PLAIN, 48);
   
    public int print(Graphics g, PageFormat pf, int pageIndex)
    throws PrinterException
    {
        g.setFont(fnt);
        g.setColor(Color.black);
        g.drawString(\"Sample Shapes\", 100, 200);
        g.setFont(fnt2);
        g.drawString(\"Sample Shapes\", 100, 230);
        return Printable.PAGE_EXISTS;
    }
}




Avatar billede disky Nybegynder
24. april 2001 - 11:26 #26
bk.append(new PaintCover(), job.defaultPage());

denne linie tilføjer en nye side til din \'bog\'

new PaintCover() henviser til klassen som skal udskrive lige den side af bogen.
I den klasse skal du så opsætte den side text du vil udskrive, og vælge fonte og farver osv.
Avatar billede javaged Nybegynder
24. april 2001 - 11:40 #27
OK - Jeg prøver at se om jeg kan gennemskue koden.

Jeg ved godt at jeg er lidt krævende nu, men kunne jeg evt. få dig til at lave en slags skabelon, evt. med pre og post betingelser på metoderne?? :-)
Avatar billede javaged Nybegynder
24. april 2001 - 11:41 #28
Jeg går til frokost nu, men er tilbage om ½ time!!
Avatar billede disky Nybegynder
24. april 2001 - 11:54 #29
øh hvad mener du med pre og post ?
Avatar billede javaged Nybegynder
24. april 2001 - 12:07 #30
Nå okay.. Du kender ikke til pre og post betingelser..... Det er også lige meget... Bare der er lidt forklarende tekst til metoderne.
Avatar billede disky Nybegynder
24. april 2001 - 12:15 #31
Jeg har ikke hørt om pre og post betingelser i sammenhæng med Java :-)


public void actionPerformed(ActionEvent e)

Er den metode der bliver kaldt når du trykker på \'Print\' knappen


Her komme alt magien :)

class PaintCover implements Printable
{
// lav en ny font (12 er størrelsen)
    Font fnt = new Font(\"Helvetica-Bold\", Font.PLAIN, 12);
//lav en til med størrelse 48
    Font fnt2 = new Font(\"Helvetica-Bold\", Font.PLAIN, 48);
    //denne metode er den som tegner det grafik billede som skal ud på printeren.

    public int print(Graphics g, PageFormat pf, int pageIndex)
    throws PrinterException
    {
//hvad for en font skal være den aktuele ?
        g.setFont(fnt);
//vælg farve
        g.setColor(Color.black);
//skriv nu noget text på en bestemt position
        g.drawString(\"Sample Shapes\", 100, 200);
//skift font
        g.setFont(fnt2);
//skriv igen
        g.drawString(\"Sample Shapes\", 100, 230);
//slut
        return Printable.PAGE_EXISTS;
    }

Det du skal ændre for at skrive dine tabeller ud er den sidste klasse.

Du skal altså lave et program der skriver din tabel og kurver ud på de rigtige steder på papiret.

Hvis du kan se din grafik og tabeller på skærmen kan man faktisk også skrive dem direkte ud derfra.
Avatar billede disky Nybegynder
24. april 2001 - 12:18 #32
den skrabede version (dog uden kommentarer)


import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.awt.geom.*;
import java.awt.print.*;

public class SimpleBook extends JPanel implements ActionListener
{   
    final static Color bg = Color.white;
    final static JButton button = new JButton(\"Print\");
   
    public SimpleBook()
    {
        setBackground(bg);
        button.addActionListener(this);
    }
   
    public void actionPerformed(ActionEvent e)
    {
       
        // Get a PrinterJob
        PrinterJob job = PrinterJob.getPrinterJob();
        // Create a landscape page format
        PageFormat landscape = job.defaultPage();
        landscape.setOrientation(PageFormat.LANDSCAPE);
        // Set up a book
        Book bk = new Book();
        bk.append(new PaintCover(), job.defaultPage());
        // Pass the book to the PrinterJob
        job.setPageable(bk);
        // Put up the dialog box
        if (job.printDialog())
        {
            // Print the job if the user didn\'t cancel printing
            try
            { job.print(); }
            catch (Exception exc)
            { /* Handle Exception */ }
        }
    }
   
    public static void main(String[] args)
    {
        WindowListener l = new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {System.exit(0);}
            public void windowClosed(WindowEvent e)
            {System.exit(0);}
        };
        JFrame f = new JFrame();
        f.addWindowListener(l);
        JPanel panel = new JPanel();
        panel.add(button);
        f.getContentPane().add(BorderLayout.SOUTH, panel);
        f.getContentPane().add(BorderLayout.CENTER, new SimpleBook());
        f.setSize(775, 450);
        f.show();
    }
}

class PaintCover implements Printable
{
    Font fnt = new Font(\"Helvetica-Bold\", Font.PLAIN, 12);
    Font fnt2 = new Font(\"Helvetica-Bold\", Font.PLAIN, 48);
   
    public int print(Graphics g, PageFormat pf, int pageIndex)
    throws PrinterException
    {
        g.setFont(fnt);
        g.setColor(Color.black);
        g.drawString(\"Sample Shapes\", 100, 200);
        g.setFont(fnt2);
        g.drawString(\"Sample Shapes\", 100, 230);
        return Printable.PAGE_EXISTS;
    }
}
Avatar billede javaged Nybegynder
24. april 2001 - 12:25 #33
Det er helt perfekt!!!!!!

Jeg har dog lige et sidste lille spørgsmål:

Hvad mener du med: \"Hvis du kan se din grafik og tabeller på skærmen kan man faktisk også skrive dem direkte ud derfra.\"????
Avatar billede disky Nybegynder
24. april 2001 - 12:26 #34
hvis dit program har en grafisk brugergrænseflade hvor det du skal udskrive kan ses på skærmen kan du skrive \'direkte\' derfra :)
Avatar billede javaged Nybegynder
24. april 2001 - 12:31 #35
Jamen det har jeg jo!!! Jeg har (mere eller mindre) alle de oplysninger jeg skal udskrive vist på skærmen, så hvis der er en smart genvej ville det da nok være en fordel...... Hvis det er alt for besværligt, så holder jeg mig nok til det jeg har :-) ..
Avatar billede disky Nybegynder
24. april 2001 - 12:32 #36
jeg kigger lige på det :)

Eller finder et sted hvor du kan læse om det :)
Avatar billede javaged Nybegynder
24. april 2001 - 12:37 #37
Kanon... Men her har du pointene, for de er dine under alle omstændigheder!!!!!
Avatar billede disky Nybegynder
24. april 2001 - 12:38 #38
så på denne her

http://java.sun.com/docs/books/tutorial/2d/printing/index.html

det næst sidste afsnit er om Printing, og under den er der noget med printning af components.

her er eksemplet (det virker faktisk)
import java.awt.geom.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.print.PrinterJob;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

public class ShapesPrint extends JPanel implements Printable, ActionListener {

   
    final static Color bg = Color.white;
    final static Color fg = Color.black;
    final static Color red = Color.red;
    final static Color white = Color.white;

    final static BasicStroke stroke = new BasicStroke(2.0f);
    final static BasicStroke wideStroke = new BasicStroke(8.0f);
   
    final static float dash1[] = {10.0f};
    final static BasicStroke dashed = new BasicStroke(1.0f,
                                                      BasicStroke.CAP_BUTT,
                                                      BasicStroke.JOIN_MITER,
                                                      10.0f, dash1, 0.0f);
    final static JButton button = new JButton(\"Print\");

    public ShapesPrint() {
    setBackground(bg);
        button.addActionListener(this);
    }


  public void actionPerformed(ActionEvent e) {
        if (e.getSource() instanceof JButton) { 
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintable(this);
        if (printJob.printDialog()) {
            try {
                printJob.print(); 
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    drawShapes(g2);
}
public void drawShapes(Graphics2D g2){
        Dimension d = getSize();
        int gridWidth = 400 / 6;
        int gridHeight = 300 / 2;
       
        int rowspacing = 5;
        int columnspacing = 7;
        int rectWidth = gridWidth - columnspacing;
        int rectHeight = gridHeight - rowspacing;

        Color fg3D = Color.lightGray;
   
        g2.setPaint(fg3D);
        g2.drawRect(80, 80, 400 - 1, 310);
        g2.setPaint(fg);
       
        int x = 85;
        int y = 87;

       
        // draw Line2D.Double
        g2.draw(new Line2D.Double(x, y+rectHeight-1, x + rectWidth, y));
        x += gridWidth;
       
        // draw Rectangle2D.Double
        g2.setStroke(stroke);
        g2.draw(new Rectangle2D.Double(x, y, rectWidth, rectHeight));
        x += gridWidth;
       
        // draw  RoundRectangle2D.Double
        g2.setStroke(dashed);
        g2.draw(new RoundRectangle2D.Double(x, y, rectWidth,
                                            rectHeight, 10, 10));
        x += gridWidth;
     
        // draw Arc2D.Double
        g2.setStroke(wideStroke);
        g2.draw(new Arc2D.Double(x, y, rectWidth, rectHeight, 90,
                                135, Arc2D.OPEN));
        x += gridWidth;
                                           
        // draw Ellipse2D.Double
        g2.setStroke(stroke);

        g2.draw(new Ellipse2D.Double(x, y, rectWidth, rectHeight));
        x += gridWidth;
       
        // draw GeneralPath (polygon)
        int x1Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y1Points[] = {y, y+rectHeight, y+rectHeight, y};
        GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
                                              x1Points.length);
        polygon.moveTo(x1Points[0], y1Points[0]);
        for ( int index = 1; index < x1Points.length; index++ ) { 
            polygon.lineTo(x1Points[index], y1Points[index]);
        };
        polygon.closePath();
       
        g2.draw(polygon);
       
        // NEW ROW
        x = 85;
      y += gridHeight;
         
        // draw GeneralPath (polyline)
       
        int x2Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y2Points[] = {y, y+rectHeight, y+rectHeight, y};
        GeneralPath polyline = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
                                              x2Points.length);
        polyline.moveTo (x2Points[0], y2Points[0]);
      for ( int index = 1; index < x2Points.length; index++ ) {
            polyline.lineTo(x2Points[index], y2Points[index]);
        };
       
        g2.draw(polyline);
        x += gridWidth;
       
        // fill Rectangle2D.Double (red)
        g2.setPaint(red);
        g2.fill(new Rectangle2D.Double(x, y, rectWidth, rectHeight));
        g2.setPaint(fg);
        x += gridWidth;
       
        // fill RoundRectangle2D.Double
        GradientPaint redtowhite = new GradientPaint(x,y,red,x+rectWidth, y,white);
        g2.setPaint(redtowhite);
        g2.fill(new RoundRectangle2D.Double(x, y, rectWidth,
                                            rectHeight, 10, 10));
        g2.setPaint(fg);
        x += gridWidth;
       
        // fill Arc2D
        g2.setPaint(red);
        g2.fill(new Arc2D.Double(x, y, rectWidth, rectHeight, 90,
                                135, Arc2D.OPEN));
        g2.setPaint(fg);
        x += gridWidth;
       
        // fill Ellipse2D.Double
        redtowhite = new GradientPaint(x,y,red,x+rectWidth, y,white);
        g2.setPaint(redtowhite);
        g2.fill (new Ellipse2D.Double(x, y, rectWidth, rectHeight));
        g2.setPaint(fg);
        x += gridWidth;
        // fill and stroke GeneralPath
        int x3Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y3Points[] = {y, y+rectHeight, y+rectHeight, y};
        GeneralPath filledPolygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD,
                                                    x3Points.length);
        filledPolygon.moveTo(x3Points[0], y3Points[0]);
        for ( int index = 1; index < x3Points.length; index++ ) {
            filledPolygon.lineTo(x3Points[index], y3Points[index]);
        };
        filledPolygon.closePath();
        g2.setPaint(red);
        g2.fill(filledPolygon);
        g2.setPaint(fg);
        g2.draw(filledPolygon);
    }


    public int print(Graphics g, PageFormat pf, int pi) throws PrinterException {
        if (pi >= 1) {
            return Printable.NO_SUCH_PAGE;
    }
    drawShapes((Graphics2D) g);
        return Printable.PAGE_EXISTS;
    }
 
  public static void main(String s[]){
    WindowListener l = new WindowAdapter() {
        public void windowClosing(WindowEvent e) {System.exit(0);}
        public void windowClosed(WindowEvent e) {System.exit(0);}
    };
    JFrame f = new JFrame();
    f.addWindowListener(l);
    JPanel panel = new JPanel();
    panel.add(button);
    f.getContentPane().add(BorderLayout.SOUTH, panel);
    f.getContentPane().add(BorderLayout.CENTER, new ShapesPrint());
    f.setSize(580, 500);
    f.show();
    }

}
Avatar billede disky Nybegynder
24. april 2001 - 12:44 #39
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