Swing Flackern nach Override von paintComponent()

Gemini22

Mitglied
Hi ich bin neu hier und habe eine Frage zu einem Projekt von mir:
Ich möchte ein Spiel erstellen, dass in etwa 2D-Minecraft ohne spieler wird. Die Blöcke sind 5x5 große Quadrate, die natürlich regelmäßig aktualisiert werden sollen. Per Mausklick soll man Blöcke löschen oder Hinzufügen können (,was hier aber noch nicht implementiert ist).
Ich hatte das ganze shon ein Mal programmiert mit einem ImageIcon Array in das ich die Bilder der Blöcke gepackt habe und diese dann gezeichnet. Das war allerdings sehr langsam, das es umd die 22000 Blöcke sind.
Jetzt möchte ich, dass die Blöcke direkt als Bild auf ein JPanel gemalt werden. Das geht soweit auch, aber durch den Override der paintComponent()-Funktion baut sich das Bild jede Sekunde neu von links nach rechts auf. Das sieht kacke aus und ist zu langsam!

Hier der Quelltext:
-Hauptklasse:
Java:
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Anwendung extends JFrame
{
	/**
	 * @author Gemini22
	 * @version 2.0
	 */
	public static void main(String[] args)
	{
		new Anwendung();
	}
	
	JFrame fStart;
	
	MeinPanel mPanel;
	
	JMenuBar bMenu;
	JMenu mMats;
	JMenuItem iLuft;
	JMenuItem iStein;
	
	public Anwendung()
	{
		fStart = new JFrame();
		setLayout(new GridLayout(1,1));
		setTitle("Pixel Universum | Welt");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		final Dimension d = this.getToolkit().getScreenSize();
	    setLocation((int) ((d.getWidth() - 1000) / 2), (int) ((d.getHeight() - 600) / 2));
	    setSize(1000, 600);
	    setResizable(false);
	    
	    bMenu = new JMenuBar();
	    bMenu.add(mMats = new JMenu("Materialien"));
	    mMats.add(iLuft = new JMenuItem("Luft"));
	    mMats.add(iStein = new JMenuItem("Stein"));
	    setJMenuBar(bMenu);
	    
	    mPanel = new MeinPanel(fStart);
	    add(mPanel);
	    
	    setVisible(true);
	    
	    while(true)
	    {
	    	repaint();
	    }
	}
}

-Panelklasse:
Java:
[code=Java]import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class MeinPanel extends JPanel
{
	JFrame kFStart;
	
	Luft luft;
	
	public MeinPanel(JFrame observer)
	{
		kFStart = observer;
		
		luft = new Luft();
	}
	
	@Override
	protected void paintComponent(Graphics g) 
	{
		super.paintComponent(g);
	    
		for(int i = 0; (i*5)<1000; i++)
		{
			for(int j = 0; (j*5)<600; j++)
			{
				luft.zeichne(i*5, j*5, getGraphics(), kFStart);
			}
		}
	}
}

-Klasse des Grundblocks:

