Kein Bild

Status
Nicht offen für weitere Antworten.
A

ArtjomZab

Gast
Das Zeichnen geht bei mir wie folgt. Basisklasse zum Zeichnen ist GraphicSurface. Ich hab das so
realisiert, dass jede Klasse die irgendwas zeichnen möchte GraphicSurface erben muss. GraphicSurface
selbst ist ein JPanel, das heißt, dass auch ein Erbe von GraphicSurface ein JPanel ist.
Die Idee dahinter ist, dass ich ein Erben von GraphicSurface, welcher ja ein JPanel ist, überall in der
GUI über add() einfügen kann. Mein Problem ist, dass dies nur für JFrame funktioniert. JFrame.add(GraphicSurface) geht also, während JPanel.add(GraphicSurface) zB nicht geht. Wieso ist
das so.

Eine Beispielklasse, die GraphicSurface erbt wäre zB Ellipse:
Code:
public class Ellipse extends GraphicSurface
{
      public Ellipse(){}

      //muss render implementieren
      // beim Instanziieren dieser Klasse wird render ausgeführt
     public void render(int w, int h, Graphics2D g2)
     {
           g2.drawEllipse(int w, int h, .....);
     }
}
Code:
package Bib3D;
/*
* GraphicSurface stellt einen minimalen Grafikkontext her.
* Sie erbt JPanel.
* Eine Klasse, welche etwas zeichnen möchte, kann GraphicSurface
* erben. Sie muss dann auch die abstrakte Methode 'render' implementieren,
* welche das Grafikobjekt 'Graphics2D g2' zu Verfügung stellt.
*
* GraphicSurface ist ein JPanel. Damit ist auch jeder Erbe ein
* JPanel und kann somit 'Components' leicht angefügt werden.
*/

import java.awt.*;
import javax.swing.*;

public abstract class GraphicSurface extends JPanel
{   
    /*
     * Einige Qualitätseinstellungen...
     */
    public Object Antialiasing = RenderingHints.VALUE_ANTIALIAS_ON;
    public Object RenderingQuality = RenderingHints.VALUE_RENDER_SPEED;
    public Object TextAntialiasing = RenderingHints.VALUE_TEXT_ANTIALIAS_ON;
   
    public boolean clearSurface = true;
    private boolean clearOnce;
   
    private Toolkit toolkit;
   
    public GraphicSurface()
    {
        this.toolkit = getToolkit();
        this.setBackground(new Color(255,255,255));
    }
   
    public abstract void render(int w, int h, Graphics2D g2);
   
     /*
     * Einige Qualitätseinstellungen...
     */
    public void setAntialiasing(boolean value)
    {
       this. Antialiasing = value
            ? RenderingHints.VALUE_ANTIALIAS_ON
            : RenderingHints.VALUE_ANTIALIAS_OFF;
    }

     /*
     * Einige Qualitätseinstellungen...
     */
    public void setTextAntialiasing(boolean value)
    {
        this.TextAntialiasing = value
            ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON
            : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF;
    }
   
     /*
     * Einige Qualitätseinstellungen...
     */
    public void setRenderingQuality(boolean value)
    {
        this.RenderingQuality = value
            ? RenderingHints.VALUE_RENDER_QUALITY
            : RenderingHints.VALUE_RENDER_SPEED;
    }
   
     /*
     * Liefert ein Graphics2D Objekt auf Basis eines Graphics Objekts.
     */
    public Graphics2D createGraphics2D(int width, int height, Graphics g)
    {

        Graphics2D g2 = (Graphics2D) g;
       
        g2.setBackground(getBackground());
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, Antialiasing);
        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingQuality);
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, TextAntialiasing);

        if (this.clearSurface || this.clearOnce)
        {
            g2.clearRect(0, 0, width, height);
            this.clearOnce = false;
        }

        return g2;
    }

    /*
     * Überführt Graphics int Graphics2D und zeichnet...
     */
    @Override
    public void paint(Graphics g)
    {
        Dimension d = getSize();
       
        Graphics2D g2 = createGraphics2D(d.width, d.height, g);
       
        this.render(d.width, d.height, g2);
       
        g2.dispose();     
    }   
}
Code:
 
S

SlaterB

Gast
das kann ganz einfache Gründe haben, etwas dass das JPanel, zu dem du dein GraphicSurface-Objekt addest nicht in der GUI angezeigt wird oder nur mit sehr wenig Platz/ anderen Layout,

poste bitte ein komplettes Programm mit JFrame und main und ohne ...
und lasse bitte (testweise) solchen Quark wie setRenderingQuality() weg,
es sei denn, das ist das Problem, z.B. wenn es ohne geht

------

verwende zum Zeichnen

public void paintComponent(Graphics g)
{
super.paintComponent(g);
....
}
 

Quaxli

Top Contributor
Ich würde fast vermuten, daß es am fehlenden super-Aufruf liegt. Wenn Du die paint-Methode änderst, wie es SlaterB vorgeschlagen hat, könnte das Dein Problem schon erschlagen.
 
A

ArtjomZab

Gast
Also das mit super geht nicht.

Aber ich versuch das Problem mal zu verallgemeinern.
Diese Klasse ist ein JPanel und zeichnet eine Ellipse auf sich selbst(es ist ja ein JPanel).
Code:
public class Ellipse extends GraphicSurface{
      public Ellipse(){}

      public void render(int w, int h, Graphics2D g2){
           g2.drawEllipse(w,h,g2,...);
      }
}

Ein objekt dieser Klasse wird dann einfach wie eine Component behandelt und sollte eigentlich
überall zu adden sein.

Wenn ich die Ellipse wie folgt adde klappt es auch.
Code:
public class View extends JFrame{
     public View(){
      .....
      .....
      this.add(new Ellipse());
      this.setVisible(true);
     }
}

