Heim  >  Artikel  >  Java  >  Wie erfasst man den Tabellenkopf in einem gerenderten JTable-Bild?

Wie erfasst man den Tabellenkopf in einem gerenderten JTable-Bild?

Susan Sarandon
Susan SarandonOriginal
2024-11-07 18:04:02591Durchsuche

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

Erfassen des JTable-Headers im gerenderten Bild

Problem:

Beim Erfassen eines Bildes einer JTable wird der Tabellenkopf erfasst nicht im resultierenden Bild angezeigt.

原因:

Der JTable-Header ist nicht Teil der Hierarchie, wenn das Panel in das Bild gezeichnet wird, wie dies der Fall war wurde entfernt, als das JOptionPane geschlossen wurde.

Kleopatras Lösung:

  1. P.addNotify(); bevor Sie das BufferedImage erstellen, um den Header wieder zur Hierarchie hinzuzufügen.
  2. Validieren Sie das Panel mit p.validate(); um eine rekursive Neugestaltung aller Container zu erzwingen und sicherzustellen, dass sie glauben, einen Peer zu haben.

camickrs Lösung:

  1. Verwenden Sie ScreenImage. createImage(p); um das Bild zu erfassen, das das Entfernen und Hinzufügen von Headern übernimmt.
  2. Wenn Sie diese Methode verwenden, legen Sie table.setPreferredScrollableViewportSize(table.getPreferredSize()); fest. um zu verhindern, dass das JScrollPane das Rendering stört.

Aktualisierter Code:

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

Fazit:

Beide Lösungen rendern effektiv den JTable-Header im resultierenden Bild. Die Lösung von Kleopatra nutzt den J2SE-Kern, während die Lösung von Camickr die ScreenImage-API für zusätzliche Funktionalität nutzt. Die Wahl hängt von den spezifischen Anforderungen der Anwendung ab.

Das obige ist der detaillierte Inhalt vonWie erfasst man den Tabellenkopf in einem gerenderten JTable-Bild?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn