Hintergrundbild ohne Repaint

Status
Nicht offen für weitere Antworten.
C

carsten123

Gast
Hallo,

ich möchte gern ein Image als Hintergrund in ein JPanel laden und danach verschiedene Zeichenoperationen(Linien und Punkte) auf dem JPanel ausführen, die dann Schritt für Schritt mittels Aufruf von "repaint()" angezeigt werden sollen.

Da ich aber die Zeichenoperationen und das Laden des Hintergrundbildes beide in der "paintComponent(...)"-Methode mache, wird bei jedem repaint das Hintergrund-Image erneut geladen, d.h. das laden des Hintegrundbildes dauert dann zu lang und er gewünschte Effekt geht verloren und außerdem ist das ja eh höchst unperformant.

Wie könnte ich das umgehen?

carsten123
 
C

carsten123

Gast
da bekomm ich aber eine NullPointerException wenn ich getGraphics() aufrufe
 

Landei

Top Contributor
Moment, ich hole meine GlasKugel 2.4 RC2

Im Ernst: Ohne Code (am besten aufs wesentliche zusammengestrichen) wird dir hier kaum jemand helfen können...
 
C

carsten123

Gast
jop ok, also:


mit diesem Code soll einmalig ein Hintergrundbild geladen werden und es soll sich aus diesem Hintergrundbild eine Linie bewegen, jedoch erhalte ich eine NullPointerException wenn ich getGraphics() im Konstruktor aufrufe

Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test extends JPanel {
    
    private static int j;
    
    private static   File file;
    
    public Test() {
        // hier tritt die NullPointerException auf
	getGraphics().drawImage(java.awt.Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath()), 0,0,this);
    }

    protected void paintComponent(Graphics g){
	super.paintComponent(g);
	g.setColor(Color.red);
	g.drawLine(j, 20, j, 200);
    }
    
    
    public static void main(String[] args){
	
	file = new File("MG2.png");
	JFrame f = new JFrame();

       Test t = new Test();
	f.add(t);

	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setSize(new Dimension(1000,416));
	f.setVisible(true);
	
	
	
	// Linie bewegt sich von links nach rechts
	for(j=1; j<=300; j++){
	    t.repaint();
	    try {
		Thread.sleep(10);
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }
}
[/code]
 

Verjigorm

Top Contributor
:autsch:
wieso lädst du das Bild nicht mit ImageIO.read(file) im Konstruktor
und zeichnest es ganz normal in der paintComponent?
 
G

Guest

Gast
so erst mal vielen Danke!!!!


ja, das mit g.drawImage(img) in der paintMethode im Prinzip ja auch, aber sobald ich die Linie und as Hintergrundbild in der paint-Methode zeichnen lassen, wird immer nur die Linie angezeigt und das Bild erst wenn dei Schleife beendet ist. Man soll es aber die ganze Zeit sehen. Ich denke, dass das Laden des Bilds einggach zu lang dauert? Könnte man das mit ImageIO verhindern? Oder mit BufferedImage? oder eine art 2 Layer darüberlegen?
 

Verjigorm

Top Contributor
wenn du das Bild im Konstruktor lädst, wird das JFrame erst angezeigt, wenn das Bild geladen ist, egal wie gross es ist.

Und deine Linie "rollt" dann einfach drüber...

Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test extends JPanel {
   
    private static int j;
   
    private static   File file;
    private static BufferedImage image = null;
   
    public Test() {
    	try {
			image = ImageIO.read(file);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }

    protected void paintComponent(Graphics g){
   super.paintComponent(g);
   g.setColor(Color.red);
   g.drawImage(image, 0, 0, this);
   g.drawLine(j, 20, j, 200);
    }
   
   
    public static void main(String[] args){
   
   file = new File("Testbild.jpg");
   JFrame f = new JFrame();

       Test t = new Test();
   f.add(t);

   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setSize(new Dimension(1000,416));
   f.setVisible(true);
   
   
   
   // Linie bewegt sich von links nach rechts
   for(j=1; j<=300; j++){
       t.repaint();
       try {
      Thread.sleep(10);
       } catch (Exception e) {
      e.printStackTrace();
       }
   }
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Hintergrundbild einfügen AWT, Swing, JavaFX & SWT 1
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
snipesss Hintergrundbild in JOptionPane.showInputDialog? AWT, Swing, JavaFX & SWT 4
M Hintergrundbild wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
L [Slick2d] Sidescroller/Hintergrundbild sehr langsam AWT, Swing, JavaFX & SWT 3
O Vollbildmodus mit Hintergrundbild AWT, Swing, JavaFX & SWT 8
A jpanel mit gridbaglayout auf hintergrundbild AWT, Swing, JavaFX & SWT 7
Mr. Pink AWT Anzeigeproblem JPanel/Hintergrundbild AWT, Swing, JavaFX & SWT 1
H Swing Hintergrundbild in einen JFrame einfügen AWT, Swing, JavaFX & SWT 7
T Hintergrundbild in JTextPane fixieren AWT, Swing, JavaFX & SWT 2
M Auf einem Hintergrundbild zeichnen AWT, Swing, JavaFX & SWT 2
SexyPenny90 Hintergrundbild mit Swing AWT, Swing, JavaFX & SWT 3
C Eigenes Hintergrundbild einfügen AWT, Swing, JavaFX & SWT 6
P AWT Hintergrundbild in Hauptframe AWT, Swing, JavaFX & SWT 3
J Hintergrundbild für JFrame AWT, Swing, JavaFX & SWT 6
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
F Hintergrundbild im Frame AWT, Swing, JavaFX & SWT 11
H Hintergrundbild in jTextArea AWT, Swing, JavaFX & SWT 4
N AWT Hintergrundbild AWT, Swing, JavaFX & SWT 2
R 2D-Grafik Hintergrundbild für JFrame AWT, Swing, JavaFX & SWT 4
E JButton mit hintergrundbild AWT, Swing, JavaFX & SWT 4
J Swing Hintergrundbild auf einem JFrame AWT, Swing, JavaFX & SWT 7
G Swing Komponenten dem Hintergrundbild des JPanels anpassen? AWT, Swing, JavaFX & SWT 6
B Wie ein Hintergrundbild einfügen??? AWT, Swing, JavaFX & SWT 18
I JPanel mit Hintergrundbild, setOpaque AWT, Swing, JavaFX & SWT 10
C Label Hintergrundbild mit Text AWT, Swing, JavaFX & SWT 6
S Applet - Aerger mit dem Hintergrundbild - JLabel und JTextfield AWT, Swing, JavaFX & SWT 7
F hintergrundbild für jtable als jscrollpane AWT, Swing, JavaFX & SWT 10
J Hintergrundbild des JFrames lässt Textboxen verschwinden? AWT, Swing, JavaFX & SWT 4
H hintergrundbild fixieren AWT, Swing, JavaFX & SWT 3
N Swing Hintergrundbild in einer JScrollpane AWT, Swing, JavaFX & SWT 2
dl85hej Hintergrundbild AWT, Swing, JavaFX & SWT 2
C JPanel mit Hintergrundbild AWT, Swing, JavaFX & SWT 30
U JList mit Hintergrundbild hinterlegen und noch ne Frage AWT, Swing, JavaFX & SWT 4
G Jpanel mit Hintergrundbild füllen? AWT, Swing, JavaFX & SWT 6
G 2x JPanel im JScrollPane (Hintergrundbild in JScrollPane) AWT, Swing, JavaFX & SWT 9
E JPanel mit Hintergrundbild AWT, Swing, JavaFX & SWT 10
hdi panel hintergrundbild falsch implementiert ? AWT, Swing, JavaFX & SWT 9
Kidao Das Hintergrundbild überdeckt die Swing-Komponente AWT, Swing, JavaFX & SWT 5
C JdesktopPane Hintergrundbild AWT, Swing, JavaFX & SWT 6
N Hintergrundbild setzen AWT, Swing, JavaFX & SWT 4
L Frame mit Hintergrundbild? AWT, Swing, JavaFX & SWT 4
S JTextPane mit Hintergrundbild AWT, Swing, JavaFX & SWT 9
K Hintergrundbild an JFrame anpassen AWT, Swing, JavaFX & SWT 9
U bewegtes Hintergrundbild AWT, Swing, JavaFX & SWT 2
G Hintergrundbild auf JFrame oder JPanel AWT, Swing, JavaFX & SWT 3
F Text besser lesbar über Hintergrundbild AWT, Swing, JavaFX & SWT 6
G Hintergrundbild für JPanel AWT, Swing, JavaFX & SWT 4
S Hintergrundbild an Größe des JFrames anpassen AWT, Swing, JavaFX & SWT 4
G Problem mit Menü/Button auf Hintergrundbild AWT, Swing, JavaFX & SWT 10
D JTable - Hintergrundbild in Cell AWT, Swing, JavaFX & SWT 6
M Hintergrundbild und grafischer Button (Transparenz Probleme) AWT, Swing, JavaFX & SWT 3
H Hintergrundbild im Panel verschwindet sofort AWT, Swing, JavaFX & SWT 6
B Problem mit Hintergrundbild AWT, Swing, JavaFX & SWT 12
I Hintergrundbild bei awt container AWT, Swing, JavaFX & SWT 9
E hintergrundbild einfügen!! AWT, Swing, JavaFX & SWT 2
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
Georges456 NetBeans am Mac leider ohne FXML AWT, Swing, JavaFX & SWT 17
A JOptionPane OK ohne Eingabe abfangen AWT, Swing, JavaFX & SWT 10
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
N setOnKeyPressed ohne Scene AWT, Swing, JavaFX & SWT 2
M mvvm umsetzen ohne fxml AWT, Swing, JavaFX & SWT 0
L JavaFX OpenJFX16 App ohne Gradle and Maven? AWT, Swing, JavaFX & SWT 2
izoards Jar startet jedoch ohne Hintergrundfunktion AWT, Swing, JavaFX & SWT 25
L FX-Projekt: fast leere Fensterausgabe ohne Fehlermeldung AWT, Swing, JavaFX & SWT 6
H Timer ohne alles lahmzulegen? AWT, Swing, JavaFX & SWT 2
Z Random Butten erstellen ohne Container AWT, Swing, JavaFX & SWT 15
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
Fiedlerdan Vergleich vieler Strings ohne ellenlange Argumentierten AWT, Swing, JavaFX & SWT 7
L Daten bearbeiten ohne GUI zu blockieren - daten haltung/zurück geben AWT, Swing, JavaFX & SWT 15
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
K JFreeChart nicht ohne BarChartDemo startklar? AWT, Swing, JavaFX & SWT 5
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
M Menü ohne Menübar umsetzen[SWT] AWT, Swing, JavaFX & SWT 8
kilopack15 Buttons ohne Funktion AWT, Swing, JavaFX & SWT 2
S 2D-Grafik User-BufferedImage rotieren im Zentrum und ohne "anpassung" AWT, Swing, JavaFX & SWT 2
Ghostman1711 Java JFormattedTextfield MaskFormatter ohne Leerzeichen AWT, Swing, JavaFX & SWT 3
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3
R JavaFX Wert einer ChoiceBox bekommen ohne Lambdas AWT, Swing, JavaFX & SWT 11
Fishmeaker Shortcuts ohne ALT zuweisen AWT, Swing, JavaFX & SWT 1
O JTable ohne Rahmen printen AWT, Swing, JavaFX & SWT 3
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
N GUI Design ohne GUIDesigner AWT, Swing, JavaFX & SWT 10
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
C JTextfield ohne Enter feuern AWT, Swing, JavaFX & SWT 8
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben