打印页眉和页脚的颜色?

我正在尝试在打印JTable时创建彩色页眉和页脚。 具体来说,我在javax.swing.JTable中查看getPrintable(),但是MessageFormat没有给我指定页眉或页脚颜色的选项。

我该怎么做?

澄清我有兴趣在打印时设置页眉/页脚。 例如,记事本会将文件名作为标题添加到您打印的内容中。

更新似乎没有标准的方法,有人可以给我一些解决方法吗? 到目前为止发布的唯一答案与打印(如发送到打印机,不显示到屏幕)页眉/页脚无关。

复制自我的评论:我对打印页眉/页脚感兴趣。 例如,当您从记事本打印文档时,它会将文件名附加为标题(或者可能是页脚,我不记得确切)

我能想到的一个解决方案是使用您自己的可打印:

public class CustomTablePrintable implements Printable { Printable tablePrintable; public void setTablePrintable(Printable printable) { tablePrintable = printable; } public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex > 0) { return NO_SUCH_PAGE; } tablePrintable.print(graphics, pageFormat, pageIndex); Graphics2D g2d = (Graphics2D)graphics; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); // Draw header/footer here graphics.drawString(header, posx, posy); return PAGE_EXISTS; } } 

当您从JTable调用getPrintable时,将其注入到自定义可打印的新实例中,然后将其与PrinterJob一起使用。

您现在可以根据需要绘制页眉和页脚,但是您也会丢失一些内容:

  • 您不能使用MessageFormat格式化消息。 我相信您可以轻松地将此function添加到您的可打印。
  • 页眉和页脚不会自动定位。 你可以粗略估计这些。

编辑:我看过Java Sources,还有私有类TablePrintable可以完成所有工作。 您可以在源代码处达到峰值,以查看页眉和页脚的打印方式。 然后,您可以将此function移动到Printable类。

此代码主要来自www.java2s.com,其中包含更改以显示如何更改颜色。 这不是最漂亮的解决方案,但希望能帮到你。

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; public class MainClass { public static void main(String args[]) { String rows[][] = { { "A", "a" }, { "B", "b" }, { "E", "e" } }; String headers[] = { "Upper", "Lower" }; JFrame frame = new JFrame("Label Header"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(rows, headers); JScrollPane scrollPane = new JScrollPane(table); Border headerBorder = UIManager.getBorder("TableHeader.cellBorder"); JLabel headerLabel1 = new JLabel(headers[0], JLabel.CENTER); headerLabel1.setBorder(headerBorder); // Here is where the color is changed. headerLabel1.setBackground(new Color(255, 0, 0)); headerLabel1.setForeground(new Color(0, 0, 255)); // End of color change. JLabel headerLabel2 = new JLabel(headers[1], JLabel.CENTER); headerLabel2.setBorder(headerBorder); TableCellRenderer renderer = new JComponentTableCellRenderer(); TableColumnModel columnModel = table.getColumnModel(); TableColumn column0 = columnModel.getColumn(0); TableColumn column1 = columnModel.getColumn(1); column0.setHeaderRenderer(renderer); column0.setHeaderValue(headerLabel1); column1.setHeaderRenderer(renderer); column1.setHeaderValue(headerLabel2); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); } } class JComponentTableCellRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return (JComponent)value; } } 

最重要的一点是:

  // Here is where the color is changed. headerLabel1.setBackground(new Color(255, 0, 0)); headerLabel1.setForeground(new Color(0, 0, 255)); // End of color change. 

HTH让我知道你是如何继续下去的:)

这有点偏离左侧字段,但您可以使用像iText这样的库来创建PDF文档,然后将其发送到打印机。 您将获得对文档外观和表示的更高级别的控制,包括管理表格行如何突破页面边界的能力,并且您将能够非常轻松地设置页眉和页脚。

您可以按照以下说明使用Java打印PDF: http : //www.juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/

这很简单:

 JTable table = new JTable(); ((DefaultTableCellRenderer)table.getTableHeader().getColumnModel().getColumn(4).getHeaderRenderer()).setForeground(Color.ORANGE);