Grafik flimmert bzw. flackert bei Bewegung

Status
Nicht offen für weitere Antworten.

cygnus0815

Mitglied
servus.
ich habe ein kleines javaapplet geschriebn. dies beinhaltet zur zeit lediglich einen button und ein bild. wenn nun auf den button gedrückt wird soll das bild sich nach rechts bewegen. jedoch flackert / flimmert es sehr stark. hab hier schon im forum nach verschiedenen lösungen gesucht aber ich komme nicht wirklich dahinter wie ich das problem lösen kann. ich weiß das es an der repaint-methode liegt, die das bild anscheinend immer wieder neu zeichnet. daher bitte ich euch hier um hilfe. hier der quellcode:

Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.applet.*;
import java.awt.Button;
import javax.swing.Timer;


public class Festplatte extends Applet
{
	//Variablen-----------------
        Image festplatte;
	int hdd_x=100;
	int hdd_y=200;
	private Button hdd_einbauen;
	//--------------------------
	
	public void init()
	{
		this.setLayout(null);
		Color c_background = new Color(255,255,255);
		this.setBackground(c_background);
		this.setVisible(true);
		
		MediaTracker mtracker = new MediaTracker(this); 
                festplatte = getImage(getCodeBase(), "festplatte.jpg"); 
                mtracker.addImage(festplatte, 0); 
                try{mtracker.waitForAll();}
                catch(InterruptedException ex){}
    	
		Button hdd_einbauen = new Button("Festplatte einbauen");
		hdd_einbauen.setBounds(480,200,150,20); 
     	
    	
    	//Buttons damit sie funktionieren------------------
    	hdd_einbauen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//hdd_x=hdd_x+100;
				//repaint();
				festplatte_bewegen fb = new festplatte_bewegen();
				fb.start();
				repaint();
			}
		});
		add(hdd_einbauen);
    	//--------------------------------------------------
    	
   	} //public void init()
   	
        
	public void paint(Graphics g)
	{
		
		g.drawImage(festplatte,hdd_x,hdd_y,this);
                paint(g);
		
	} //public void paint(Graphics g)
	
	
	class festplatte_bewegen extends Thread
	{
		public void run()
		{
			for(int i=0;i<=500;hdd_x++)
			{
				repaint();
		
				try
				{
					festplatte_bewegen.sleep(10);
				}
				catch(InterruptedException ie){}
			}
		}
		
	} //class festplatte_bewegen extends Thread
	
} //public class Festplatte extends Applet

hoffe das mir jemand dabei helfen kann. bin schon am verzweifeln.

MFG
 

cygnus0815

Mitglied
hab es mal mit dem offscreen und update-methode versucht. drücke ich nun den button bewegt sich das bild nach rechts und das ohne zu flackern. jedoch zieht es einen schwarzen streifen hinter sich her. woran liegt das denn? hier mein quelltext:

Code:
//Wie wird eine Festplatte korrekt angeschlossen

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.applet.*;
import java.awt.Button;
import javax.swing.Timer;


public class Festplatte2 extends Applet
{
	//Variablen-----------------
	Image festplatte;
	int hdd_x=100;
	int hdd_y=200;
	private Button hdd_einbauen;
	private Graphics offscreen;
	private Image Buffer;
	
	//--------------------------
	
	public void init()
	{
		this.setLayout(null);
		Color c_background = new Color(255,255,255);
		this.setBackground(c_background);
		this.setVisible(true);
		
		Buffer = createImage(300,228);
		offscreen = Buffer.getGraphics();
		
		MediaTracker mtracker = new MediaTracker(this); 
    	festplatte = getImage(getCodeBase(), "festplatte.jpg"); 
    	mtracker.addImage(festplatte, 0); 
    	try{mtracker.waitForAll();}
    	catch(InterruptedException ex){}
    	
		Button hdd_einbauen = new Button("Festplatte einbauen");
		hdd_einbauen.setBounds(480,200,150,20); 
     	
    	
    	//Buttons damit sie funktionieren------------------
    	hdd_einbauen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				festplatte_bewegen fb = new festplatte_bewegen();
				fb.start();
			}
		});
		add(hdd_einbauen);
    	//--------------------------------------------------
    	
   	} //public void init()
   	
   	/*public void start() 
   	{ 
  		repaint(); 
	}*/
   	

	/*public void paint(Graphics g)
	{
		
		g.drawImage(festplatte,hdd_x,hdd_y,this);
		
	} //public void paint(Graphics g)*/
	
	
	public void update(Graphics g)
	{
		offscreen.setColor(getBackground()); 
  		offscreen.fillRect(100, 200, 300, 228);
  		offscreen.setColor(getForeground());
  		//offscreen.drawString("Text", 20, 50);
  		g.drawImage(festplatte, hdd_x, hdd_y, this);
  		paint(g);
  	}
  	
	
	
	class festplatte_bewegen extends Thread
	{
		public void run()
		{
			for(int i=0;i<=500;hdd_x++)
			{
				repaint();
		
				try
				{
					festplatte_bewegen.sleep(10);
				}
				catch(InterruptedException ie){}
			}
		}
		
	} //class festplatte_bewegen extends Thread
	
} //public class Festplatte extends Applet

