Java 打印JTable时对齐messageformat

Java 打印JTable时对齐messageformat,java,printing,jtable,messageformat,Java,Printing,Jtable,Messageformat,我现在用这个来打印我的表格,它很有效。但是我对messageformatting的布局不太满意,我希望页脚中有pagenumber和date,日期格式与表的左侧对齐,页面与右侧对齐 我该怎么做?我一直在读一些关于重写PrintTable方法的内容,但从我所读的内容来看,似乎变得相当复杂 希望您能在这个问题上帮助我,谢谢。:) 你可以看看这个。您可以将未经修饰的getPrintable()结果馈送给它。在您的PrinterJob中,自定义print()将对表格进行成像,然后在相同的图形上下文中绘制

我现在用这个来打印我的表格,它很有效。但是我对messageformatting的布局不太满意,我希望页脚中有pagenumber和date,日期格式与表的左侧对齐,页面与右侧对齐

我该怎么做?我一直在读一些关于重写PrintTable方法的内容,但从我所读的内容来看,似乎变得相当复杂

希望您能在这个问题上帮助我,谢谢。:)

你可以看看这个。您可以将未经修饰的
getPrintable()
结果馈送给它。在您的
PrinterJob
中,自定义
print()
将对表格进行成像,然后在相同的图形上下文中绘制页脚。您可以使用上下文的边界
getFontMetrics()
stringWidth()
来确定在何处绘制格式化字符串

附录:以下是在每页右下角打印灰色日期的示例:

public int print(Graphics g, PageFormat pf, int index) throws PrinterException {
    if (index > 0) return NO_SUCH_PAGE;
    String s = new Date().toString();
    Graphics2D g2d = (Graphics2D) g;
    table.getPrintable(
        JTable.PrintMode.NORMAL, null, null).print(g2d, pf, index);
    Rectangle r = g2d.getClipBounds();
    int dw = g2d.getFontMetrics().stringWidth(s);
    int dh = g2d.getFontMetrics().getHeight();
    System.out.println(index + " " + r);
    g2d.setPaint(Color.gray);
    g2d.drawString(s, r.x + r.width - dw, r.y + r.height - dh);
    return Printable.PAGE_EXISTS;
}

附录:虽然这种方法适用于单页表格,但本文介绍了打印。

现在一直在尝试一些东西,但仍然无法使任何东西正常工作。我知道我在这里粘贴的内容可能有点不对劲,但这是尝试各种方法的结果

public class CustomTablePrint implements Printable  {

private static CustomTablePrint INSTANCE = null;

public static CustomTablePrint getInstance() {
    if (INSTANCE == null) {
        INSTANCE = new CustomTablePrint();
    }
    return INSTANCE;
}

private CustomTablePrint() {}


    @Override


    public int print(Graphics graphics, PageFormat pageFormat,  
            int pageIndex) throws PrinterException { 
        if (pageIndex > 0) { 
            return NO_SUCH_PAGE; 
        } 
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrintable(WindowInventory.getInstance().getTable().getPrintable(JTable.PrintMode.FIT_WIDTH, null, null));



        Graphics2D g2d = (Graphics2D)graphics; 
        g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 

        // Draw header/footer here

        String strDate = MessageFormat.format("{0,date,short} {0,time,short}", new Date());
        String printed = "Printed: ";

        graphics.drawString(printed + strDate, 10, 10); 

        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(OrientationRequested.LANDSCAPE);
        job.printDialog(aset);

        return PAGE_EXISTS;         
    } 
}

我一直在努力让它工作,但没有任何运气。有没有可能有人有一个比上面的CustomTablePrintable示例更容易实现的代码示例?
public class CustomTablePrint implements Printable  {

private static CustomTablePrint INSTANCE = null;

public static CustomTablePrint getInstance() {
    if (INSTANCE == null) {
        INSTANCE = new CustomTablePrint();
    }
    return INSTANCE;
}

private CustomTablePrint() {}


    @Override


    public int print(Graphics graphics, PageFormat pageFormat,  
            int pageIndex) throws PrinterException { 
        if (pageIndex > 0) { 
            return NO_SUCH_PAGE; 
        } 
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPrintable(WindowInventory.getInstance().getTable().getPrintable(JTable.PrintMode.FIT_WIDTH, null, null));



        Graphics2D g2d = (Graphics2D)graphics; 
        g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 

        // Draw header/footer here

        String strDate = MessageFormat.format("{0,date,short} {0,time,short}", new Date());
        String printed = "Printed: ";

        graphics.drawString(printed + strDate, 10, 10); 

        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(OrientationRequested.LANDSCAPE);
        job.printDialog(aset);

        return PAGE_EXISTS;         
    } 
}