我有一个JTable,我想要捕获以后打印的用户输入。打印时,我有一个图像,我想成为标题,另一个是页脚。我试过这个例子here,但它是在两张单独的纸上打印的。我希望它打印在一张纸而不是两张纸上。这是我一直在使用的代码 - 只有这部分是必要的:
print.addActionListener((ActionEvent evt) -> {
if (evt.getSource().equals(print)) {
PrinterJob pj = PrinterJob.getPrinterJob();
Book bk = new Book();
bk.append(new HeaderImage(), pj.defaultPage());
bk.append(table.getPrintable(JTable.PrintMode.NORMAL, null, null), pj.defaultPage());
pj.setPageable(bk);
try {
pj.print();
} catch (PrinterException ex) {
Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
HeaderImage
班implements Printable
。问题是页眉图像打印在第一页上,而表格打印在第二页上 - 我想在一页上打印它们!
我找到了一个很好的实现我想要的here;但现在面临的挑战是我无法整合这些东西。让我按照我希望的方式设置它。假设我们有一个主类如下:
mainClass{
JTable table = new JTable();
}
现在我的PrintTableClass
implements Printable
如下:
public class PrintTable implements Printable {
protected int x, y, width;
protected int orientation;
protected BufferedImage image;
{
try{
image=ImageIO.read(MainClass.class.getResourceAsStream("images/header.PNG"));}
catch(IOException ex){
ex.printStackTrace();
}
}
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
x = (int) pageFormat.getImageableX();
y = (int) pageFormat.getImageableY();
int ih = image.getHeight();
int iw = image.getWidth();
graphics.drawImage(image, x, y, width, ih, null);
return Printable.PAGE_EXISTS;
}
}
现在我的问题是:是否有办法在table
课程中使用PrintTable
,就像我们使用image
一样,以便在我成为时打印我只会写这段代码 - book.append(new PrintTable(),printerJob.getDefaultPage)
- 这个表格和标题将打印在一页上。
我很欣赏有关整合这些东西的任何想法。
是否有类似的东西或方法让它以这种方式运作?
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
graphics.drawTable(table, x, y, width, ih, null);//check this line.
return Printable.PAGE_EXISTS;
}