Java:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Luft 
{
	private Image img;
	public Luft()
	{
		try 
		{
			img = ImageIO.read(new File("Luft.png"));
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
	}
	
	public void zeichne(int x, int y, Graphics g, ImageObserver observer)
	{
		g.drawImage(img, x, y, observer);
	}
}
Hoffe sehr dass mir jemand sagen kann, wie ich das Bild in "einem Stück" aktualisiere...
Eine andere Lösung die das selbe visuelle Ergebnis liefert wäre auch OK.

Schon mal danke, Gemini22

P.S.: Ja, ich habe schon gegoogelt, aber nix brauchbares gefunden/es nicht kapiert.
 

JCODA

Top Contributor
Java:
 while(true)
        {
            repaint();
        }

Das sollte man nicht machen, lieber eine "ordentliche" Spielschleife -> Google Spielschleife/Game-loop
oder vielleicht erstmal http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html anschauen um das Konzept zu verinnerlichen.
Java:
 @Override
    protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
        
        for(int i = 0; (i*5)<1000; i++)
        {
            for(int j = 0; (j*5)<600; j++)
            {
                //Hier rufst du getGraphics() auf. Du solltest aber das Graphics-Object der paintComponent nehmen.
               // luft.zeichne(i*5, j*5, getGraphics(), kFStart);
               luft.zeichne(i*5, j*5, g, kFStart);
            }
        }
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Flackern trotz DoubleBuffering AWT, Swing, JavaFX & SWT 8
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
S Swing Flackern und ausbrechen bei neuzeichnung AWT, Swing, JavaFX & SWT 7
K AWT flackern trotz buffering AWT, Swing, JavaFX & SWT 4
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
J Flackern wie mit BufferedImage beheben AWT, Swing, JavaFX & SWT 4
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
R Flackern beim JPanel-Übermalen AWT, Swing, JavaFX & SWT 9
P SWT SWT flackern beheben AWT, Swing, JavaFX & SWT 9
D Undecorated JFrame ohne Flackern resizen AWT, Swing, JavaFX & SWT 21
K Flackern trotz Double-Buffering AWT, Swing, JavaFX & SWT 10
sylo Flackern des Mauszeigers bei DND AWT, Swing, JavaFX & SWT 4
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
eQuest Swing Snake repaint() "flackern" AWT, Swing, JavaFX & SWT 13
J Flackern in JEditorPane() AWT, Swing, JavaFX & SWT 14
JRTHEFROG Auflösungsabhängiges Flackern von Bildschirmmasken AWT, Swing, JavaFX & SWT 3
B JFrame flackern durch setSize() AWT, Swing, JavaFX & SWT 8
N Flackern beim neuzeichnen von JPanel AWT, Swing, JavaFX & SWT 19
S Falsche Position, Elemente erscheinen nicht, Flackern AWT, Swing, JavaFX & SWT 6
S animation Flackern trotz doppelpufferung wieso? AWT, Swing, JavaFX & SWT 2
U Flackern verhindern AWT, Swing, JavaFX & SWT 5
J Flackern beim ersten laden von JPanel AWT, Swing, JavaFX & SWT 4
T Labels verschieben / Flackern AWT, Swing, JavaFX & SWT 2
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
H JavaFX Fenstergröße nach maximieren erkennen AWT, Swing, JavaFX & SWT 6
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
berserkerdq2 Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das? AWT, Swing, JavaFX & SWT 12
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
K Textarea aktuallisiert sich nicht, nach Auswahl (Itemlistener) AWT, Swing, JavaFX & SWT 3
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
P kein Scrollen nach affinertransformation bei mouse dragged AWT, Swing, JavaFX & SWT 2
M Wieso verändert sich die Framerate nach erneutem Starten des AnimationTimer? AWT, Swing, JavaFX & SWT 18
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
VPChief Nach abspielen von Sound reagiert das Program nichtmehr AWT, Swing, JavaFX & SWT 9
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
K JavaFX Element in HBOX nach rechts verschieben AWT, Swing, JavaFX & SWT 2
S JavaFX Slider freezt nach Benutzung AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
F JavaFX Zustand der CheckMenuItems behalten nach Programmneustart AWT, Swing, JavaFX & SWT 7
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
Neumi5694 java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
MiMa Java, Maven Projekte nach JavaFX? AWT, Swing, JavaFX & SWT 3
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
MiMa Java Projekt nach JavaFX convertieren AWT, Swing, JavaFX & SWT 4
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
J Java FX Koordinaten NACH Animation setzen, wie? AWT, Swing, JavaFX & SWT 9
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
C Memory Karten nach Paar offen bleiben sonst wieder umdrehen AWT, Swing, JavaFX & SWT 1
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
M JavaFX Methode nach initialize() aufrufen AWT, Swing, JavaFX & SWT 6
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing Seltsame Ausgabe nach ButtonClick AWT, Swing, JavaFX & SWT 1
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
L Graphik nach 100 ms neu laden AWT, Swing, JavaFX & SWT 1
B Doppelte MenuBar -> Nach Minimieren verschwunden AWT, Swing, JavaFX & SWT 3
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20

Ähnliche Java Themen

Neue Themen


Oben