Bild in JFrame darstellen geht irgendwie nicht

  • Themenstarter BlutigerAnfänger
  • Beginndatum
Status
Nicht offen für weitere Antworten.
B

BlutigerAnfänger

Gast
Ich habe folgendes Problem. Ich wollte einfach ein Bild in einem JFrame anzeigen lassen ohne dafür in den JFrame noch ein JPanel zu verwenden. Habe gegoogelt und so weiter und mit ImageIcon gearbeitet etc.
Ich bin den Code mit anderen Beispielcodes durchgegangen, habe ich habe keine Ahnung was ich noch hinzufügen müsste, damit das Bild endlich angezeigt wird.

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class MyWindow extends JFrame
{
	private String aktBild = null;		//Dateiname des Bildes
	private Image m_aktBild = null;		//Referenz auf das Bild
	
	public MyWindow(String titel)
	{
		super(titel);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setBackground(Color.BLACK);
		getContentPane().setBackground(Color.black);
		setLayout(new FlowLayout());
		bildLaden();
	}
	public void bildLaden()
	{
		FileDialog d = new FileDialog(this,"Bilddatei laden...",FileDialog.LOAD);
		d.setVisible(true);
		aktBild = d.getDirectory();
		aktBild += d.getFile();
		
		if(aktBild == null)
			return;
		ImageIcon tmp = new ImageIcon(aktBild);
		m_aktBild = tmp.getImage();
		repaint();
	}
	void repaint(Graphics g)
	{
		g.drawImage(m_aktBild, 0, 0, this);
		update(g);
	}
}

Hier ist noch die main Klasse, aber die tut nicht viel, nur das Fenster erstellen mit der Grösse und so.

Code:
public class Main
{
	public static void main(String[] args)
	{
		MyWindow fenster = new MyWindow("neues fenster");
		fenster.setSize(800,600);
		fenster.pack();
		fenster.setVisible(true);
	}
}

Sieht hier jemand was nicht gehen kann?
Ich wäre froh um eine Antwort. Danke
 

Wildcard

Top Contributor
Code:
   void repaint(Graphics g)
   {
      g.drawImage(m_aktBild, 0, 0, this);
      update(g);
   }
Du wolltest wahrscheinlich paint überschreiben und nicht eine Methode repaint(Graphics g) einführen, oder?
 
B

BlutigerAnfänger

Gast
Ja, stimmt, habe gerade gmerkt das ich das ja doch machen kann, hat nur das public gefehlt
und die update funktion im rumpf habe ich entfernt.
Aber es geht immer noch nicht

Code:
public void paint(Graphics g)
	{
		g.drawImage(m_aktBild, 0, 0, this);
	}

:(

so sieht jetzt aus. habe auch noch eine repaint funktion in der funktion laden() weggenommen. mit oder ohne, es geht einfach nicht.

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ThurnNTaxisGUI extends JFrame
{
	private String aktBild = null;		//Dateiname des Bildes
	private Image m_aktBild = null;		//Referenz auf das Bild
	
	public ThurnNTaxisGUI(String titel)
	{
		super(titel);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setBackground(Color.BLACK);
		getContentPane().setBackground(Color.black);
		setLayout(new FlowLayout());
		bildLaden();
	}
	public void bildLaden()
	{
		FileDialog d = new FileDialog(this,"Bilddatei laden...",FileDialog.LOAD);
		d.setVisible(true);
		aktBild = d.getDirectory();
		aktBild += d.getFile();
		
		if(aktBild == null)
			return;
		ImageIcon tmp = new ImageIcon(aktBild);
		m_aktBild = tmp.getImage();
	}
	public void paint(Graphics g)
	{
		g.drawImage(m_aktBild, 0, 0, this);
	}
}
 
B

BlutigerAnfänger

Gast
So, habe was rausgefunden. In der main habe ich di pack() funktion vor der setSize hingeknallt.
Das bild läd es. so weit, so gut.

Neues Problem, nur schon wenn ich es grösser mache, anklicke oder sonst was, wird das Bild wieder gelöscht, wie verhindere ich das?
 

JPKI

Top Contributor
Füge dem JFrame einen java.awt.event.ComponentListener hinzu, überschreibe die Methode componentResized(ComponentEvent) und fordere darin mittels repaint(); zum Neuzeichnen auf. Außerdem solltest du nicht paint(Graphics) überschreiben, sondern paintComponent(Graphics) (Nenn einfach paint in paintComponent um :cool: ).
 

Wildcard

Top Contributor
nein, so wird's nicht gemacht. Ist obiges dein kompletter Quellcode?
Füg zur Sicherheit mal noch ein super.paint(g); ein.

@JPKI
ein JFrame hat keine paintComponent.
 

JPKI

Top Contributor
Wieso wird's so nicht gemacht?? Ein ComponentListener wär doch die Lösung ???:L :bahnhof:
Und was die paintComponent in JFrame angeht: :oops: :wink:
Ich war geistig bei JPanel...
 

Wildcard

Top Contributor
JPKI hat gesagt.:
Wieso wird's so nicht gemacht?? Ein ComponentListener wär doch die Lösung ???:L :bahnhof:
AWT weiß bescheid wann neu gezeichnet werden muss und sorgt dafür das paint aufgerufen wird.
Wenn das nicht funktioniert hat es eine Ursache.
Du empfiehlst gerade jemand mit Schüttelfrost die Heizung aufzudrehen.
 

AlArenal

Top Contributor
Wildcard hat gesagt.:
Du empfiehlst gerade jemand mit Schüttelfrost die Heizung aufzudrehen.

Nicht soooo abwegig, wo doch Schüttelfrost dazu dient die Körpertemperatur zu erhöhen. Da hilft indirekt auch eine Erhöhung der Umgebungstemperatur, da eine Verringerung der Temperaturdifferenz zwischen Umgebung und Körper zu einer Verlangsamung der Wärmeabgabe und damit Wärmestau und damit Erwärmung führt ;)

