java - 打印多个 JPanel

标签 java swing printing

我刚刚开始学习使用 Java Swing 进行打印,所以如果这个问题非常幼稚,请耐心等待。

我有一个相当复杂的布局,其中包含多个 JPanel,其中包含其他包含 JLabels 的 JPanel。我想以某种方式在打印机上很好地打印这个。

我知道我可以在代表打印页面的 Graphics2D 对象上“绘画”,但这需要我单独定位每个对象。我希望能够使用 Swing 布局管理器来布局页面上的项目。一种方法是调用 jp.paint(g2d),其中 jp 是 JPanel,g2d 是表示打印页面的 Graphics2D 对象。但是,据我所知,这只会打印屏幕上实际可见的 JPanel。如果 JPanel 不可见,则不会打印它。

那么有没有什么方法可以布局一个(相当复杂的)JPanel 并将其发送到打印机,而无需先在计算机屏幕上显示 JPanel?

还是我完全走错了路?

最佳答案

如何在不可见时打印 JPanel 的精简示例。

public class TestPrinterSmall  {
static class JPanelPrintable extends JPanel implements Printable {
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
        if (page > 0) return Printable.NO_SUCH_PAGE;
        printAll(g);  
        return Printable.PAGE_EXISTS;
    }
};
private static void printIt(Printable p) throws PrinterException {
    PrinterJob job = PrinterJob.getPrinterJob();
    job.setPrintable(p);
    if (job.printDialog()) job.print();
}    
public static void main(String args[]) throws PrinterException {
    final JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setSize(400,400);
    final JPanelPrintable j = new JPanelPrintable(); 
    j.setLayout(new BorderLayout());
    j.add(new JButton("1111"),BorderLayout.NORTH);
    j.add(new JButton("2222"),BorderLayout.SOUTH);            
    f.add(j);f.repaint();f.pack();
    //f.setVisible(true);
    printIt(j);
}
}

输出:

(nothing)

打印机:

enter image description here

关于java - 打印多个 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873317/

相关文章:

java - 混音 Swing/FX : can't dispose a dialog from fxml controller

java - Java 中每个用户的单个应用程序实例

c - GTK 设置默认打印机

javascript:window.print() 不适用于 fancybox

java - 我可以在 OrientDB 上查询期间访问对象的集群名称吗?

java - 即使包含所有必需的 jar 后,斐济图表也会遇到异常

java - IntelliJ - 创建对象时识别类,但方法不会自动完成或编译

java - 如何在java布局中左对齐标签?

使用 wkhtmltopdf 小于 4px @300dpi 的 Css 边框

java - 单击 jbutton 后如何更改其颜色?