我正在尝试在打印JTable时创建彩色页眉和页脚。具体来说,我在javax.swing.JTable中查看getPrintable(),但是MessageFormat没有给我指定页眉或页脚颜色的选项。
我该怎么做?
澄清 我有兴趣在打印时设置页眉/页脚。例如,记事本会将文件名作为标题添加到您打印的内容中。
更新 似乎没有标准的方法可以做到这一点,有人可以给我一些解决方法吗?到目前为止发布的唯一答案与打印无关(如发送到打印机,不显示到屏幕)页眉/页脚。
从我的评论中复制:我对打印页眉/页脚感兴趣。例如,当您从记事本打印文档时,它会将文件名附加为标题(或者可能是页脚,我不记得确切)
答案 0 :(得分:3)
我能想到的一个解决方案是使用您自己的可打印:
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一起使用。
您现在可以根据需要绘制页眉和页脚,但也会丢失一些内容:
编辑:我查看了Java Sources,并且有一个私有类TablePrintable可以完成所有工作。您可以在源代码处达到峰值,以查看页眉和页脚的打印方式。然后,您可以将此功能移动到Printable类。
答案 1 :(得分:0)
此代码主要来自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让我知道你是如何继续下去的:)
答案 2 :(得分:0)
这有点偏离左侧字段,但您可以使用iText之类的库来创建PDF文档,然后将其发送到打印机。您将获得对文档外观和表示的更高级别的控制,包括管理表格行如何突破页面边界的能力,并且您将能够非常轻松地设置页眉和页脚
您可以按照以下说明使用Java打印PDF:http://www.juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/
答案 3 :(得分:-1)
很简单:
JTable table = new JTable();
((DefaultTableCellRenderer)table.getTableHeader().getColumnModel().getColumn(4).getHeaderRenderer()).setForeground(Color.ORANGE);