Ach und zum Thema:
Was es mal bräuchte ist eine 10-Punkte-Liste mit DOs und DON'Ts der Swing-Programmierung...
 
B

BlutigerAnfänger

Gast
Ja, das ist mein ganzer code.

Das Fenster erscheint und das Bild auch, wenn ich das Fenster Vergrössere, dann verschwindet das Bild. Wenn ich das Fenster wieder verkleinere erscheint das Bild wieder. Wenn ich es noch mehr verkleinere bleibt es auch. Einfach ab einer gewissen "Spannweite" des Fensters ist das Bild plötzlich weg.

Wenn ich in die überschriebene paint(Graphics g) methode "super.paint(g)" nach "g.drawImage" einfüge, erscheint das Bild gar nicht mehr.

"super.paint(g)" denk ich mal kann ich weglassen. Aber wäre cool wenn ich das Fenster x-beliebig skalieren könnte ohne das manchmal das bild einfach abhaut.

Danke für eure Antworten
 

Wildcard

Top Contributor
Nein, wenn du super.paint(g) aufrufst (was ich dir empfehlen würde) muss es unbedingt die erste Anweisung sein.
Was du beschreibst sollte eigentlich nicht passieren, allerdings bist du auf der sicheren Seite(und es ist auch schöner) wenn du statt direkt in den Frame zu zeichnen ein JPanel oder eine JComponent nimmst und dort paintComponent überschreibst.
 

JPKI

Top Contributor
Finde ich auch. Oder benutz' ein JLabel, in das du das Bild mittels javax.swing.ImageIcon lädst.
 
B

BlutigerAnfänger

Gast
Ich sollte also besser ein JLabel machen, welches das ganze JFrame ausfüllt. Mein Ziel wäre quasi ein Hintergrundbild und darüber verschiedene JPanels an Buttons.


ich habe "super.paint(g);" jetzt vorne hin getan, und es funktioniert, aber das skalierungsproblem ist immer noch vorhanden.

Aber wie gesagt. ich sollte als JFrame nur als FensterRahmen benutzen, richtig?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Bild in JFrame Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
H MouseListener für ein eingefügtes Bild in einem JFrame Java Basics - Anfänger-Themen 7
T Bild in JFrame einfügen Java Basics - Anfänger-Themen 2
M Bild in JFrame wird nicht angezeigt Java Basics - Anfänger-Themen 6
Houly kein bild im JFrame bei Mp3 Wiedergabe Java Basics - Anfänger-Themen 5
G Bild auf Button legen(bzw Icon) und Bild auf JFrame legen? Java Basics - Anfänger-Themen 7
L Ein Bild auf ein JFrame legen. nicht so einfach? =( Java Basics - Anfänger-Themen 11
S Bild anzeigen im JFrame Java Basics - Anfänger-Themen 7
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
M Bild einbinden Java Basics - Anfänger-Themen 7
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
T Bild laden Java Basics - Anfänger-Themen 7
R Bild in GUI Java Basics - Anfänger-Themen 11
D Eclipse Juno zeigt Bild nicht bei Run Java Basics - Anfänger-Themen 3
Kenan89 Bild mit jar öffnen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben