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