Announcement

Collapse
No announcement yet.

BufferedImage ohne paintComponent() in JComponent zeichnen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • BufferedImage ohne paintComponent() in JComponent zeichnen

    hey, ich hab mal wieder ne frage

    ich hab ein problem damit, ein bild in eine jcomponent zu zeichnen ohne dass ich dabei die paintComponent()-methode aufrufe.

    hier etwas genauer:

    ich habe mir zuerst ein bufferedimage erstellt:
    BufferedImage bi = new BufferedImage(600, 450, BufferedImage.TYPE_INT_ARGB);

    um danach in dieses bild zu zeichnen:
    public void renderBild() {
    Graphics2D g = bi.createGraphics();
    g.drawImage(bild, 0, 0, null); //bild wurde bereits an einer anderen stelle definiert
    }

    und jetzt zu meinem problem:
    ich möchte dieses bild direkt in die JComponent klasse zeichnen (die klasse, in der dieser code steht erbt von JComponent)

    das kann ich zum einen mit
    paintComponent(Graphics g2) {
    g2.drawImage(bi, 0, 0, null);
    }
    machen. ich möchte dies aber nicht über die paintComponent-methode machen sonder über die renderbild methode. theoretisch kommt man mit getGraphics() an das grafics-objekt, praktisch nein ;-)
    füge ich die zeilen

    Graphics g2 = getGraphics();
    g2.drawImage(bi, 0, 0, null);

    an das ende der renderbild()-methode ein, gibt es eine NullPointerException.

    anders ausgedrückt: wie komme ich an das Graphics-objekt der paintComponent() methode (getGraphics() funktioniert nicht)?

    ich hoffe ihr könnt mein problem nachvollziehen und könnt mir helfen den code so umzuschreiben, dass ich keine paintComponent() methode brauche ;-)

    schonmal danke,
    mfg root
    Zuletzt editiert von root; 28.08.2008, 15:09.

  • #2
    Der Ansatz ist möglich, wird aber zu Fehlern führen. Der Grundsatz den alle grafischen GUIs habe ist "Jede Komponente muss sich zu jeder Zeit selbst darstellen können". Bei Systemkomponenten wie einem Button ist das kein Problem. Das System kennt diesen und kann diesen zeichnen. Bei individuellen Komponenten wie deinm Bild müssen die so im System "plaziert" werden, dass sie zu jeder Zeit sich mit dem korrekten Inhalt darstellen können. Dafür gibt es die paint Methoden die überschrieben werden können. Dein Bild sollte in einer solchen dargestellt werden. Sonst würde es, wenn das System feststellt es muss neu gezeichnet werden (bsp. wenn ein anderes Fenster deine Anwendung verdeckte) nciht mitgezeichent werden

    Was an getGraphics nicht funktioniert, kann ich nicht nachvollziehen
    Christian

    Comment

    Working...
    X