Wenn ich die Ellipse aber einem JPanel adde wird gar nicht gezeichnet.
Ich hab mal etwas Debugging gemacht und festgestellt, dass paint, dass in GraphicSurface steckt,
beim Instanziieren gar nicht aufgerufen wird, wenn ich wie gesagt zu einem JPanel adde.?!?!

Ich arbeite überwiegend mit Netbeans und erzeuge mit dem integrierten GuiBuilder die Guis.
Wenn ich eine solche Gui habe, die einfach nur wie Oben ein JFrame ohne irgrendwelche JPanels ist
klappt das anfügen einer Ellipse wie oben auch nicht. Erst wenn ich die Gui per Hand mache, in diesem Falle
einen rohen JFrame, dann klappt das adden einer Ellipse.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JOGL kein zugriff auf manche methoden Spiele- und Multimedia-Programmierung 5
C Kein Weiterkommen - Pacman Spiele- und Multimedia-Programmierung 4
Blender3D VlCJ Windows 10 kein Zugriff auf einen im Netzwerk freigegebnen Ordner Spiele- und Multimedia-Programmierung 2
W Minecraft wie Minidumps aktivierren ? (kein Minecraft) Spiele- und Multimedia-Programmierung 0
G Sound-Sampling: Sinuston; kein Fehler, aber auch kein Ton :-( Spiele- und Multimedia-Programmierung 3
F Kein Sound bei javazoom Spiele- und Multimedia-Programmierung 2
N JMF - CaptureDeviceManager findet kein device Spiele- und Multimedia-Programmierung 2
A JMF kein ton Spiele- und Multimedia-Programmierung 4
C auf einem PC kein mp3 unter Java Spiele- und Multimedia-Programmierung 6
G Kein Licht in Box-Objekt Spiele- und Multimedia-Programmierung 2
M Hintergrund ist kein Hintergrund. Spiele- und Multimedia-Programmierung 5
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
Silvascus Bild --> JFrame Hintergrund Spiele- und Multimedia-Programmierung 3
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
windl EXIFF Header in ein Bild schreiben Spiele- und Multimedia-Programmierung 0
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
K Bild von USB-Webcam über JMF Spiele- und Multimedia-Programmierung 2
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
P Bild Pixelweise auslesen Spiele- und Multimedia-Programmierung 13
K Bild berührt Bild Spiele- und Multimedia-Programmierung 29
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
A Bild einer Webcam auffangen Spiele- und Multimedia-Programmierung 20
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
lumo LWJGL - Bild rendern Spiele- und Multimedia-Programmierung 16
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
F Bild im sourcecode Spiele- und Multimedia-Programmierung 32
F Bild einfärben Spiele- und Multimedia-Programmierung 5
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Q Rechteck in BIld suchen Spiele- und Multimedia-Programmierung 8
M Bild kopieren Spiele- und Multimedia-Programmierung 2
S Bild capturen mit direcShow Spiele- und Multimedia-Programmierung 2
B Character Bild links/rechts Spiele- und Multimedia-Programmierung 19
Developer_X Bild Größe einstellen Spiele- und Multimedia-Programmierung 2
ARadauer bild in bild suchen Spiele- und Multimedia-Programmierung 6
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Bild spiegeln Spiele- und Multimedia-Programmierung 7
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
G Palette aus Bild extrahieren Spiele- und Multimedia-Programmierung 5
A Wasserzeichen auf Bild Spiele- und Multimedia-Programmierung 2
G Paintsurface ins Bild konvertieren Spiele- und Multimedia-Programmierung 8
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
F Bild generieren Spiele- und Multimedia-Programmierung 3
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
T Bild als mehrdimesionaler Array Spiele- und Multimedia-Programmierung 4
H Bild von Webcam laden Spiele- und Multimedia-Programmierung 4
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
G start Bild einfrügen in ein Java Spiel Spiele- und Multimedia-Programmierung 7
Quaxli off-topic: HDR-Bild errechnen Spiele- und Multimedia-Programmierung 3
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
G Auf Tastendruck bild verschieben Spiele- und Multimedia-Programmierung 5
O ich hab da ein problem mit nem bild Spiele- und Multimedia-Programmierung 8
C JPEG oder BMP Bild erstellen Spiele- und Multimedia-Programmierung 5
A Bild im Raum darstellen (Texture2D) Spiele- und Multimedia-Programmierung 4
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
N Bild zu zeichnen (drawImage) klappt nur manchmal?? Spiele- und Multimedia-Programmierung 8
P repaint verschiebt das Bild Spiele- und Multimedia-Programmierung 2
S BMP-Bild Pixel für Pixel bearbeiten Spiele- und Multimedia-Programmierung 1
P 2D Bild drehen Spiele- und Multimedia-Programmierung 4
M durchsichtiges Bild nach clearRect Spiele- und Multimedia-Programmierung 8
M RGB-Bild in Graustufen-Bild umwandeln Spiele- und Multimedia-Programmierung 2
M Bild-Spiegelung mit Java! Spiele- und Multimedia-Programmierung 5
S Bild auf Bild = Nichts? Spiele- und Multimedia-Programmierung 3
S Bild in Speicherbild zeichnen = Nichts? Spiele- und Multimedia-Programmierung 3
N Bild im Panel ändern Spiele- und Multimedia-Programmierung 3
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
R Bild drehen Spiele- und Multimedia-Programmierung 24
J Bild generieren Spiele- und Multimedia-Programmierung 5
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2
K Java2d Bild als JPG oder so speichern Spiele- und Multimedia-Programmierung 10

Ähnliche Java Themen

Neue Themen


Oben