Zum Inhalt springen

Großes JTabbedPane auf eine Seite "zwängen"


Empfohlene Beiträge

Geschrieben

Liebe Forengemeinde,

ich habe ein "kleines" Problem mit meiner Druckfunktion, die soweit funzt. ABER: Da mein JTabbedPane sehr groß ist vom Inhalt her, wird jeder Reiter auf 2 Seiten gedruckt. Gibt es eine Möglichkeit (etwa wie in Excel mit Datei -> Seite einrichten -> Skalierung -> Größe X% der Normalgröße verkleinern) die ganze Sache auf eine Seite "zu quetschen"? Fragt bitte nicht warum. Die Kollegen und der Kunde möchten das so. Und da gibt es keine Diskussion!!! Ich bitte um konstruktive Hinweise.

So drucke ich bis jetzt aus:

class druckenListener implements ActionListener

      {

         public void actionPerformed(ActionEvent e)

         {

            pj = PrinterJob.getPrinterJob();

                pj = PrinterJob.getPrinterJob();

                try

                {

                    if (pj.printDialog())

                    {

                        paper = new Paper();

                        paper.setSize(594.936, 841.536); // Set to A4 size.

                        paper.setImageableArea(30, 30, 530, 780);//set margins

                        pageFormat = new PageFormat();

                        pageFormat.setPaper(paper);

                        size = lizenzPane.getSize();

                        hauptpanel.setSize(size);

                        formular = new Formular_Lizenzbestimmung(lizenzPane);

                        pj.setPrintable(formular, pageFormat);

                        pj.print();


                    }

                }

                catch (PrinterException ex)

                {

                    ex.printStackTrace();

                }

         }

      }
class Formular_Lizenzbestimmung implements Printable

{

    private Container container;

    private int index = -1;

    private Rectangle page = new Rectangle(0, 0, 0, 0);


    Formular_Lizenzbestimmung(Container container)

    {

       this.container = container;

    }


    public int print(Graphics g, PageFormat pageFormat, int pageIndex)

    {

        Graphics2D g2d = (Graphics2D) g;

        g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

        int iWidth = (int) pageFormat.getImageableWidth();

        int iHeight = (int) pageFormat.getImageableHeight();

        double scaleFactor = (double) iWidth / (double) container.getWidth();


        while (index < pageIndex)

        {

            if (pageIndex > container.getHeight() * scaleFactor / iHeight)

            {

                return NO_SUCH_PAGE;

            }

            page.y += page.height;

            page.width = (int) (iWidth / scaleFactor);

            page.height = (int) (iHeight / scaleFactor);

            index++;

        }


        g2d.scale(scaleFactor, scaleFactor);


        g2d.translate(0, -page.y);

        g2d.clip(page);

        container.print(g2d);


        return PAGE_EXISTS;

    }

}

Geschrieben

Was genau macht er denn falsch? Bzw. welche teile druckt er auf ne neue Seite?

Weil eigentlich sieht der Quelltext so vollkommen in Ordnung aus. Ich habe ihn auch gerade mal getestet und da funktionierte auch alles reibungslos.

Geschrieben

@ Dragon8

Also das drucken an sich funzt. Nur meine GUI passt nicht auf eine DIN-A4-Seite. Somit wird etwas das letzte Drittel des JTappedPane auf eine neue Seite gedruckt. Ich möchte aber gerne alles auf eine Seite haben.

Geschrieben

Ach so, die passt in der Länge nicht....nagut, da hatte ich jetzt gedacht, dass das so sein soll, da in deinem code ja extra integriert ist, dass er das bei zu großer Höhe auf mehrere Blätter teilt.

Dann wäre spontan meine erste idee nun, entweder nen extra wert für die Höhenskalieren zu berechnen, dann wird das ausgedruckte aber wahrscheinlich verzerrt, oder du berechnest den Wert für die Höhenskalierung, vergleichst den mit der Wert für die Breitenskalierung und nimmst dann den kleinsten für beide.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...