Here you can find the source of createTableScreenshot(Component component)
private static BufferedImage createTableScreenshot(Component component)
//package com.java2s; //License from project: Open Source License import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.swing.JTable; import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.table.JTableHeader; public class Main { private static BufferedImage createTableScreenshot(Component component) { Component source;/*from w ww . j a va 2s . c o m*/ Dimension sourceSize; JTable table; if (component instanceof JTable) { table = (JTable) component; if ((table.getTableHeader() == null) || !table.getTableHeader().isVisible()) { return createGeneralComponentScreenshot(component); } source = table; sourceSize = table.getSize(); } else if (component instanceof JViewport && ((JViewport) component).getView() instanceof JTable) { JViewport viewport = (JViewport) component; table = (JTable) viewport.getView(); if ((table.getTableHeader() == null) || !table.getTableHeader().isVisible()) { return createGeneralComponentScreenshot(component); } if (table.getSize().height > viewport.getSize().height) { source = viewport; sourceSize = viewport.getSize(); } else { source = table; sourceSize = table.getSize(); } } else { throw new IllegalArgumentException("Component can only be JTable or JViewport holding JTable"); // NOI18N } final JTableHeader tableHeader = table.getTableHeader(); Dimension tableHeaderSize = tableHeader.getSize(); BufferedImage tableScreenshot = new BufferedImage(sourceSize.width, tableHeaderSize.height + sourceSize.height, BufferedImage.TYPE_INT_RGB); final Graphics tableScreenshotGraphics = tableScreenshot.getGraphics(); // Component.printAll has to run in AWT Thread to print component contents correctly if (SwingUtilities.isEventDispatchThread()) { tableHeader.printAll(tableScreenshotGraphics); } else { try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { tableHeader.printAll(tableScreenshotGraphics); } }); } catch (Exception e) { } } tableScreenshotGraphics.translate(0, tableHeaderSize.height); final Component printSrc = source; // Component.printAll has to run in AWT Thread to print component contents correctly if (SwingUtilities.isEventDispatchThread()) { printSrc.printAll(tableScreenshotGraphics); } else { try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { printSrc.printAll(tableScreenshotGraphics); } }); } catch (Exception e) { } } return tableScreenshot; } private static BufferedImage createGeneralComponentScreenshot(Component component) { Component source; Dimension sourceSize; if (component instanceof JViewport) { JViewport viewport = (JViewport) component; Component contents = viewport.getView(); if (contents.getSize().height > viewport.getSize().height) { source = component; sourceSize = component.getSize(); } else { source = contents; sourceSize = contents.getSize(); } } else { source = component; sourceSize = component.getSize(); } BufferedImage componentScreenshot = new BufferedImage(sourceSize.width, sourceSize.height, BufferedImage.TYPE_INT_RGB); Graphics componentScreenshotGraphics = componentScreenshot.getGraphics(); source.printAll(componentScreenshotGraphics); return componentScreenshot; } }