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