wie gesagt das bild flackert nicht mehr zieht aber einen schwarzen streifen hinter sich her

MFG
 

André Uhres

Top Contributor
Code:
...
import javax.swing.*;
public class Festplatte2 extends JApplet {
...
    private JButton hdd_einbauen;
    private JToolBar toolbar;
    private FestplattePanel panel = new FestplattePanel();
    public void init() {
//        this.setLayout(null);
        add(panel, BorderLayout.CENTER);
...
        hdd_einbauen = new JButton("Festplatte einbauen");
//        hdd_einbauen.setBounds(480,200,150,20);
...
//        add(hdd_einbauen);
        toolbar = new JToolBar();
        toolbar.add(hdd_einbauen);
        add(toolbar, BorderLayout.NORTH);
    }
...
    class FestplattePanel extends JPanel{
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if(festplatte != null)
                g.drawImage(festplatte, hdd_x, hdd_y, this);
        }
    }
}

PS: Die Methode update entfernen !
 

cygnus0815

Mitglied
erstma thx. der button geht. dh. er wird angezeigt. klicke ich jedoch darauf passiert nichts. weder das bild erscheint noch findet eine bewegung des bilds statt.

Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.applet.*; 
import javax.swing.*;
 
public class Festplatte3 extends Applet 
{  
    Image festplatte;
	int hdd_x=100;
	int hdd_y=200;
    
    private JButton hdd_einbauen; 
    private JToolBar toolbar; 
    private FestplattePanel panel = new FestplattePanel();
    
     
    public void init() 
    { 
        //this.setLayout(null);
		Color c_background = new Color(255,255,255);
		this.setBackground(c_background);
		this.setVisible(true);
		
        add(panel, BorderLayout.CENTER);
         
        
        MediaTracker mtracker = new MediaTracker(this); 
    	festplatte = getImage(getCodeBase(), "festplatte.jpg"); 
    	mtracker.addImage(festplatte, 0); 
    	try{mtracker.waitForAll();}
    	catch(InterruptedException ex){}
        
        hdd_einbauen = new JButton("Festplatte einbauen"); 
		hdd_einbauen.setBounds(480,200,150,20); 

		hdd_einbauen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				festplatte_bewegen fb = new festplatte_bewegen();
				fb.start();
			}
		});
		 
		//add(hdd_einbauen); 
        toolbar = new JToolBar(); 
        toolbar.add(hdd_einbauen); 
        add(toolbar, BorderLayout.NORTH); 
        
    }//public void init()
    
    
    class festplatte_bewegen extends Thread
	{
		public void run()
		{
			for(int i=0;i<=500;hdd_x++)
			{
				//repaint();
		
				try
				{
					festplatte_bewegen.sleep(10);
				}
				catch(InterruptedException ie){}
			}
		}
		
	} //class festplatte_bewegen extends Thread
	 
    class FestplattePanel extends JPanel
    { 
        public void paintComponent(Graphics g) 
        { 
            super.paintComponent(g); 
            if(festplatte != null) 
            g.drawImage(festplatte, hdd_x, hdd_y, this); 
        } 
    } //class FestplattePanel extends JPanel
}

vielleicht fällt dir ja auf was ich wieder falsch gemacht habe. weiß echt nicht mehr weiter

MFG
 

André Uhres

Top Contributor
1. Applet-->JApplet

