Bild zeichnen

Status
Nicht offen für weitere Antworten.

Souljumper

Aktives Mitglied
Ich versteh diese ganze Logik von der dieser beknackten paint-Methode nicht. In allen Biespielen wird die Methode nicht aufgerufen, aber angeblich soll das Bild als hintergrund ausgegeben werden.

Bei meinem code klappt das nicht:
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

import sun.awt.RepaintArea;

public class Login {
		
	public static void main(String[] args) {
		JFrame frame;
		JLabel acctxt;
		JLabel passtxt;
		JTextField acc;
		JPasswordField pass;
		JButton ok;
		JButton abort;
		JPanel panel;
		SpringLayout layout;
		
		acctxt = new JLabel("Account:");
		acc = new JTextField(20);
		passtxt = new JLabel("Passwort:");
		pass = new JPasswordField(20);
		ok = new JButton("Login");
		abort = new JButton("Abbruch");
		
		panel = new JPanel();
		layout = new SpringLayout();
		//Zeile 1 - Account
		layout.putConstraint(SpringLayout.WEST,acctxt,5,SpringLayout.WEST,panel);
		layout.putConstraint(SpringLayout.NORTH,acctxt,5,SpringLayout.NORTH,panel);
		layout.putConstraint(SpringLayout.WEST, acc,13,SpringLayout.EAST, acctxt);
		layout.putConstraint(SpringLayout.NORTH,acc,5,SpringLayout.NORTH,panel);
		
		//Zeile 2 - Passwortfeld
		layout.putConstraint(SpringLayout.WEST,passtxt,5,SpringLayout.WEST,panel);
		layout.putConstraint(SpringLayout.NORTH,passtxt,30,SpringLayout.NORTH,panel);
		layout.putConstraint(SpringLayout.WEST, pass,5,SpringLayout.EAST, passtxt);
		layout.putConstraint(SpringLayout.NORTH,pass,30,SpringLayout.NORTH,panel);
		
		frame = new JFrame("Login");
	
		
		
		//Zeile 3 - Buttons
		layout.putConstraint(SpringLayout.WEST,ok,75,SpringLayout.WEST,panel);
		layout.putConstraint(SpringLayout.NORTH,ok,55,SpringLayout.NORTH,panel);
		layout.putConstraint(SpringLayout.WEST, abort,50,SpringLayout.EAST, ok);
		layout.putConstraint(SpringLayout.NORTH,abort,55,SpringLayout.NORTH,panel);
	
		panel.setLayout(layout);
			
		panel.add(acctxt);
		panel.add(acc);
		panel.add(passtxt);
		panel.add(pass);
		panel.add(ok);
		panel.add(abort);
	
		
		frame.setContentPane(panel);

		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(310,120);
		frame.setVisible(true);

	}
	
	public void paint(Graphics g)
	{
		Image pic;
		pic = Toolkit.getDefaultToolkit().getImage("hintergrund.jpg");
		g.drawImage(pic,0,0,(ImageObserver) this);
	}


}

Wie geht das? bzw. was mach ich falsch?
 

André Uhres

Top Contributor
Das Bild darf nicht in der Methode paint(..) gezeichnet werden. paint(..) ist im Wesentlichen
eine Kombination von paintComponent, paintBorder und paintChildren. Davon ist aber nur paintComponent
für den Hintergrund zuständig.

Die Methode paintComponent(..) wird automatisch aufgerufen wenn die Komponente neu gezeichnet wird,
z.B. wenn sie das erstemal erscheint (durch frame.setVisible(true);), oder wenn sie durch einen anderen Frame versteckt
und dann wieder aufgedeckt wird, oder auch wenn du panel.repaint() aufrufst.
Sie überschreibt die Methode paintComponent(..) der Klasse JComponent: die Klasse in der sie steht
muss also von einem JComponent abgeleitet sein, meistens mit extends JPanel (siehe unten: Klasse Background).
Code:
/*
 * Login.java
 */
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class Login {
    public Login(){
        pic = Toolkit.getDefaultToolkit().getImage("hintergrund.jpg");
        acctxt = new JLabel("Account:");
        acc = new JTextField(20);
        passtxt = new JLabel("Passwort:");
        pass = new JPasswordField(20);
        ok = new JButton("Login");
        abort = new JButton("Abbruch");
        abort.addActionListener(new ActionListener()
           {public void actionPerformed(ActionEvent e){exit();}});
        
        panel = new Background();    // <------------------------------------
        layout = new SpringLayout();
        //Zeile 1 - Account
...
... was hier noch dazwischen gehört hab ich ausgelassen: es bleibt unverändert
...
        frame.setVisible(true);
    }
    private void exit(){frame.dispose();}
    private JFrame frame;
    private JLabel acctxt, passtxt;
    private JTextField acc;
    private JPasswordField pass;
    private JButton ok, abort;
    private SpringLayout layout;
    private Background panel;    // <------------------------------------
    private Image pic;
    public static void main(String[] args){new Login();}
    class Background extends JPanel{    // <------------------------------------
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(pic,0,0,(ImageObserver) this);
        }
    }
}
 

Souljumper

Aktives Mitglied
Kleinigkeit hab ich dann doch noch.

Der Aufbau meines Fensters ist etwas unschön. Es wird erst das Fensteraufgebaut mit Buttons und Eingabefelder und knappe ne halbe Sekunde später wird das Hintergrundbild erst gesetzt.

Wie kann ich erreichen das mein Fenster erst angezeigt wird wenn es komplett fertig aufgebaut ist?
 

Leroy42

Top Contributor
Das Problem ist das Bild selbst. Durch
Code:
 pic = Toolkit.getDefaultToolkit().getImage("hintergrund.jpg");

wird das Laden des Bildes nur initiiert, d.h. wenn die Methode beendet
ist, ist das Bild noch lange nicht fertig geladen.

Hierfür gibt es den MediaTracker. Du packst daß mit getImage() erzeugte,
aber noch nicht vollständig geladene, Bild in einen MediaTracker und rufst hierauf
dann die Methode waitFor auf.

Mit den Stichwörtern MediaTracker und waitFor solltest du in der
Forensuche schnell zu lauffähigem Beispielcode gelangen.
 

André Uhres

Top Contributor
Code:
import java.io.*;
import javax.imageio.*;
...
        try {
            pic = ImageIO.read(new File("hintergrund.jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
 
G

Guest

Gast
André Uhres hat gesagt.:
Code:
import java.io.*;
import javax.imageio.*;
...
        try {
            pic = ImageIO.read(new File("hintergrund.jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

Cool, vielen Dank :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
S Über Bild zeichnen Java Basics - Anfänger-Themen 21
J bild zeichnen Java Basics - Anfänger-Themen 4
G bild in polygon zeichnen Java Basics - Anfänger-Themen 6
Z In Bild-dateien(jpg) zeichnen und arbeiten. Java Basics - Anfänger-Themen 4
B Best Practice Schaltfläche im Bild finden Java Basics - Anfänger-Themen 8
G JLabel <html> mit Bild innerhalb des Textes </html> Java Basics - Anfänger-Themen 4
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
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
M Bild in JFrame Java Basics - Anfänger-Themen 1
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
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
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
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
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
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
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
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