Java swing-打印JFrames数组只打印第一个索引

Java swing-打印JFrames数组只打印第一个索引,java,swing,jframe,Java,Swing,Jframe,我一直在尝试在swing中打印JFrames数组。下面是处理打印函数的代码,该函数以JFrames数组的形式接收输入。它仅适用于第一个索引,其他索引打印为空白。我使用xps文档格式进行了测试。请您找出为什么数组的其他索引没有打印出来 if (mainframe != null) { frameArray[looping]=mainframe; frameArray[looping].setName("FileName"+ (looping)); } mainframe.set

我一直在尝试在swing中打印JFrames数组。下面是处理打印函数的代码,该函数以JFrames数组的形式接收输入。它仅适用于第一个索引,其他索引打印为空白。我使用xps文档格式进行了测试。请您找出为什么数组的其他索引没有打印出来

if (mainframe != null) {
    frameArray[looping]=mainframe;

    frameArray[looping].setName("FileName"+ (looping));
}

mainframe.setVisible(false);
if(looping==noOfPages-1)
printPages();


您似乎只打印一个帧,getPrintMassFrame().printAll(g);。你要做很多计算来确定框架是否占据了一页以上,如果框架需要打印在多页上,并且一直这样做直到框架用完,这意味着你不想返回任何这样的页面,直到你真的没有说过,我想你最好看看像JasperReportsI这样的东西,每帧只有一页。只需要打印帧数组(每帧一页)。如果没有jaserreports,您可以使用页面索引值访问数组中的每个帧
public void printPages() {
    PrinterJob job = PrinterJob.getPrinterJob();

    boolean ok = job.printDialog();
    if(ok){
        try {
            for (int i=0;i< noOfPages;vch++){

                frameArray[i].setSize(210, 330);
                frameArray[i].getContentPane().setBackground(Color.RED);
                frameArray[i].setLocationRelativeTo(null);
                frameArray[i].setVisible(true);
                setPrintFrameArray(frameArray[i]);
                job.setPrintable(this);
                job.print();
                getPrintMassFrame().setVisible(true);
                getPrintMassFrame().removeAll();
                revalidate();
                getPrintMassFrame().repaint();
                frameArray[i].dispose();
            }
        } catch (PrinterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
}
public int print(Graphics g, PageFormat pf, int page)
        throws PrinterException {
    if (page > 0) {
        return NO_SUCH_PAGE;
    }

    Graphics2D g2d = (Graphics2D) g;
    g2d.translate(pf.getImageableX(), pf.getImageableY() - 55);

    getPrintMassFrame().printAll(g);

    return PAGE_EXISTS;
}