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);
どちらの戦略でも、テーブルのサイズを意図したとおりに保ちながら、キャプチャされたイメージにテーブル ヘッダーを効果的にレンダリングします。 2 つのアプローチのどちらを選択するかは、アプリケーションの特定の要件によって異なります。
以上が画像をキャプチャすると JTable ヘッダーが消えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。