>  기사  >  Java  >  렌더링된 JTable 이미지에서 테이블 헤더를 캡처하는 방법은 무엇입니까?

렌더링된 JTable 이미지에서 테이블 헤더를 캡처하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-07 18:04:02660검색

How to Capture the Table Header in a Rendered JTable Image?

렌더링된 이미지에서 JTable 헤더 캡처

문제:

JTable의 이미지를 캡처할 때 테이블 헤더가 결과 이미지에는 나타나지 않습니다.

原因:

JTable 헤더는 패널이 이미지에 그려질 때까지 계층 구조의 일부가 아닙니다. JOptionPane이 닫힐 때 제거되었습니다.

kleopatra의 솔루션:

  1. p.addNotify(); 추가 BufferedImage를 생성하기 전에 헤더를 계층 구조에 다시 추가하세요.
  2. p.validate()로 패널 유효성을 검사하세요. 모든 컨테이너를 재귀적으로 다시 레이아웃하여 피어가 있다고 믿도록 합니다.

camickr의 솔루션:

  1. ScreenImage를 사용하세요. createImage(p); 헤더 제거 및 추가를 처리하는 이미지를 캡처합니다.
  2. 이 방법을 사용하는 경우 table.setPreferredScrollableViewportSize(table.getPreferredSize()); JScrollPane이 렌더링을 방해하는 것을 방지합니다.

업데이트된 코드:

...
// Without having been shown, fake a all-ready
p.addNotify();

// Manually size to preferred
p.setSize(p.getPreferredSize());

// Validate to force recursive doLayout of children
p.validate();

BufferedImage bi = new BufferedImage(p.getWidth(), p.getHeight(), BufferedImage.TYPE_INT_RGB);

Graphics g = bi.createGraphics();
p.paint(g);
g.dispose();
...

결론:

두 솔루션 모두 결과 이미지에 JTable 헤더를 효과적으로 렌더링합니다. kleopatra의 솔루션은 핵심 J2SE를 활용하는 반면, camickr의 솔루션은 추가 기능을 위해 ScreenImage API를 활용합니다. 선택은 애플리케이션의 특정 요구 사항에 따라 달라집니다.

위 내용은 렌더링된 JTable 이미지에서 테이블 헤더를 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.