Отправка информации JFrame на принтер - PullRequest
0 голосов
/ 19 ноября 2011

Приложение для извлечения информации для заполнения формы из базы данных или записи в базу данных из этой формы.Прямо сейчас я могу сделать и то, и другое с использованием netbeans и связью с моим тестовым сервером MySQL, который у меня запущен и работает в данный момент.

Проблема, с которой я столкнулся, заключается в том, что мне нужно распечатать информацию, полученную из базы данных, вформа, похожая на форму, а не на таблицу, чтобы соответствовать рукописным формам, которые мы в настоящее время используем в офисе.Есть ли способ напечатать весь JFrame или все содержимое JFrame так, как они выложены на экране, чтобы пользователь мог их видеть?

Все, что я видел до сих пор, будет печатать либо областьэкран (текстовое поле) или распечатайте его через таблицу.

Приложение будет скомпилировано для Linux и Windows, когда все будет сказано и сделано.

Код:

package Information;

import java.awt.print.*;
import java.awt.*;
import javax.swing.*;

public class HATDB extends javax.swing.JFrame implements Printable {

    JFrame frameToPrint;

    /** Creates new form HATDB */
    public HATDB() {
    }

    @Override
    public int print(Graphics g, PageFormat pf, int page) throws
        PrinterException {

        if (page > 0) { /* We have only one page, and 'page' is zero-based */
            return NO_SUCH_PAGE;
        }

        /* User (0,0) is typically outside the imageable area, so we must
         * translate by the X and Y values in the PageFormat to avoid clipping
         */
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());

        /* Now print the window and its visible contents */
        frameToPrint.printAll(g);

        /* tell the caller that this page is part of the printed document */
        return PAGE_EXISTS;
    }

    public HATDB(JFrame f) {
        frameToPrint = f;
    }

    private void OK_ButtonActionPerformed(java.awt.event.ActionEvent evt) {
        PrinterJob job = PrinterJob.getPrinterJob();
        //job.setPrintable();
        boolean ok = job.printDialog();
        if (ok) {
            try {
                job.print();
            } catch (PrinterException ex) {
                ex.printStackTrace(System.err);
            }
        }

    }

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */

        JFrame f = new JFrame("Print UI Example");
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new HATDB().setVisible(true);
            }
        });
    }
}

1 Ответ

3 голосов
/ 19 ноября 2011

Из API JTable: «J2SE 5 добавляет методы к JTable, чтобы обеспечить удобный доступ к некоторым распространенным потребностям печати. ​​Простые новые методы print() позволяют быстрои легкое добавление поддержки печати в ваше приложение. "Эти методы печатают все строки в вашем TableModel, а не только те строки, которые являются видимыми.

Приложение: вы можете напечатать именно то, что на экране, как показано в Печать содержимогопользовательского интерфейса , или вы можете распечатать все содержимое TableModel, как показано здесь и в Глава 6 Продолжение: расширенная печать .

Приложение: Вот пример, который печатает JPanel с JTree.

import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import javax.swing.*;

/** @see http://stackoverflow.com/questions/8192204 */
public class PrintTest extends JPanel implements Printable {

    public PrintTest() {
        this.setLayout(new GridLayout());
        JTree tree = new JTree();
        this.add(new JScrollPane(tree));
        for (int i = 0; i < tree.getRowCount(); i++) {
            tree.expandRow(i);
        }
    }

    @Override
    public int print(Graphics g, PageFormat pf, int i) throws PrinterException {
        if (i > 0) {
            return NO_SUCH_PAGE;
        }
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());
        PrintTest.this.printAll(g);
        return Printable.PAGE_EXISTS;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                final PrintTest pt = new PrintTest();
                f.add(pt, BorderLayout.CENTER);
                JButton b = new JButton(new AbstractAction("Print") {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        PrinterJob pj = PrinterJob.getPrinterJob();
                        PageFormat pf = pj.pageDialog(pj.defaultPage());
                        pj.setPrintable(pt, pf);
                        if (pj.printDialog()) {
                            try {
                                pj.print();
                            } catch (PrinterException pe) {
                                pe.printStackTrace(System.err);
                            }
                        }
                    }
                });
                JPanel p = new JPanel();
                p.add(b);
                f.add(p, BorderLayout.SOUTH);
                f.pack();
                f.setVisible(true);
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...