尝试使用 Java API 捕获表格数据的图像时,JTable 标头可能会从 PNG 中消失代码写的。这是因为在将面板绘制到图像时,标题不再是层次结构的一部分。要解决此问题,可以在标头上调用 addNotify 方法,将其添加回层次结构。
import com.tips4java.screenimage.ScreenImage; ... // Get the table JTable table = ti.getTable(); // Create a JScrollPane and add the table to it JScrollPane scroll = new JScrollPane(table); // Add the header to the scroll pane scroll.setColumnHeaderView(table.getTableHeader()); // Set the preferred viewport size so the scroll pane doesn't affect the size table.setPreferredScrollableViewportSize(table.getPreferredSize()); // Create a panel and add the scroll pane to it JPanel p = new JPanel(new BorderLayout()); p.add(scroll, BorderLayout.CENTER); // Create the image from the panel using ScreenImage BufferedImage bi = ScreenImage.createImage(p);
import javax.swing.*; ... // Get the table JTable table = ti.getTable(); // Create a JScrollPane and add the table to it JScrollPane scroll = new JScrollPane(table); // Set the preferred viewport size so the scroll pane doesn't affect the size table.setPreferredScrollableViewportSize(table.getPreferredSize()); // Create a panel and add the scroll pane to it JPanel p = new JPanel(new BorderLayout()); p.add(scroll, BorderLayout.CENTER); // Fake having been shown to force layout p.addNotify(); // Set the panel size to its preferred size p.setSize(p.getPreferredSize()); // Validate to force recursive layout of children p.validate(); // Create the image from the panel BufferedImage bi = new BufferedImage(p.getWidth(), p.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics g = bi.createGraphics(); p.paint(g);
两种策略都能有效地在捕获的图像中渲染表格标题,同时保持表格大小符合预期。两种方法之间的选择取决于应用程序的具体要求。
以上是为什么我的 JTable 标题在捕获图像时消失?的详细内容。更多信息请关注PHP中文网其他相关文章!