请教两个问题,一个JTable的打印里的一点问题,一个是JTree的节点程序控制打开的问题
请教2个问题:
1、我要打印一个table报表,共包括三部分,一是表上面的一个JLabel标签,也就是表的说明,二是表头,三是table本身。
因为有时表的高度很高,有滚动条,所以不能直接将一个Panel打印出来,那样的话会导致只打印屏幕上显示的部分,躲在滚动条后面的打印不出来,而且会把滚动条都打印出来。
我现在用的方法是分别把上面的三个部分一个个的打印出来。
但打印出来后,打印的表格的表头部分是有背景色,能不能去掉表头部分的背景色,还有,最左边一列是怎么打都没有表格线的?怎么解决了?
打印代码如下:
public void startPrint(JTable table,JLabel tableLabel,Frame f) {
//page.setPrinterResolution(100);
PrintJob pj = Toolkit.getDefaultToolkit().getPrintJob(f,"print test 1", job,page);
if (pj != null) {
RepaintManager manager = RepaintManager.currentManager(table);
manager.setDoubleBufferingEnabled(false);
double scale = 1;
Graphics g2 = pj.getGraphics();
//Graphics2D g2 = (Graphics2D) g; //?????这里也是个问题,这里不能强制转换为g2d,所以后面有方法不能用g2.scale()
Dimension ld = tableLabel.getSize();
System.out.println("ld = " + ld);
Dimension td = table.getSize();
Dimension pd = pj.getPageDimension();
System.out.println("table size = " + td);
System.out.println("page size = " + pd);
g2.setClip(new Rectangle(0, 0, pd.width, pd.height));
// g2.scale(scale,scale);
g2.translate(30,30);
table.print(g2);//这是表本身的内容
table.getTableHeader().print(g2);//这是表头部分
g2.translate(0,-ld.height);
tableLabel.print(g2);//这是表的说明文字,一个label
g2.dispose();
pj.end();
manager.setDoubleBufferingEnabled(true);
}
}
我这是用的1.3的老代码,没有实现Pintable,我采取用实现Printable,把上面这些代码写在重写pint()方法中,结果打印出来只是表头部分的一部分,所以我就用了上面的代码来处理了。
我打印的时候,在打印对话框里,手工选择了横向打印了。
2、JTree的问题:
知道一个JTree中的子节点,可能是三级子节点,也可能是4级,2级等。反正只知道该子节点的名字,(也就是显示的文本),这个时假有什么好办法来用程序控制打开该子节点没有,打开子节点要用到TreePath,难道我要找出该子节点的一个个父节点,然后再一串数组这样构造出一个TreePath才能打开吗?
请问各位老兄,这些问题该如何解决,谢谢!还是有另外的更好的打印解决方案,有更好的代码,谢谢!