Hi, ich hab gehört dass man getGraphics() eher vermeiden sollte, und lieber nur mit dem generierten Graphics-Objekt in der paint/paintComponent arbeiten sollte... Nun will ich die Performance von meinem GlassPane etwas verbessern, und möglichst alle Berechnungen aus der paintComonent() rausnehmen. U.a. berechne ich dort gerade die Position eines Strings, der gezeichnet wird. Dafür brauche ich aber die FontMetrics. Und jetzt ist meine Frage: Kann ich diesen Teil aus der paintComponent:
rausnehmen, und bei der Initialisierung des Panels das gleiche per getGraphics() vorwegberechnen? Oder anders gesagt: Warum sollte man getGraphics() vermeiden und kann es in diesem Fall tatsächlich zu ungewünschten Ergebnissen führen, wenn ich diese Dinge berechne, bevor die paintComponent() aufgerufen wird? Ändern will ich das wie gesagt damit die paintComponent() schneller durchläuft, das ist ja eine sog. "kritische" Methode.
PS: Das komplette Fenster ist gesperrt wenn die GlassPane angezeigt wird, d.h. es kann nicht passieren dass es zB während der Anzeige resized wird.
Danke
Java:
// calculate positions
g.setFont(msgFont);
FontMetrics m = g.getFontMetrics();
Point msgCenter = ComponentStringLayout.getCenter(msg, m,
width, height);
Point boxPos = new Point(msgCenter.x - 10, msgCenter.y
- m.getAscent() - 10);
int stringWidth = m.stringWidth(msg);
int stringHeight = m.getHeight();
rausnehmen, und bei der Initialisierung des Panels das gleiche per getGraphics() vorwegberechnen? Oder anders gesagt: Warum sollte man getGraphics() vermeiden und kann es in diesem Fall tatsächlich zu ungewünschten Ergebnissen führen, wenn ich diese Dinge berechne, bevor die paintComponent() aufgerufen wird? Ändern will ich das wie gesagt damit die paintComponent() schneller durchläuft, das ist ja eine sog. "kritische" Methode.
PS: Das komplette Fenster ist gesperrt wenn die GlassPane angezeigt wird, d.h. es kann nicht passieren dass es zB während der Anzeige resized wird.
Danke