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 중국어 웹사이트의 기타 관련 기사를 참조하세요!