集成类-JTable,Graphics,Printable

时间:2015-02-03 12:53:47

标签: java swing printing jtable graphic

我有一个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);
            }

        }

    });

HeaderImageimplements 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;
}

0 个答案:

没有答案