# Hilfe bekomme den IF befehl nicht hin



## Blitzmaus (18. Nov 2009)

hi,

ich bin grade dabei ein kleinen java game zu bauen aber habe folgendes problem:

ich muß einen if befehl bauen das wenn ein button geklickt wird ein neues bild im panel ladet. ich habe es von aufbau so wie bei den Text if befehlen probiert geht aber leider nicht 

also mein versuchter Code lautet:

if (panel.equals(g.drawImage(img[0],0,0,breite,hoehe,this)))
   g.drawImage(img[1],0,0,breite,hoehe,this);

Bitte um hilfe danke für schnelle antwort im vorraus.

Gruß

Blitzmaus


----------



## Steev (18. Nov 2009)

Erst einmal würde mich interessieren, wo dein Code steht (welche Methode) und wo dein Graphics-Objekt herkommt.

Ich würde das mit dem Panel so machen, dass ich mir in einer Referenzvariable eine Referenz auf das aktuelle Bild speichere. Wenn auf den Button geklickt wird, dann wird nur die Referenz auf ein anderes Bild gesetzt. Der Panel macht nichts anderes, als stur das zu Zeichnen, was er bekommt.


----------



## javimka (18. Nov 2009)

g.drawImage gibt ein boolean Wert zurück. Ich kann mir kaum vorstellen, dass dein panel ebenfalls ein boolean ist und nehme deswegen streng an, dass diese Auswertung immer zu "false" führen wird.


----------



## Blitzmaus (18. Nov 2009)

ok dann schicke ich mal den code, habe nur die ausschnitte vom den Bildern genommen da der Code hier nicht rein passt.^^

nur vorab gesagt ich bin der totale java neuling und muß das in der schule bis morgen abgeben daher habe ich auch keine strings gemacht da ich sie nicht hinbekommen habe.

Die Striche habe ich gemacht damit Sie den befehl schneller finden.


  public NewFrame() {
        initComponents();

        img = new Image[8];
        String imgpath="c:/bilder/";
        // Toolkit das Funktionen zum Laden von Bilder zur Verfügung
        breite = panel.getWidth();
        hoehe = panel.getHeight();
        Toolkit kit = getToolkit();
        // Startbild nur Galgen
        img[0] = kit.getImage(imgpath+"galgen0.jpg");
        panel.prepareImage(img[0],breite,hoehe, this);
        // Bild nach erstem Fehler
        img[1] = kit.getImage(imgpath+"galgen1.jpg");
        panel.prepareImage(img[1],breite,hoehe, this);
        // Bild nach zweitem Fehler
        img[2] = kit.getImage(imgpath+"galgen2.jpg");
        panel.prepareImage(img[2],breite,hoehe, this);
        // Bild nach dritten Fehler
        img[3] = kit.getImage(imgpath+"galgen3.jpg");
        panel.prepareImage(img[3],breite,hoehe, this);
        // Bild nach viertem Fehler
        img[4] = kit.getImage(imgpath+"galgen4.jpg");
        panel.prepareImage(img[4],breite,hoehe, this);
        // Bild nachh fünften Fehler
        img[5] = kit.getImage(imgpath+"galgen5.jpg");
        panel.prepareImage(img[5],breite,hoehe, this);
        // Bild nach sechstem Fehler
        img[6] = kit.getImage(imgpath+"galgen6.jpg");
        panel.prepareImage(img[6],breite,hoehe, this);
        // Bild Verloren
        img[7] = kit.getImage(imgpath+"galgen7.jpg");
        panel.prepareImage(img[7],breite,hoehe, this);

        g = panel.getGraphics();
    }

....

    private void bStartActionPerformed(java.awt.event.ActionEvent evt) {                                       

        textfeld.setText("****");
        g = panel.getGraphics();
        g.drawImage(img[0],0,0,breite,hoehe,this);

.....

_________________________________________________________________
    private void bQMouseClicked(java.awt.event.MouseEvent evt) {
if (panel.equals(g.drawImage(img[0],0,0,breite,hoehe,this)))
   g.drawImage(img[1],0,0,breite,hoehe,this);
    }
__________________________________________________________________

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewFrame().setVisible(true);
            }
        });


----------



## javimka (18. Nov 2009)

