AWT Fensterinhalt wird nicht immer angezeigt

raptot

Mitglied
Hallo,
Der Code unten soll ein Diagramm darstellen auf einem Fenster, das heißt dieses JPanel wird in ein JFrame per getContentPane().add() eingefügt (Und zwar in das GraphicInterface). Das Problem ist nun, dass es manchmal funktioniert und manchmal nicht. Ich kann das Programm starten und mein Fenster bleibt leer und wenn ich es dann nochmal starte geht es wieder einwandfrei.... Kann mir jemand helfen? Ich hab das ganze mit dem BufferedImage und so weiter einem Beispiel aus einem Buch entnommen weil es ohne das überhaupt nicht funktioniert. Ausserdem hat der ganze Code hier an sich einwandfrei funktioniert bevor ich ein JPanel draus gemacht hab (Vorher war es ein Frame, aber da ich vorher noch ein anderes Fenster anzeige hab ich versuch alles mit einem JFrame zu realisieren, der also alles verwaltet.)

mfg
Raptor

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;

public class Diagramm extends JPanel{
    private static final long serialVersionUID = 1L;
    private int updaterate, datapoints, timespan,datapointph;
    private BufferedImage image;
    private CoordSys c;
    
    public Diagramm( int updaterate, int timespan, GraphicInterface frame){
        super();
        setSize(frame.getSize().width,frame.getSize().height);
        image = new BufferedImage(frame.getSize().width,frame.getSize().height,BufferedImage.TYPE_INT_ARGB);
        this.updaterate = updaterate;
        this.timespan = timespan;
        datapointph = (60/this.updaterate);
        datapoints =datapointph*this.timespan;
        c = new CoordSys(frame, datapoints);
        setVisible(true);
        drawgrid();
        
    }
    public void paintComponent( Graphics g ) {
        super.paintComponent(g);
        g.drawImage(image,0,0,null);
    }
      private void clear() {
          Graphics g = image.getGraphics();
          g.setColor(Color.WHITE);
          g.fillRect(0,0,this.getSize().width,this.getSize().height);
          g.dispose();
          repaint();    
      }
                
    private void drawgrid(){
        Graphics g = image.getGraphics();          
        g.setColor(Color.BLACK);
    //Hier wird g.drawstring() und g.drawline gezeichnet
        g.dispose();
        repaint();    
    }
    
    private void drawtime(String[][] data){
        Graphics g = image.getGraphics();          
        g.setColor(Color.BLACK);
        
    //Hier wird g.drawstring() und g.drawline gezeichnet
        g.dispose();
        repaint();    
    }
    
    private void drawdata(String[][] data){
        Graphics g = image.getGraphics();          
        g.setColor(Color.BLACK);
         //Hier wird g.drawstring() und g.drawline gezeichnet        
        g.dispose();
        repaint();    
    }
    public void drawnow(String[][] data){
        clear();
        drawgrid();
        drawtime(data);
        drawdata(data);
        }
    }
 
Zurück