我有一个 JTable
内部 JScrollPane
,在 JPanel
. 我需要将表导出为图像。如果table足够小,完全可以在屏幕上看到,它就可以正常工作 JScrollPane
,没有滚动条。但是如果表格太大,需要滚动条左右移动或上下移动,那么在导出的图像中只能看到表格的一部分。我正在使用以下代码
public BufferedImage componentToImage( Component component, boolean visible)
{
if (visible)
{
BufferedImage img = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TRANSLUCENT);
Graphics2D g2d = (Graphics2D) img.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
component.paintAll(g2d);
try
{
File outputfile = new File("C:\\Users\\SciOme Admin\\Desktop\\a.png");
ImageIO.write(img, "png", outputfile);
}
catch (IOException e)
{
e.printStackTrace();
}
return img;
}
}
我经过的地方 JScrollPane
作为组件。我得到附加部分图像,滚动条。但我需要完整的 JTable
.
我不能通过考试 JTable
作为组件,因为我在 JScrollPane
. 一个表只用于显示行标题并使它们始终可见,即使在向右滚动时也是如此。
1条答案
按热度按时间7lrncoxx1#
根据你的形象,我建议你利用
JScrollPane
的rowHeader
支持。呈现JTable
在最好的情况下,这不是一项容易的任务,通常您只需要利用表的内置打印支持,但这并没有考虑到JScrollPane
srowHeader
,并且一个足够大的表可能需要打印到多个页面,这会变得很混乱。在你的情况下,你必须拆开
JScrollPane
并渲染rowHeader
,columnHeader
和主要view
你自己。在“非常”基本的层次上,这将调用计算渲染所有组件所需的总体大小,计算每个组件的偏移位置并绘制它们,类似于这样的。。。
我从一个旧的示例中借用了一些代码,并作为示例实现了基本思想。由于我没有你的代码,任何额外的问题,你将不得不尝试和解决自己(这是很难调试水晶球),但这应该给你帮助开始
从窗口。。。
到图像。。。