Dieser Code ist für mich ein bisschen schwierig nachzuvollziehen.

Was genau soll die Funktion bQMouseClicked bezwecken?
Wo ist nun der Button, der geklickt wird?
Aufrufe wie [c]g = panel.getGraphics();[/c] musst du unbedingt vermeiden!!! Das ist gleicht einem Schwerverbrechen.

//EDIT:
Setz in Zukunft bitte [java) ... [/code] Tags rund um deinen Code, so wird es leserlicher.


----------



## Blitzmaus (18. Nov 2009)

Also es ist soll ein kleines Hangman darstellen da ich aber mit sternchen setzen und so klar kam habe ich mich entschieden das ich einfach nur ein Word nehme und das Ebend für if befehle erfrage.

Die buttons sind sogesehn das Alphabet.

die buchstaben die im wort vorkommen haben folgenden befehl:


```
private void bWMouseClicked(java.awt.event.MouseEvent evt) {                                
    if (textfeld.getText ().equals("****"))
    textfeld.setText("W***");
    if (textfeld.getText ().equals("*A**"))
    textfeld.setText("WA**");
    if (textfeld.getText ().equals("*AL*"))
    textfeld.setText("WAL*");
    if (textfeld.getText ().equals("*ALD"))
    textfeld.setText("WALD");
    if (textfeld.getText ().equals("**L*"))
    textfeld.setText("W*L*");
    if (textfeld.getText ().equals("*A*D"))
    textfeld.setText("WA*D");
    if (textfeld.getText ().equals("**LD"))
    textfeld.setText("W*LD");
    if (textfeld.getText ().equals("***D"))
    textfeld.setText("**LD");
    }
```

und jetzt brauche ich für die anderen buchstaben einen fehl das sich der Galgen weiter aufbaut bis zum verloren und den galgen habe ich in 8 jpegs gemacht die bei einer falschen Taste weiter gehen sollen.

und jetzt fehlt mir halt der befehl das das bild sich dann ändert.

wo ich den beschriebenen befehl probiert habe:


```
private void bQMouseClicked(java.awt.event.MouseEvent evt) {
if (panel.equals(g.drawImage(img[0],0,0,breite,hoehe,this)))
   g.drawImage(img[1],0,0,breite,hoehe,this);
    }
```


----------



## Blitzmaus (18. Nov 2009)

ach sonst klappt auch alles das das wort ich von **** in WALD ändert, nur das bild ändern ebend nicht


----------



## Steev (18. Nov 2009)

Dein einziges Problem ist eigendlich, dass du dir ein Graphics-Objekt speicherst und dieses dann mitführst und darüber zeichnest. Das funktioniert nicht.

Überschreibe dir lieber die "paint"-Methode deines Panels mache dir eine globale Variable mit dem aktuellen Bild und setzte auf deinem Button immer nur dieses Bild um.

[Java]ublic class SwitchImage extends JPanel implements Runnable {

    private BufferedImage currentImage = null;

    public SwitchImage() {
        new Thread(this).start();
    }

    @Override
    public void run() {
        while (true) {
            repaint();
            try {
                Thread.sleep(60);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        if (currentImage != null)
            g2.drawImage(currentImage, 0, 0, this);
    }

    public BufferedImage getCurrentImage() {
        return currentImage;
    }

    public void setCurrentImage(BufferedImage currentImage) {
        this.currentImage = currentImage;
    }
}[/Java]


----------



## Blitzmaus (18. Nov 2009)

@Steev

das verstehe ich leider grade nicht wie ich es einbinden soll und wie ich dann sagen kann wenn bild a angezeigt ist lade bild b usw. bis zum Verloren Bild (8te Bild)


----------



## javimka (18. Nov 2009)

Es ist eigentlich gar nicht unbedingt notwendig, alle 60ms das ganz neu zu zeichnen. Du kannst auch einfach bei setCurrentImage noch ein repaint() rein schreiben und dann die run-Methode löschen.


----------



## Landei (19. Nov 2009)

Steev hat gesagt.:


> Überschreibe dir lieber die "paint"-Methode deines Panels...


Nö, wenn nicht wirklich gute Gründe für paint sprechen, sollte man lieber paintComponent überschreiben.


----------

