Linie ist Weiß statt Rot

Moin,

ich erzeuge von einem Control einen Screenshot und zeichne darauf eine rote Linie. Die wird aber weis dargestellt.

            instance.paint(img.getGraphics());
            img.getGraphics().setColor(Color.RED);
            img.getGraphics().drawLine(0, 0, 100, 100);

Kann mir jeand zufällig verraten was da schief läuft?

btw: später soll das Bild eigentlich mit einem grauen Schleier bedeckt werden, da es als Hintergrund für weitere Benutzereingaben dient.

hand, mogel

ein tatsächlich nutzbares Testprogramm wäre zuviel der Mühe gewesen?

in JavaDoc der Methode steht, dass besser gleich createGraphics() aufzurufen wäre, was schon alles sagt,

eine lokale Variable zu erzeugen ist fast immer besser als zwei derartige Aufrufe,
eben auch um solche Überraschungen zu vermeiden


    public static void main(String[] args)     {
        final BufferedImage img = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
        Graphics g = img.getGraphics();
        g.setColor(Color.RED);
        g.drawLine(0, 0, 100, 100);

        JFrame f = new JFrame();
        JPanel p = new JPanel() {
                @Override
                protected void paintComponent(Graphics g)   {
                    super.paintComponent(g);
                    g.drawImage(img, 0, 0, null);
                }
            };
        f.add(p);
        f.setSize(400, 400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

}

was zu deinem paint-Aufruf an wer weiß wo VOR der roten Linie zu beachten ist, kann ich nicht sagen

die Farbe heißt übrigens Weiß (oder schlimmstenfalls Weiss) :wink:

Ungestestet tippe ich auf das, was bei SlaterB im Subtext mitschwingt: “img.getGraphics()” könnte jedes mal ein neues Graphics liefern.
System.out.println(System.identityHashCode(img.getGraphics()));
System.out.println(System.identityHashCode(img.getGraphics()));

Besser also

Graphics g = img.createGraphics();
g.drawStuff(...);
g.dispose(); // Kann auch nicht schaden ;-)

mir fällt gerade keine Ausreden ein

das war das Problem - mit Graphics g = img.createGraphics(); funktioniert es

danke, mogel