2. repaint war auskommentiert:
Code:
   class festplatte_bewegen extends Thread {
        public void run() {
            for(int i=0;i<=500;hdd_x++) {
                repaint();
...

PS: Mit "panel.repaint();" müsste es auch schon gehen, wäre sogar besser.
 

cygnus0815

Mitglied
okay. habe jetz das repaint wieder drin. geb ich nun anstatt "Applet" "JApplet" ein cun compiliere und will dann es mittels html seite laden kommt folgender fehler: "applet festplatte3 notinited" woran liegt das denn? und das bild erscheint immer noch nicht bei betätigung des buttons. hmmm.....komisch....
 

André Uhres

Top Contributor
Nur um zu sehen ob es durch das Laden des Bildes ist, füge bitte folgenden Code ein
und gib dabei den absoluten Pfad zum Bild an:
Code:
...
import javax.imageio.*;
...
//        MediaTracker mtracker = new MediaTracker(this);
//        festplatte = getImage(getCodeBase(), "festplatte.jpg");
//        mtracker.addImage(festplatte, 0);
//        try{mtracker.waitForAll();} catch(InterruptedException ex){}
        try {
            festplatte = ImageIO.read(new File("c:\\festplatte.jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
...
 

cygnus0815

Mitglied
hab es eingefügt. geht leider immer noch nicht. das javaapplet wird anscheinend nicht geladen.
es erscheint unten im browser: Applet Festplatte3 notinited.....schreibe ich anstatt JApplet einfach nur Applet dann gehts zwar aber es erscheint jetz nur noch ein viereckiger grauer kleiner kasten.....lol

Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.applet.*; 
import javax.swing.*;
import javax.imageio.*;
 
public class Festplatte3 extends Applet 
{  
    Image festplatte;
	int hdd_x=100;
	int hdd_y=200;
    
    private JButton hdd_einbauen; 
    private JToolBar toolbar; 
    private FestplattePanel panel = new FestplattePanel();
    
     
    public void init() 
    { 
        //this.setLayout(null);
		Color c_background = new Color(255,255,255);
		this.setBackground(c_background);
		this.setVisible(true);
		
        add(panel, BorderLayout.CENTER);
         
        
        MediaTracker mtracker = new MediaTracker(this); 
    	festplatte = getImage(getCodeBase(), "festplatte.jpg"); 
    	mtracker.addImage(festplatte, 0); 
    	try{mtracker.waitForAll();}
    	catch(InterruptedException ex){}
    	try
    	{
    		festplatte = ImageIO.read(new File("c:\\festplatte.jpg")); 
        } 
        catch (IOException ex) { 
            ex.printStackTrace(); 
        }
        
        hdd_einbauen = new JButton("Festplatte einbauen"); 
		hdd_einbauen.setBounds(480,200,150,20); 

		hdd_einbauen.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				festplatte_bewegen fb = new festplatte_bewegen();
				fb.start();
			}
		});
		 
		//add(hdd_einbauen); 
        toolbar = new JToolBar(); 
        toolbar.add(hdd_einbauen); 
        add(toolbar, BorderLayout.NORTH); 
        
    }//public void init()
    
    
    class festplatte_bewegen extends Thread
	{
		public void run()
		{
			for(int i=0;i<=500;hdd_x++)
			{
				panel.repaint();
		
				try
				{
					festplatte_bewegen.sleep(10);
				}
				catch(InterruptedException ie){}
			}
		}
		
	} //class festplatte_bewegen extends Thread
	 
    class FestplattePanel extends JPanel
    { 
        public void paintComponent(Graphics g) 
        { 
            super.paintComponent(g); 
            if(festplatte != null) 
            g.drawImage(festplatte, hdd_x, hdd_y, this); 
        } 
    } //class FestplattePanel extends JPanel
}
 

L-ectron-X

Gesperrter Benutzer
In deinem Beispiel-Code, welchen du direkt unter meinem Posting geschrieben hast, musst du in der update()-Methode den gesamten Hintergrund des offscreen-Images in der Hintergrundfarbe füllen.
Code:
offscreen.fillRect(0, 0, width, height);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
D Grafik auf ein JPane ausgeben. Java Basics - Anfänger-Themen 6
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
J "Tetris" - Problem bei der Grafik Java Basics - Anfänger-Themen 5
R Grafik in CSV einbinden Java Basics - Anfänger-Themen 2
S Suche aktuelles 2D Grafik Tutorial Java Basics - Anfänger-Themen 5
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
D aufbauende Grafik Java Basics - Anfänger-Themen 13
8 Grafik erstellen Java Basics - Anfänger-Themen 6
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
L Grafik Kollision Detektierung Java Basics - Anfänger-Themen 4
L OOP Grafik in Circle Objekt füllen Java Basics - Anfänger-Themen 3
S Grafik löschen Java Basics - Anfänger-Themen 10
C Grafik einsperren Java Basics - Anfänger-Themen 2
E Quelltext für Grafik verschwindet Java Basics - Anfänger-Themen 9
S Grafik verschwindet Java Basics - Anfänger-Themen 8
O Java Grafik-Programmierung? Java Basics - Anfänger-Themen 16
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
B Grafik zeichnen Java Basics - Anfänger-Themen 25
S Teilstücke aus einer Grafik extrahieren Java Basics - Anfänger-Themen 2
Maxim6394 Grafik rotieren Java Basics - Anfänger-Themen 11
S Probleme mit JMenü und Grafik Java Basics - Anfänger-Themen 2
0 Grafik eine bestimmte Strecke laufen lassen Java Basics - Anfänger-Themen 6
R Hilfe bei erster Grafik Java Basics - Anfänger-Themen 2
A Gui Grafik Java Basics - Anfänger-Themen 4
maddin86 Grafik in .jar einbetten Java Basics - Anfänger-Themen 3
M import einer Grafik aus .jar funktioniert nicht Java Basics - Anfänger-Themen 6
M Grafik export in ein Jar File Java Basics - Anfänger-Themen 5
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
H Diverse Dinge: Unstabile Grafik, Druckt Grafik nicht,Tooltipp verschwindet hinter Grafik Java Basics - Anfänger-Themen 3
H Grafik auf einem JPanel bewegen. Java Basics - Anfänger-Themen 7
F JLabel mit Grafik füllen Java Basics - Anfänger-Themen 3
K Grafik vergrößern/verkleinern Java Basics - Anfänger-Themen 3
F Zugriffsproblem - Funktion von Grafik trennen Java Basics - Anfänger-Themen 6
H HtmlUnit - Grafik speichern Java Basics - Anfänger-Themen 2
R Taste gedrückt = Grafik zeichen ?!? Java Basics - Anfänger-Themen 8
D PNG-Grafik erzeugen Java Basics - Anfänger-Themen 8
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
T Drucken von Listen bestehend aus Grafik und Text (unter swing) Java Basics - Anfänger-Themen 7
A grafik 2d Objekte mit der Maus bewegen Java Basics - Anfänger-Themen 4
A Grafik 2d Objekte farblich ausfüllen Java Basics - Anfänger-Themen 15
C Grafik einbinden Java Basics - Anfänger-Themen 11
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
M Grafik neuzeichnen Java Basics - Anfänger-Themen 8
M Grafik als Resource laden? Java Basics - Anfänger-Themen 2
G erste Schritte in Fenster und Grafik-Programmierung Java Basics - Anfänger-Themen 2
$ Inhalt von JPanel als Grafik? Java Basics - Anfänger-Themen 2
K Grafik beim JFrame oben Links ändern nur wie ? Java Basics - Anfänger-Themen 8
J Grafik Java Basics - Anfänger-Themen 3
K Grafik abspeichern, X11 Fehlermeldung Java Basics - Anfänger-Themen 15
T Zeigerposition auf Grafik messen? Java Basics - Anfänger-Themen 5
M ausm String eine Grafik erstellen Java Basics - Anfänger-Themen 4
F Grafik auf Button passt nicht Java Basics - Anfänger-Themen 1
E Grafik in bestimmtes frame einbinden . Java Basics - Anfänger-Themen 13
F Teilen einer großen Grafik Java Basics - Anfänger-Themen 2
M Grafik erstellen Java Basics - Anfänger-Themen 8
C Clear im Grafik Editor Java Basics - Anfänger-Themen 16
N Grafik formatieren Java Basics - Anfänger-Themen 7
E fehlermeldung bei rekursiver grafik Java Basics - Anfänger-Themen 11
M wie kombiniere ich grafik und swing-komponenten Java Basics - Anfänger-Themen 16
N Java Problem bei Grafik und OoP Java Basics - Anfänger-Themen 7
V Grafik ist nur ganz kurz sichtbar Java Basics - Anfänger-Themen 3
H Streichholzziehen - Grafik? Java Basics - Anfänger-Themen 3
M Grafik auf einem JPanel erneut darstellen Java Basics - Anfänger-Themen 3
S Grafik verschwindet aus JTabbedPane Java Basics - Anfänger-Themen 4
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8
B Image flimmert Java Basics - Anfänger-Themen 4
L drawString flimmert beim Überzeichnen Java Basics - Anfänger-Themen 5
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
N JTable flackert Java Basics - Anfänger-Themen 8
H Rectangle flackert Java Basics - Anfänger-Themen 5
D Mein erstes Programm flackert Java Basics - Anfänger-Themen 5
B Applet flackert bei animiertem gif Java Basics - Anfänger-Themen 7
T Frame flackert ? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben