# Bilder einbinden, bzw. ändern



## TomKha (7. Feb 2013)

Moinmoin Jungs,
ich habe mir hier gerade ein Hangman Applet geschrieben
Dieses funktioniert auch so wie es soll, aber ich will gerne noch Bilder einbinden.
Ich habe einen Fehlerzähler und wenn dieser =1 soll ein Bild kommen auf dem der Anfang des Galgens zu sehen ist. Fehlerzähler = 2 nächstes Bild Galgen fortgeschritten usw bis 9.
Wie kann ich das machen?
Kann mir da jemand unter die Arme greifen.

```
import java.util.ArrayList;  
import java.io.BufferedReader;
import java.io.FileReader;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

//@author (Marco Johannes)
public class main
{
    static JTextField eingabeFeld;
    static JTextArea ausgabeFeld;
    static JLabel[] label;
    
    static int buchstabenAnzahl;
    static String wort;
    
    static int gemachteFehler = 0;
    static int maxFehler = 9;
    
    public static void main(String[] args)
    {
        String wort = auslesen();
        oberflaecheErstellen(wort);
    }
    
    public static String auslesen()
    {
        ArrayList<String>woerterListe = new ArrayList<String>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader("..\\Woerter.txt"));
            String zeile;
            while ((zeile = reader.readLine()) != null) {
               woerterListe.add(zeile); 
            }
        }
        catch (Exception e) {
            //Ignoriere alle Exceptions
        }   
        String[] woerter = new String[woerterListe.size()];
        woerterListe.toArray(woerter);
        String wort = woerter[(int) (Math.random() * woerter.length)];
        return (wort);
    }
  
    public static void oberflaecheErstellen(String str)
    {
        JFrame fenster = new JFrame ("Fenster");
        
        fenster.setResizable(false);

        fenster.setLayout(new BorderLayout());
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        wort = str;
        buchstabenAnzahl = wort.length();
        
        JPanel panel1 = new JPanel (new GridLayout (0, buchstabenAnzahl));   
        label = new JLabel [buchstabenAnzahl];
        for (int zaehler = 0; zaehler < buchstabenAnzahl; zaehler++) {
            String buchstabe = Character.toString(wort.charAt(zaehler));
            label[zaehler] = new JLabel (buchstabe, JLabel.CENTER);
            label[zaehler].setForeground(Color.black);
            label[zaehler].setVisible(false);
            panel1.add(label[zaehler]);
        } 
        
        //Eingabefeld Ausgabefeld
        eingabeFeld = new JTextField(1);
        fenster.add(eingabeFeld, BorderLayout.SOUTH);
        
        ausgabeFeld = new JTextArea("");
        ausgabeFeld.setEditable(false);
        JScrollPane schiebeBalken = new JScrollPane(ausgabeFeld);
        fenster.getContentPane().add(schiebeBalken);
        fenster.add(ausgabeFeld, BorderLayout.CENTER);
        
        eingabeFeld.addKeyListener (new KeyAdapter() 
        {                                          
            public void keyPressed(KeyEvent tastenDruck) { 
                int tastenCode = tastenDruck.getKeyCode();
                if (tastenCode == KeyEvent.VK_ENTER & (gemachteFehler != maxFehler)) {    
                    String eingabe = eingabeFeld.getText();
                    if (!eingabe.equals("")) {
                        eingabeFeld.setText("");
                    
                        Character buchstabe = eingabe.charAt(0);

                        int[] stellen = pruefen(wort, buchstabe);
                        if (stellen.length != 0) {
                             for (int zaehler = 0; zaehler < stellen.length; zaehler++) {
                               label[stellen[zaehler]].setVisible(true);
                            }     
                        }
                        else {
                            ausgabeFeld.append("\n      " + (gemachteFehler+1) + ". Fehler: '" + Character.toString(buchstabe) + "'");
                            gemachteFehler++;
                        }
                        if (gemachteFehler == maxFehler) {
                            ausgabeFeld.append("\n      Aus und vorbei!\n      Das Wort war: " + wort);
                            eingabeFeld.setEditable(false);
                        } 
                    }
                    else if (eingabe.equals("")) {
                        ausgabeFeld.append("\n      Du musst schon was eingeben!");
                    }
                }
            }
        }   
        );
    
        fenster.add(panel1, BorderLayout.NORTH);
        fenster.pack();
        fenster.setSize(800, 600);
        fenster.setVisible(true);
    }  
    
    public static int[] pruefen(String wort, char buchstabe)
    {
        ArrayList<Integer> stellen = new ArrayList<Integer>();
        for (int zaehler = 0; zaehler < wort.length(); zaehler++) {
            if (wort.charAt(zaehler) == buchstabe) {
                stellen.add(zaehler);
            }        
        }
        int[] rueckgabe = new int[stellen.size()];
        for (int zaehler = 0; zaehler < stellen.size(); zaehler++) {
            rueckgabe[zaehler] = stellen.get(zaehler);
        }
        return (rueckgabe);
    }
}
```


----------



## Evil-Devil (7. Feb 2013)

Du könntest neun Einzelbilder des Hangman machen und je nach Fortschritt eines der neun Bilder anzeigen.


----------



## TomKha (7. Feb 2013)

Ja das habe ich vor, allerdings weiß ich nicht wie ich das Codemäßig auf die kette bekommen kann^^
Gibt es einen kurzen Befehl mit dem ich einfach ein Bild an eine bestimmte Position setzen kann.


----------



## Evil-Devil (7. Feb 2013)

Ja, sobald du ein Graphics Objekt hast kannst du damit Bilder zeichnen. Und deine Bilder legst du am einfachsten in einem Array ab.
Auch empfehle ich dir sich folgendes Tutorial anzuschauen:
http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html


----------



## TomKha (8. Feb 2013)

das heißt es sollte ungefähr so aussehen?


```
public void paint(Graphics g)
{
Image img;
img = getToolkit().getImage("..Hangman.png");
g.drawImage(img,500,100,this);
}
```


----------



## L-ectron-X (8. Feb 2013)

Nein. Niemals Bilder in der paint()- oder paintComponent()-Methode laden!
Niemals die paint()-Methode in Swing überschreiben.
Vergiss Toolkit zum Laden von Bildern in Swing.

Grafikdateien laden und anzeigen ? Byte-Welt Wiki


----------

