Rumah > Java > javaTutorial > teks badan

Mengapa Pengepala JTable Saya Hilang Apabila Menangkap Imej?

Linda Hamilton
Lepaskan: 2024-11-06 07:45:02
asal
911 orang telah melayarinya

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!