【发布时间】:2015-06-08 13:03:03
【问题描述】:
我正在尝试找到一种方法来以编程方式设置分页符以打印出 JTable。
例如,我有一个大约有 150 行的表格,如下所示:
行号 Data1 Data2 Data3 …等
1 a b c d
1 a b c d
1 a b c d
2 a b c d
2 a b c d
3 a b c d
3 a b c d
3 a b c d
3 a b c d
4 a b c d
5 a b c d
5 a b c d
5 a b c d
……等等 ……等等……等等……等等……等等
我需要想办法在行号更改时开始打印新页面。
我找到了printing selected rows 的方法,到目前为止,我已经修改它以循环遍历我的表,将行添加到临时打印模型,然后在重置临时变量之前调用 print() 方法进行打印。但是,这意味着我可能会调用 print() 10 次,每个行号一次,这是一个不可接受的解决方案。完成当前有缺陷的解决方案的代码如下:
btnPrint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
int wrappingLineNumber = (Integer) table.getValueAt(0, 0);
WrappingSheetsTableModel printModel = new WrappingSheetsTableModel();
for (int i = 0; i < table.getRowCount(); i++) {
if ((Integer)table.getValueAt(i, 0) == wrappingLineNumber) {
System.out.println(table.getValueAt(i, -1));
printModel.addRow((WrappingSheets) table.getValueAt(i, -1));
} else {
wrappingLineNumber = (Integer) table.getValueAt(i, 0);
// if not the same, i.e., value changed
JTable toPrint = new JTable(printModel);
toPrint.setSize(toPrint.getPreferredSize());
JTableHeader tableHeader = toPrint.getTableHeader();
tableHeader.setSize(tableHeader.getPreferredSize());
toPrint.print(JTable.PrintMode.FIT_WIDTH);
printModel.removeAll();
printModel.addRow((WrappingSheets) table.getValueAt(i, -1));
}
}
System.out.println("success printing");
} catch (PrinterException pe) {
System.out.println("printing failed");
pe.printStackTrace();
}
};
});
谁能提供一个更好的解决方案,只要行号列中的值发生变化,就会在新页面上开始打印?
非常感谢您提供的任何帮助!
【问题讨论】:
-
是在一张纸的末尾,一行的一半会打印在一张纸上,另一半会打印在下一张纸上吗?
-
我还没有遇到过这个问题。不,问题是基本 print() 决定何时发生分页符,但在这种情况下,我想根据表中的行号列来控制它。 (因此所有第 1 行的条目都在一个页面上,所有第 2 行的条目都在下一页上,依此类推)。
标签: java swing printing jtable