Rumah  >  Artikel  >  Java  >  Mengapa Pengepala JTable Saya Hilang Apabila Menangkap Imej?

Mengapa Pengepala JTable Saya Hilang Apabila Menangkap Imej?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 07:45:02899semak imbas

Why Does My JTable Header Disappear When Capturing an Image?

Mengapa Pengepala JTable Tiada dari Imej?

Apabila cuba menangkap imej data jadual menggunakan API Java, pengepala JTable mungkin hilang daripada PNG yang ditulis oleh kod itu. Ini kerana pada masa mengecat panel pada imej, pengepala bukan lagi sebahagian daripada hierarki. Untuk menyelesaikan isu ini, kaedah addNotify boleh dipanggil pada pengepala untuk menambahkannya kembali pada hierarki.

Penyelesaian 1: Menggunakan Kelas ScreenImage (Strategi 1)

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);

Penyelesaian 2: Saiz dan Pengesahan Secara Manual (Strategi 2)

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);

Kedua-dua strategi berkesan menjadikan pengepala jadual dalam imej yang ditangkap, sambil mengekalkan saiz jadual seperti yang dimaksudkan. Pilihan antara dua pendekatan bergantung pada keperluan khusus aplikasi.

Atas ialah kandungan terperinci Mengapa Pengepala JTable Saya Hilang Apabila Menangkap Imej?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn