首頁  >  文章  >  Java  >  如何捕捉渲染的 JTable 影像中的表頭?

如何捕捉渲染的 JTable 影像中的表頭?

Susan Sarandon
Susan Sarandon原創
2024-11-07 18:04:02661瀏覽

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。建立影像(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