【问题标题】:Printing selected Component of JFrame to Printer将选定的 JFrame 组件打印到打印机
【发布时间】:2014-09-18 14:45:50
【问题描述】:

我有this Java 开发的应用程序。

我只想打印一些组件,例如“客户名称”、“表格”和“日期”。

我已通过this example,但我无法正常打印。

【问题讨论】:

  • 你会有问题的。 JTable 在打印时有特殊要求,因为表格可能不适合单个页面...更好的策略可能是使用 JTable 打印 API 的页眉/页脚功能,用于 example
  • 那么打印其他组件呢?
  • 我不会,我会使用页眉/页脚功能将名称和日期打印为文本...
  • 你能举个例子吗?

标签: java swing printing


【解决方案1】:

花几分钟阅读How to use tables/printing,本可以让你产生类似于这个例子的东西......

打印输出...

画面输出...

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class CopyTable {

    public static void main(String[] args) {
        new CopyTable();
    }

    public CopyTable() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JTable table;
        private JTextField customer;
        private JSpinner date;

        public TestPane() {

            DefaultTableModel model = new DefaultTableModel();
            for (int index = 0; index < 26; index++) {
                model.addColumn((char) (index + 65));
            }

            for (int row = 0; row < 26; row++) {
                Vector rowData = new Vector();
                for (int col = 0; col < 26; col++) {
                    rowData.add(row + "x" + col);
                }
                model.addRow(rowData);
            }

            table = new JTable(model);

            Calendar calendar = Calendar.getInstance();
            Date initDate = calendar.getTime();
            Date earliestDate = calendar.getTime();
            calendar.add(Calendar.YEAR, 200);
            Date latestDate = calendar.getTime();
            SpinnerModel spinnerModel = new SpinnerDateModel(
                            initDate,
                            earliestDate,
                            latestDate,
                            Calendar.YEAR);

            date = new JSpinner();
            date.setModel(spinnerModel);
            date.setEditor(new JSpinner.DateEditor(date, "dd/MM/yyyy"));

            customer = new JTextField(10);

            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;

            add(new JLabel("Customer:"), gbc);
            gbc.gridy++;
            add(new JLabel("Date:"), gbc);

            gbc.gridy = 0;
            gbc.gridx++;
            gbc.weightx = 1;
            gbc.anchor = GridBagConstraints.WEST;
            add(customer, gbc);
            gbc.gridy++;
            add(date, gbc);

            gbc.gridx = 0;
            gbc.gridy++;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill = GridBagConstraints.BOTH;
            add(new JScrollPane(table), gbc);
            gbc.gridx = 0;
            gbc.fill = GridBagConstraints.NONE;
            gbc.gridy++;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.anchor = GridBagConstraints.CENTER;
            JButton print = new JButton("Print");
            add(print, gbc);

            print.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    MessageFormat header = new MessageFormat("Customer: " + customer.getText() + " | Date: " + new SimpleDateFormat("dd/MM/yyyy").format(date.getValue()));
                    try {
                        table.print(JTable.PrintMode.FIT_WIDTH, header, null, true, null, true);
                    } catch (PrinterException ex) {
                        ex.printStackTrace();
                    }
                }
            });

        }

    }
}

【讨论】:

  • 这太棒了@MadProgrammer!正在尝试这样的事情。懒得看书了。但现在你让我明白阅读给你所有的答案。 :) 谢谢兄弟。
  • 我不知道“所有的答案”,但它肯定会给你尝试的想法和方向;)
  • 向您求助! :)
猜你喜欢
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2021-11-04
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多