Maison >Java >javaDidacticiel >Comment capturer l'en-tête du tableau dans une image JTable rendue ?

Comment capturer l'en-tête du tableau dans une image JTable rendue ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-07 18:04:02697parcourir

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

Capture de l'en-tête JTable dans l'image rendue

Problème :

Lors de la capture d'une image d'une JTable, l'en-tête de la table ne n'apparaît pas dans l'image résultante.

原因:

L'en-tête JTable ne fait pas partie de la hiérarchie au moment où le panneau est peint sur l'image, car il l'a fait a été supprimé lorsque le JOptionPane a été fermé.

Solution de Kleopatra :

  1. Ajouter p.addNotify(); avant de créer le BufferedImage pour ajouter l'en-tête à la hiérarchie.
  2. Validez le panneau avec p.validate(); pour forcer une nouvelle disposition récursive de tous les conteneurs, en s'assurant qu'ils croient avoir un homologue.

Solution de camickr :

  1. Utilisez ScreenImage. createImage(p); pour capturer l'image, qui gère la suppression et l'ajout d'en-tête.
  2. Si vous utilisez cette méthode, définissez table.setPreferredScrollableViewportSize(table.getPreferredSize()); pour empêcher le JScrollPane d'interférer avec le rendu.

Code mis à jour :

...
// 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();
...

Conclusion :

Les deux solutions restituent efficacement l'en-tête JTable dans l'image résultante. La solution de kleopatra utilise le noyau J2SE, tandis que celle de camickr exploite l'API ScreenImage pour des fonctionnalités supplémentaires. Le choix dépend des exigences spécifiques de l'application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn