ein einfacher button.. ich verzweifel......

Status
Nicht offen für weitere Antworten.

moe_joe

Aktives Mitglied
Hi, ich versuche mich momentan ein bischen in java. Ich habe schon ein paar
vorkentnisse in C++ aber komm momentan nicht weiter. Hab hier hangman als
code und will dort nun am programmende einen "Beenden" und "Nochmal" button
einfügen (egal ob das spiel gewonnen oder verloren wurde). habe schon viel
gesucht und probiert aber mit den classen usw komm ich nicht klar.
wäre nett wen mir da mal jemand helfen könnte.


Code:
import java.awt.*;
import java.awt.event.*;
import java.math.*;     // für die Zufallszahl
import java.io.*;      // für Dateioperationen


public class hangman extends Frame {
    // Globale Variablen
    final static int WND_B=425, WND_H=350;
    final int SX=50, SY=50;
    RandomAccessFile file;
    String myword=null;  // das zu erratene wort
    char xyword[];        // das ungelöste Wort
    char probed[];
    char notprobed[];
    char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
                   'O','P','Q','R','S','T','U','V','W','X','Y','Z',
		           'Ä','Ö','Ü','ß'};
    int mistakes=0;  // Anzahl der Fehler
    int tries=0;     // Anzahl der Versuche
    KL CONTROL;
    char c;
 
    public hangman() {                // Hauptroutine
	String stmp=new String();
	try {
	    int wordcount=0;           // neuer Integer für Wörterzahl
	    int wordseek=0;            // ~ für Zielwort-Position
	    RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
	    while ((stmp=f.readLine())!=null) {  // solange das, was wir lesen, noch sichtbar ist
		if (stmp.charAt(0) != '#') {      // und wenn kein '#' am anfang steht
		    wordcount++;                  // zähle es als Wort
		}  
	    }
	    if (wordcount==0) {
	    	System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
	    	System.exit(0);
	    }
	    System.out.println("Woerter in Datendatei: "+wordcount);  // Statusbericht
	    while (wordseek==0) {    // Solange wordseek noch 0 ist, tue ...
		wordseek=(int)(Math.random()*wordcount)+1;  // hol' Dir einen Integer-Wert
	    }
	    System.out.print("Ausgewaehltes Wort: #"+wordseek);  // Statusbericht
	    f.seek(0);      // Position auf Dateianfang setzen
	    wordcount=0;    // Wieder auf NULL

	    while ((stmp=f.readLine())!=null) {   // und das ganze von vorne
		if (stmp.charAt(0) != '#') {
		    wordcount++;
		    if (wordcount==wordseek) {     // wenn an der Position, die wir suchen ...
			myword=stmp;               // setze myword auf gerade gelesenen String
			break;                    
		    }
		}
	    }
	    f.close();         // Datei wieder schließen
	}
	catch(IOException ioe) {    // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
	    System.out.println("IOException: "+ioe.toString());  // Fehlermeldung
	    System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
	    System.exit(0);
	}
	
	CONTROL=new KL();   // neuer KeyListener: CONTROL
	addKeyListener(CONTROL);  // hinzufügen
	xyword=new char[myword.length()];      // array erstellen
	for (int i=0;i<myword.length();i++) {  // array initialisieren
	    xyword[i]='_';
	}
	probed=new char[alphab.length];                // array erstellen
	notprobed=new char[alphab.length];
	for (int i=0;i<alphab.length;i++) {            // array initialisieren
	    probed[i]='-';
	    notprobed[i]=alphab[i];
	}
    }
  public void update(Graphics g)
    {
         paint(g);
    }

    public void paint(Graphics g) {      // die Grafiken
    Toolkit tk=Toolkit.getDefaultToolkit(); 
	// g.drawString("Datensaetze: "+maxdat,40,350);
	// g.drawString("Wort: "+myword,40,200);
	// g.drawString("Zeichen: "+c,40,230);
	g.setColor(Color.white);           // Farbe auf Weiß
	g.fillRect(0,0,WND_B,WND_H);       // Fenster Weiß machen
	g.setColor(Color.black);          // Farbe auf Schwaz setzen
	g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
	g.drawString("Wort: "+new String(xyword),40,215);
	if (mistakes!=-1) {
	    g.drawString("Buchstaben: ",40,260);
	    for (int i=0;i<alphab.length;i++) {
		g.drawChars(probed,i,1,118+i*8,260);
		g.drawChars(notprobed,i,1,118+i*8,275);
	    }
	    g.drawString("Fehler: "+mistakes,40,230);
	}
	UpdateHangMan(g);    // Hangman updaten
    }

    public void UpdateHangMan(Graphics g) {
	Toolkit tk=Toolkit.getDefaultToolkit();   // Toolkit (für Grafikdatei-Support) zuweisen

	switch(mistakes) {   // CASE mistakes of ...
	case 6:
	    g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
	    g.setColor(Color.red);
	    g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
	    g.setColor(Color.white);
	    g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
	    removeKeyListener(CONTROL);   // Tastenkontrolle abschalten
	    break;
	case 5:
	    g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
	    break;
	case 4:
	    g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
	    break;
	case 3:
	    g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
	    break;
	case 2:
	    g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
	    break;
	case 1:
	    g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
	    break;
	case 0:
	    g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
	    break;
	case -1:
	    g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
	    g.setColor(Color.green);
	    g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
	    removeKeyListener(CONTROL);
	    break;
	}

    }

    class KL implements KeyListener {
	public void keyPressed(KeyEvent e) { }
	public void keyReleased(KeyEvent e) { }
	public void keyTyped(KeyEvent e) {
	    c=e.getKeyChar();              // Taste holen
	    c=Character.toUpperCase(c);    // Buchstabe(?) evtl. GROß machen
	    int i;                        
	    boolean status=false;        // Booleans
	    boolean check=false;         // für versch. Status-Werte
	    for (i=0;i<alphab.length;i++) {
	    	if (c==alphab[i]) {        // wenn c = einer der Buchstaben des Alphabets ist ...
		    if (probed[i]!=c) probed[i]=c; else check=true;  
		    if (notprobed[i]==c) notprobed[i]='-';
		}
	    }
	    int underscores=0;            // Integer für Anzahl der "_" im bisherigen Wort
	    for (i=0;i<myword.length();i++) {
		if (c==Character.toUpperCase(myword.charAt(i))) {
		    xyword[i]=myword.charAt(i);
		    status=true;
		}
		if (xyword[i]=='_') underscores++;
	    }
	    if (!status && !check) mistakes++;  
	    if (!check) tries++;   // solange kein doppelter Tip: tries+1;
	    if (underscores==0 || mistakes>=6) {
		System.out.println(" ("+myword+")");
		System.out.println("Anzahl Versuche: "+tries+"    davon falsch: "+mistakes);
		System.out.println("Getippte Buchstaben: "+new String(probed));
		System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
		System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
	    }
	    if (underscores==0) mistakes=-1;   // wenn keine fehlenden Zeichen im Lösungswort ...
	    if (mistakes>=6) mistakes=6;       // wenn mehr als 5 Fehler gemacht wurden
	    repaint();        // Grafikfenster neuzeichnen
	}
    }

    public static void main(String args[]) {
	Frame frame=new hangman();       // neues Fenster
        frame.addWindowListener(new WindowAdapter() {   // WindowListener hinzufügen
	    public void windowClosing(WindowEvent e) {  // wenn auf X geklickt:
		System.out.println();
		System.exit(0);       // Programm beenden.
	    }
	});
	frame.setTitle(".:Hangman:.");  // Titel setzen
	frame.setSize(WND_B, WND_H);   // Größe setzen
        frame.show();                  // auf den Bildschirm
	/* Pictures
	   Image pic;
	   pic=Toolkit.getDefaultToolkit().getImage("image.jpg");
	   g.drawImage(pic,0,0,this);
	*/
    }
}

mfg moe_joe
 

moe_joe

Aktives Mitglied
ich versuche einen einfachen button einzufügen der am unteren bildschirmrand erscheinen soll. ich weis aber nicht wie ich den implementieren soll da ich mit java noch keine erfahrungen gemacht habe und die ganzen klassen mir neu sind(hab ein paar erfahrungen in c++). ein bsp zum einfügen eines buttons an diesem quellcode würde mir helfen das ganze ein bischen mehr zu verstehen
 

Lennart

Mitglied
Hallo!

Ist Dein Problem
1) dass der Button gar nicht erscheint oder
2) dass er am falschen Platz erscheint?

Wenn 2) ist es eine Sache des Layout-Managments

Grüße
Lennart
 

moe_joe

Aktives Mitglied
mein problem ist das ich garnicht weis wie und wo ich da einen button vereinbaren muss damit er am unteren bildschirmrand erscheint. ich möchte einfach nur das erstmal ein button erscheint, der beim draufklicken das programm beendet
 

@x.l

Bekanntes Mitglied
da die oberfläche ja komplett selbst gezeichnet wird (methode paint() ist also überschrieben), ist es nicht so einfach einen Button zu erstellen. Du müsstest den nämlich selbst zeichnen.

Ich sclage vor du versuchst es erst einmal mit einem einfacheren Beispiel um dich mit Java "bekannt zumachen".
 

moe_joe

Aktives Mitglied
schon klar das man um java zu lernen nicht mit sowas anfangen sollte... Das es zu schwer für mich is das weis ich auch sonst würde ich ja hier nicht fragen ob jemand einen bsp button der das programm beendet für mich implementieren kann.(wenn das kein zuuu großer aufwand ist) das programm läuft ja soweit gut und ohne fehler.
 

moe_joe

Aktives Mitglied
ja super java ist eine insel hab ich hier auch und mich schon ein bischen durchgelesen , hilft mir auch nicht weiter. Die ganze Theorie ist ja schön und gut aber ich bin eher der praktiker der übers "machen" lernt. Schade ich hab eigentlich gedacht in diesem forum wird einem mehr geholfen! ich hatte einfach nur gehofft das es hier vielleicht einen netten user gibt der einem mehr als nur ratschläge gibt und mal taten folgen lässt (sprich das was man gefragt hatte umsetzt) is das denn soooo schwer?????
 

*Hendrik

Bekanntes Mitglied
Du könntest z.B. Deine Klasse hangman von Panel anstatt von Frame ableiten und dann dieses Panel einem Frame zuweisen. So z.B. (die Listener für die Buttons müssen natürlich noch implementiert werden):
Code:
public class hangman extends Panel { 

.
.
.
.
.
 public static void main(String args[]) { 
   Frame frame=new Frame();       // neues Fenster 
        frame.addWindowListener(new WindowAdapter() {   // WindowListener hinzufügen
            public void windowClosing(WindowEvent e) {  // wenn auf X geklickt:
                System.out.println();
                System.exit(0);       // Programm beenden.
            }
        });
        frame.setLayout(new BorderLayout());
        
        Panel buttonPanel = new Panel();
        buttonPanel.setLayout(new FlowLayout());
        
        Button button1 = new Button("Nochmal");
        button1.setPreferredSize(new Dimension(80,20));
        Button button2 = new Button("Beenden");
        button2.setPreferredSize(new Dimension(80,20));
        
        buttonPanel.add(button1);
        buttonPanel.add(button2);
        
        frame.add(buttonPanel,BorderLayout.SOUTH);
        
        hangman panel = new hangman();
        frame.add(panel,BorderLayout.CENTER);
        
        frame.setTitle(".:Hangman:.");  // Titel setzen
        frame.setSize(WND_B, WND_H);   // Größe setzen
        frame.setVisible(true);                  // auf den Bildschirm
    }
 
S

SlaterB

Gast
@moe_joe

es gibt eben auch die Sichtweise, dass du hier gar nichts leistest, nicht mal lernen willst oder kannst
und jemand anders fertige Programme für dich coden lassen willst,
auch nicht schön..

dein Kenntnisstand ist noch Monate von solchen Programmen entfernt,
da ist es ganz normal, dass du nicht alle 500 Seiten im Buch, die dazu nötig wären, auf Anhieb verstehst,

eben weil du noch ganz am Anfang stehst sieht das alles mehr nach Theorie als nach Praxis aus,
fange mit dem Grundlagen von Java an, dann verstehst du Schritt für Schritt wie das läuft
und dann sind die Beispiele nebenher ausreichend praktisch
 

moe_joe

Aktives Mitglied
danke, das hat mir mal echt geholfen! buttons werden angezeigt. allerdings reagiert das programm jetzt nicht mehr auf meine tastatur eingaben.(also buchstaben eingaben zum erraten des wortes)
 
B

Beni

Gast
Stell sicher, dass das "hangman"-Panel fokusierbar ist (siehe "setFocusable"), und füge deinen KeyListener diesem Panel hinzu. Dann muss der Benutzer auf das Panel klicken, damit die Tastenschläge durchkommen (mit "requestFocusInWindow" könnte das Programm diesen Klick simulieren).
 

moe_joe

Aktives Mitglied
Beni hat gesagt.:
Stell sicher, dass das "hangman"-Panel fokusierbar ist (siehe "setFocusable"), und füge deinen KeyListener diesem Panel hinzu. Dann muss der Benutzer auf das Panel klicken, damit die Tastenschläge durchkommen (mit "requestFocusInWindow" könnte das Programm diesen Klick simulieren).

verstehe nich ganz wie ich das machen soll...
 

ms

Top Contributor
moe_joe hat gesagt.:
Schade ich hab eigentlich gedacht in diesem forum wird einem mehr geholfen! ich hatte einfach nur gehofft das es hier vielleicht einen netten user gibt der einem mehr als nur ratschläge gibt und mal taten folgen lässt (sprich das was man gefragt hatte umsetzt) is das denn soooo schwer?????

Du verwechselst nett sein mit blöd sein.

Willst du es verstehen oder nur das Ergebnis?
Bei zweiterem kannst du ja mal im Projekte/Jobbörse-Unterforum fragen.
Bei ersterem würde ich die Ratschläge annehmen.

ms
 
B

Beni

Gast
Code:
Panel hangman = ...
hangman.setFocusable( true );
hangman.requestFocusInWindow();

Wenn dir jemand so eine Methode nennt, schaust du am einfachst kurz in der API vorbei. z.B. hier: setFocusable.
 

*Hendrik

Bekanntes Mitglied
moe_joe hat gesagt.:
Beni hat gesagt.:
Stell sicher, dass das "hangman"-Panel fokusierbar ist (siehe "setFocusable"), und füge deinen KeyListener diesem Panel hinzu. Dann muss der Benutzer auf das Panel klicken, damit die Tastenschläge durchkommen (mit "requestFocusInWindow" könnte das Programm diesen Klick simulieren).

verstehe nich ganz wie ich das machen soll...

Der KeyListener ist ja schon dem Panel hinzugefügt (im Konstruktor). Was Beni meinte ist, dass wenn Du das Spiel jetzt startest, Du zunächst mit der Maus ins Fenster klicken musst, damit das Panel den Focus erhält und Du Buchstaben eintippen kannst. Die könntest Du mit requestFocusInWindow automatisch machen.
 

moe_joe

Aktives Mitglied
Also ersma vielen dank für die ganzen hilfreichen antworten!!!!!!!! also das mit dem spiel starten und dann ins fenster klicken das klappt. dann kann ich wieder die ganzen buchstaben aushwählen usw. aber es wäre natürlich praktischer wenn das ganze schon von vornherein geht. Also ich hab mir jetzt api/requestFocusInWindow durchgelesen, aber kann daraus nicht entnehmen wo ich requestFocusInWindow vereinbaren muss!?
mfg moe_joe
 

moe_joe

Aktives Mitglied
Hab's jetzt probiert aber will nich so ganz wie ich will!
Code:
frame.setTitle(".:Hangman:.");  // Titel setzen
    	        frame.setSize(WND_B, WND_H);   // Größe setzen
    	        frame.setVisible(true);                  // auf den Bildschirm
    	        requestFocusInWindow();
 

*Hendrik

Bekanntes Mitglied
Natürlich soll das Panel den Focus erhalten:
Code:
               frame.setSize(WND_B, WND_H);   // Größe setzen 
               frame.setVisible(true);                  // auf den Bildschirm 
               panel.requestFocusInWindow();

(Zwar funktioniert der Code, aber Du solltest Dir dennoch Gedanken darüber das Ganze strukturierter aufzubauen, z.B. eine separate Klasse für den Frame und eine separate Klasse für das Panel.)
 

moe_joe

Aktives Mitglied
Danke, funktioniert wunderbar. Ich hab den buttons jetzt noch nen actionlistener hinzugefügt zum programm beenden usw. Klappt auch wunderbar. Nur kenn ich den Befehl in java nicht um das Programm neu zu starten! wie lautet der befehl?? hat da jemand vielleicht noch nen tipp für mich?

Code:
    	        Button button1 = new Button("Nochmal");
    	        button1.setPreferredSize(new Dimension(80,20));
    	        button1.addActionListener(new ActionListener() {
    	            public void actionPerformed(ActionEvent arg0) {
    	            System.out.print("Nochmal...");
    	            !!!Hier soll das programm neu gestartet werden!!!
    	            }
 

*Hendrik

Bekanntes Mitglied
Entferne das "gespielte" hangman Panel vom Frame und füge dem Frame ein neue Instanz des Panels hinzu.
 

moe_joe

Aktives Mitglied
mhh hab's probiert aber irgendwas is da noch nich richtig
Code:
    	        Button button1 = new Button("Nochmal");
    	        button1.setPreferredSize(new Dimension(80,20));
    	        button1.addActionListener(new ActionListener() {
    	            public void actionPerformed(ActionEvent arg0) {
    	            System.out.print("Nochmal...");
    	            frame.remove(hangman);
    	            frame.add.hangman panel = new hangman();
    	            }
 

ms

Top Contributor
Gibts eine Fehlermeldung?
Hast du schon den Debugger angeworfen?

Übrigens, ich bezweifle, dass das überhaupt compiliert.
Code:
...
frame.add.hangman panel = new hangman();
...

ms
 

moe_joe

Aktives Mitglied
was für möglichkeiten gibt es denn noch das programm erneut durchlaufen zu lassen? (irgendwie finde ich in dem punkt geht das ganze bei c++ einfacher)
 
M

Michael...

Gast
Wenn überhaupt müsste es - ohne jetzt den restlichen Code zu kennen - in etwa so lauten:
frame.add(hangman = new Hangman());

Ich glaube aber eher, dass Dir ein paar grundlegende Sachen in Java noch nicht so klar sind.
 

moe_joe

Aktives Mitglied
da hast du recht! darum frag ich ja auch. hab vorher nur mit c++ gearbeitet und muss mich jetzt in java versuchen. is alles ein bischen anders...
 
M

Michael...

Gast
Also ich habe den ganzen Thread mal ein bisschen überflogen.
Das ganze scheint schon zu laufen und Dir geht es jetzt darum das Spiel neu zu starten?
Wie ist Deine Anwendung mittlerweile aufgebaut?
Ich gehe mal davon aus, Du hast einen JFrame und auf dem plazierst Du eine Instanz von Hangman (Klassennamen schreibt man üblicherweise gross) die von JPanel erbt.
Dann sollte es eigentlich so wie in Deinem Code schon ansatzweise vorhanden funktionieren, die alte Instanz von Hangman zu entfernen und eine neue Instanz einzufügen. Also in etwa so:
frame.getContentPane().remove(hangman);
frame.getContentPane().add(hangman = new Hangman());
frame.repaint();
und eventuell noch ein:
frame.validate();
 

moe_joe

Aktives Mitglied
ja genau, ich hätte es gerne so das bei dem klick auf den button das programm einfach von vorne wieder durchläuft. habs jetzt mal so probiert wie du es vorgeschlagen hast, will aber auch noch nicht so ganz.

Code:
import java.awt.*;
import java.awt.event.*;
import java.math.*;     // für die Zufallszahl
import java.io.*;      // für Dateioperationen


public class Hangman extends Panel { 
    // Globale Variablen
    final static int WND_B=425, WND_H=350;
    final int SX=50, SY=50;
    RandomAccessFile file;
    String myword=null;  // das zu erratene wort
    char xyword[];        // das ungelöste Wort
    char probed[];
    char notprobed[];
    char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
                   'O','P','Q','R','S','T','U','V','W','X','Y','Z',
		           'Ä','Ö','Ü','ß'};
    int mistakes=0;  // Anzahl der Fehler
    int tries=0;     // Anzahl der Versuche
    KL CONTROL;
    char c;
 
    public hangman() {                // Hauptroutine
    	
	String stmp=new String();
	try {
	    int wordcount=0;           // neuer Integer für Wörterzahl
	    int wordseek=0;            // ~ für Zielwort-Position
	    RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
	    while ((stmp=f.readLine())!=null) {  // solange das, was wir lesen, noch sichtbar ist
		if (stmp.charAt(0) != '#') {      // und wenn kein '#' am anfang steht
		    wordcount++;                  // zähle es als Wort
		}  
	    }
	    if (wordcount==0) {
	    	System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
	    	System.exit(0);
	    }
	    System.out.println("Woerter in Datendatei: "+wordcount);  // Statusbericht
	    while (wordseek==0) {    // Solange wordseek noch 0 ist, tue ...
		wordseek=(int)(Math.random()*wordcount)+1;  // hol' Dir einen Integer-Wert
	    }
	    System.out.print("Ausgewaehltes Wort: #"+wordseek);  // Statusbericht
	    f.seek(0);      // Position auf Dateianfang setzen
	    wordcount=0;    // Wieder auf NULL

	    while ((stmp=f.readLine())!=null) {   // und das ganze von vorne
		if (stmp.charAt(0) != '#') {
		    wordcount++;
		    if (wordcount==wordseek) {     // wenn an der Position, die wir suchen ...
			myword=stmp;               // setze myword auf gerade gelesenen String
			break;                    
		    }
		}
	    }
	    f.close();         // Datei wieder schließen
	}
	catch(IOException ioe) {    // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
	    System.out.println("IOException: "+ioe.toString());  // Fehlermeldung
	    System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
	    System.exit(0);
	}
	
	CONTROL=new KL();   // neuer KeyListener: CONTROL
	addKeyListener(CONTROL);  // hinzufügen
	xyword=new char[myword.length()];      // array erstellen
	for (int i=0;i<myword.length();i++) {  // array initialisieren
	    xyword[i]='_';
	}
	probed=new char[alphab.length];                // array erstellen
	notprobed=new char[alphab.length];
	for (int i=0;i<alphab.length;i++) {            // array initialisieren
	    probed[i]='-';
	    notprobed[i]=alphab[i];
	}
    }
  public void update(Graphics g)
    {
         paint(g);
    }

    public void paint(Graphics g) {      // die Grafiken
    Toolkit tk=Toolkit.getDefaultToolkit(); 
	// g.drawString("Datensaetze: "+maxdat,40,350);
	// g.drawString("Wort: "+myword,40,200);
	// g.drawString("Zeichen: "+c,40,230);
	g.setColor(Color.white);           // Farbe auf Weiß
	g.fillRect(0,0,WND_B,WND_H);       // Fenster Weiß machen
	g.setColor(Color.black);          // Farbe auf Schwaz setzen
	g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
	g.drawString("Wort: "+new String(xyword),40,215);
	if (mistakes!=-1) {
	    g.drawString("Buchstaben: ",40,260);
	    for (int i=0;i<alphab.length;i++) {
		g.drawChars(probed,i,1,118+i*8,260);
		g.drawChars(notprobed,i,1,118+i*8,275);
	    }
	    g.drawString("Fehler: "+mistakes,40,230);
	}
	UpdateHangMan(g);    // Hangman updaten
    }

    public void UpdateHangMan(Graphics g) {
	Toolkit tk=Toolkit.getDefaultToolkit();   // Toolkit (für Grafikdatei-Support) zuweisen
	
	switch(mistakes) {   // CASE mistakes of ...
	case 6:
	    g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
	    g.setColor(Color.red);
	    g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
	    g.setColor(Color.white);
	    g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
	    removeKeyListener(CONTROL);   // Tastenkontrolle abschalten
	    break;
	case 5:
	    g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
	    break;
	case 4:
	    g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
	    break;
	case 3:
	    g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
	    break;
	case 2:
	    g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
	    break;
	case 1:
	    g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
	    break;
	case 0:
	    g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
	    break;
	case -1:
	    g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
	    g.setColor(Color.green);
	    g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
	    g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
	    removeKeyListener(CONTROL);
	    break;
	}

    }

    class KL implements KeyListener {
	public void keyPressed(KeyEvent e) { }
	public void keyReleased(KeyEvent e) { }
	public void keyTyped(KeyEvent e) {
	    c=e.getKeyChar();              // Taste holen
	    c=Character.toUpperCase(c);    // Buchstabe(?) evtl. GROß machen
	    int i;                        
	    boolean status=false;        // Booleans
	    boolean check=false;         // für versch. Status-Werte
	    for (i=0;i<alphab.length;i++) {
	    	if (c==alphab[i]) {        // wenn c = einer der Buchstaben des Alphabets ist ...
		    if (probed[i]!=c) probed[i]=c; else check=true;  // und der noch nicht vorher getippt wurde, dann ... u.s.w.
		    if (notprobed[i]==c) notprobed[i]='-';
		}
	    }
	    int underscores=0;            // Integer für Anzahl der "_" im bisherigen Wort
	    for (i=0;i<myword.length();i++) {
		if (c==Character.toUpperCase(myword.charAt(i))) {
		    xyword[i]=myword.charAt(i);
		    status=true;
		}
		if (xyword[i]=='_') underscores++;
	    }
	    if (!status && !check) mistakes++;  // wenn der Buchstabe Falsch ist und nicht schon einmal getippt wurde mistakes+1
	    if (!check) tries++;   // solange kein doppelter Tip: tries+1;
	    if (underscores==0 || mistakes>=6) {
		System.out.println(" ("+myword+")");
		System.out.println("Anzahl Versuche: "+tries+"    davon falsch: "+mistakes);
		System.out.println("Getippte Buchstaben: "+new String(probed));
		System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
		System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
	    }
	    if (underscores==0) mistakes=-1;   // wenn keine fehlenden Zeichen im Lösungswort ...
	    if (mistakes>=6) mistakes=6;       // wenn mehr als 5 Fehler gemacht wurden
	    repaint();        // Grafikfenster neuzeichnen
	}
    }
    public static void main(String args[]) {
    	   Frame frame=new Frame();       // neues Fenster
    	        frame.addWindowListener(new WindowAdapter() {   // WindowListener hinzufügen
    	            public void windowClosing(WindowEvent e) {  // wenn auf X geklickt:
    	                System.out.println();
    	                System.exit(0);       // Programm beenden.
    	            }
    	        });
    	        
    	        frame.setLayout(new BorderLayout());
    	        Panel buttonPanel = new Panel();
    	        buttonPanel.setLayout(new FlowLayout());
    	       
    	        Button button1 = new Button("Nochmal");
    	        button1.setPreferredSize(new Dimension(80,20));
    	        button1.addActionListener(new ActionListener() {
    	           public void actionPerformed(ActionEvent arg0) {
    	              System.out.print("Nochmal...");
    	              frame.getContentPane().remove(hangman);
    	              frame.getContentPane().add(hangman = new Hangman());
    	              frame.repaint();
    	              und eventuell noch ein:
    	              frame.validate();
    	             }

    	        Button button2 = new Button("Beenden");
    	        button2.setPreferredSize(new Dimension(80,20));
    	        button2.addActionListener(new ActionListener() {
    	            public void actionPerformed(ActionEvent arg0) {
    	            System.out.print("Bis zum nächsten mal...");
    	            System.exit(0); 
    	            }
    	      });
    	       
    	        buttonPanel.add(button1);
    	        buttonPanel.add(button2);
    	       
    	        frame.add(buttonPanel,BorderLayout.SOUTH);
    	       
    	        hangman panel = new hangman();
    	        frame.add(panel,BorderLayout.CENTER);
    	       
    	        frame.setTitle(".:Hangman:.");  // Titel setzen
    	        frame.setSize(WND_B, WND_H);   // Größe setzen
    	        frame.setVisible(true);                  // auf den Bildschirm
    	        panel.requestFocusInWindow();
    	    } 
[/code

das ist ja fast zum verzweifeln.... :bahnhof:
 

moe_joe

Aktives Mitglied
^^ mein aktuelles problem ist: das beim klicken auf den button"Nochmal" das program neugestartet werden soll. allerdings passiert man klicken auf den button garnichts! und eclipse gibt mir auch keine fehlermeldung.
 
M

Michael...

Gast
An Deiner Stelle würde ich da erst einmal klein anfangen und mir einmal nur die Oberfläche aufbauen. Der obige Code ist so nicht kompilierbar.
Verwende zwei Klassen, eine die von Frame bzw. JFrame erbt und eine die von Panel bzw. JPanel erbt. Im Frame machst Du dann die Button Logik und im Panel dann die Spiellogik.
 

moe_joe

Aktives Mitglied
Also ich habe es jetzt so gemacht:
Code:
     	        Button button1 = new Button("Nochmal");
    	        button1.setPreferredSize(new Dimension(80,20));
    	        button1.addActionListener(new ActionListener() {
    	        public void actionPerformed(ActionEvent arg0) {
    	            System.out.print("Nochmal...");
    	            frame.getContentPane().remove(Hangman);
    	            frame.getContentPane().add(Hangman = new Hangman());
    	            frame.repaint();
    	            }

und krieg folgende fehler meldungen:

- bei allen drei "frame." sagt er: Cannot refer to a non-final variable frame inside an inner class definied in a different method

- dann sagt er zu den "Hangman" nach "frame.getContentPane().": Hangman canot be resolved

- und zu "getContentPane()" sagt er: is undefined for the type frame
 
M

Michael...

Gast
Auf frame kann er nicht referenzieren, da es sich bei beim ActionListener um eine innere Klasse handelt, in der keine Variable namens frame deklariert ist. Und Hangman ist wahrscheinlich auch keine deklarierte Variable (Gross- und Kleinschreibung beachten. getContentPane gibt's glaube ich nur bei Swing Komponenten habe zu spät gesehen, dass Du mit AWT arbeitest. Habe das letzte Mal vor ca. 10 Jahren mit AWT gearbeitet.

Hier mal ein Beispiel-Code der das Zurücksetzen mittels entfernen und neu hinzufügen einer Komponente mal verdeutlichen soll:
Code:
import java.awt.*; 
import java.awt.event.*;
import javax.swing.*;

public class Hangman extends JFrame { 
	private HangmanPanel hangPanel;
	private JButton button;
	
	public Hangman() {
		this.setBounds(50, 50, 200, 200);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(hangPanel = new HangmanPanel(), BorderLayout.CENTER);
		this.getContentPane().add(button = new JButton("Reset"), BorderLayout.SOUTH);
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				resetGame();
			}
		});
	}
	
	public void resetGame(){
		this.getContentPane().remove(hangPanel);
		this.getContentPane().add(hangPanel = new HangmanPanel());
		this.repaint();
		this.validate();
	}
	
	public class HangmanPanel extends JPanel {
		public HangmanPanel(){
			this.setBackground(Color.BLACK);
			this.addMouseListener(new MouseAdapter() {
				public void mouseClicked(MouseEvent evt) {
					changeBackground();
				}
			});
		}
		
		public void changeBackground(){
			this.setBackground(Color.RED);
		}
	}
	
	public static void main(String args[]) {
		new Hangman().show();
	} 
}

Einfach mal auf das schwarze Panel clicken und danach den Button drücken.

Je nach Aufwand kann man im Panel auch eine Methode definieren, welche die relevanten Variablen und Objekte zurücksetzt.
 

moe_joe

Aktives Mitglied
ich hab's jetzt mal so probiert
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;      // für Dateioperationen

import javax.swing.JFrame;

public class Hangman extends Panel { 
	   
	private static final long serialVersionUID = 1L;
	// Globale Variablen
    final static int WND_B=425, WND_H=350;
    final int SX=50, SY=50;
    RandomAccessFile file;
    String myword=null;  // das zu erratene wort
    char xyword[];        // das ungelöste Wort
    char probed[];
    char notprobed[];
    char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
                   'O','P','Q','R','S','T','U','V','W','X','Y','Z',
		           'Ä','Ö','Ü','ß'};
    int mistakes=0;  // Anzahl der Fehler
    int tries=0;     // Anzahl der Versuche
    KL CONTROL;
    char c;
 
    public Hangman() {                // Hauptroutine
    	
	String stmp=new String();
	try {
	    int wordcount=0;           // neuer Integer für Wörterzahl
	    int wordseek=0;            // ~ für Zielwort-Position
	    RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
	    while ((stmp=f.readLine())!=null) {  // solange das, was wir lesen, noch sichtbar ist
		if (stmp.charAt(0) != '#') {      // und wenn kein '#' am anfang steht
		    wordcount++;                  // zähle es als Wort
		}  
	    }
	    if (wordcount==0) {
	    	System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
	    	System.exit(0);
	    }
	    System.out.println("Woerter in Datendatei: "+wordcount);  // Statusbericht
	    while (wordseek==0) {    // Solange wordseek noch 0 ist, tue ...
		wordseek=(int)(Math.random()*wordcount)+1;  // hol' Dir einen Integer-Wert
	    }
	    System.out.print("Ausgewaehltes Wort: #"+wordseek);  // Statusbericht
	    f.seek(0);      // Position auf Dateianfang setzen
	    wordcount=0;    // Wieder auf NULL

	    while ((stmp=f.readLine())!=null) {   // und das ganze von vorne
		if (stmp.charAt(0) != '#') {
		    wordcount++;
		    if (wordcount==wordseek) {     // wenn an der Position, die wir suchen ...
			myword=stmp;               // setze myword auf gerade gelesenen String
			break;                    
		    }
		}
	    }
	    f.close();         // Datei wieder schließen
	}
	catch(IOException ioe) {    // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
	    System.out.println("IOException: "+ioe.toString());  // Fehlermeldung
	    System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
	    System.exit(0);
	}
	
	CONTROL=new KL();   // neuer KeyListener: CONTROL
	addKeyListener(CONTROL);  // hinzufügen
	xyword=new char[myword.length()];      // array erstellen
	for (int i=0;i<myword.length();i++) {  // array initialisieren
	    xyword[i]='_';
	}
	probed=new char[alphab.length];                // array erstellen
	notprobed=new char[alphab.length];
	for (int i=0;i<alphab.length;i++) {            // array initialisieren
	    probed[i]='-';
	    notprobed[i]=alphab[i];
	}
    }
  public void update(Graphics g)
    {
         paint(g);
    }

    public void paint(Graphics g) {      // die Grafiken
    Toolkit tk=Toolkit.getDefaultToolkit(); 
	// g.drawString("Datensaetze: "+maxdat,40,350);
	// g.drawString("Wort: "+myword,40,200);
	// g.drawString("Zeichen: "+c,40,230);
	g.setColor(Color.white);           // Farbe auf Weiß
	g.fillRect(0,0,WND_B,WND_H);       // Fenster Weiß machen
	g.setColor(Color.black);          // Farbe auf Schwaz setzen
	g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
	g.drawString("Wort: "+new String(xyword),40,215);
	if (mistakes!=-1) {
	    g.drawString("Buchstaben: ",40,260);
	    for (int i=0;i<alphab.length;i++) {
		g.drawChars(probed,i,1,118+i*8,260);
		g.drawChars(notprobed,i,1,118+i*8,275);
	    }
	    g.drawString("Fehler: "+mistakes,40,230);
	}
	UpdateHangMan(g);    // Hangman updaten
    }

    public void UpdateHangMan(Graphics g) {
	Toolkit tk=Toolkit.getDefaultToolkit();   // Toolkit (für Grafikdatei-Support) zuweisen
	
	switch(mistakes) {   // CASE mistakes of ...
	case 6:
	    g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
	    g.setColor(Color.red);
	    g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
	    g.setColor(Color.white);
	    g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
	    removeKeyListener(CONTROL);   // Tastenkontrolle abschalten
	    break;
	case 5:
	    g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
	    break;
	case 4:
	    g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
	    break;
	case 3:
	    g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
	    break;
	case 2:
	    g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
	    break;
	case 1:
	    g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
	    break;
	case 0:
	    g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
	    break;
	case -1:
	    g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
	    g.setColor(Color.green);
	    g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
	    g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
	    removeKeyListener(CONTROL);
	    break;
	}

    }

    class KL implements KeyListener {
	public void keyPressed(KeyEvent e) { }
	public void keyReleased(KeyEvent e) { }
	public void keyTyped(KeyEvent e) {
	    c=e.getKeyChar();              // Taste holen
	    c=Character.toUpperCase(c);    // Buchstabe(?) evtl. GROß machen
	    int i;                        
	    boolean status=false;        // Booleans
	    boolean check=false;         // für versch. Status-Werte
	    for (i=0;i<alphab.length;i++) {
	    	if (c==alphab[i]) {        // wenn c = einer der Buchstaben des Alphabets ist ...
		    if (probed[i]!=c) probed[i]=c; else check=true;  // und der noch nicht vorher getippt wurde, dann ... u.s.w.
		    if (notprobed[i]==c) notprobed[i]='-';
		}
	    }
	    int underscores=0;            // Integer für Anzahl der "_" im bisherigen Wort
	    for (i=0;i<myword.length();i++) {
		if (c==Character.toUpperCase(myword.charAt(i))) {
		    xyword[i]=myword.charAt(i);
		    status=true;
		}
		if (xyword[i]=='_') underscores++;
	    }
	    if (!status && !check) mistakes++;  // wenn der Buchstabe Falsch ist und nicht schon einmal getippt wurde mistakes+1
	    if (!check) tries++;   // solange kein doppelter Tip: tries+1;
	    if (underscores==0 || mistakes>=6) {
		System.out.println(" ("+myword+")");
		System.out.println("Anzahl Versuche: "+tries+"    davon falsch: "+mistakes);
		System.out.println("Getippte Buchstaben: "+new String(probed));
		System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
		System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
	    }
	    if (underscores==0) mistakes=-1;   // wenn keine fehlenden Zeichen im Lösungswort ...
	    if (mistakes>=6) mistakes=6;       // wenn mehr als 5 Fehler gemacht wurden
	    repaint();        // Grafikfenster neuzeichnen
	}
    }
    public static void main(String args[]) {
    	   JFrame frame=(JFrame) new Frame();       // neues Fenster
    	        frame.addWindowListener(new WindowAdapter() {   // WindowListener hinzufügen
    	            public void windowClosing(WindowEvent e) {  // wenn auf X geklickt:
    	                System.out.println();
    	                System.exit(0);       // Programm beenden.
    	            }
    	        });
    	        
    	        frame.setLayout(new BorderLayout());
    	        Panel buttonPanel = new Panel();
    	        buttonPanel.setLayout(new FlowLayout());
    	       
    	        final JFrame f = frame;
    	        Button button1 = new Button("Nochmal");
    	                       button1.setPreferredSize(new Dimension(80,20));
    	                       button1.addActionListener(new ActionListener() {
    	                       public void actionPerformed(ActionEvent arg0) {
    	                           System.out.print("Nochmal...");
    	                           f.getContentPane().remove(HangmanInstance);
    	                           f.getContentPane().add(HangmanInstance = new Hangman());
    	                           f.repaint();
    	                           }
    	      });
    	        Button button2 = new Button("Beenden");
    	        button2.setPreferredSize(new Dimension(80,20));
    	        button2.addActionListener(new ActionListener() {
    	            public void actionPerformed(ActionEvent arg0) {
    	            System.out.print("Bis zum nächsten mal...");
    	            System.exit(0); 
    	            }
    	      });
    	       
    	        buttonPanel.add(button1);
    	        buttonPanel.add(button2);
    	       
    	        frame.add(buttonPanel,BorderLayout.SOUTH);
    	       
    	        Hangman panel = new Hangman();
    	        frame.add(panel,BorderLayout.CENTER);
    	       
    	        frame.setTitle(".:Hangman:.");  // Titel setzen
    	        frame.setSize(WND_B, WND_H);   // Größe setzen
    	        frame.setVisible(true);                  // auf den Bildschirm
    	        panel.requestFocusInWindow();
    	    } 
}

so sieht das ganze bei mir jetzt aus. krieg da jetzt noch die fehlermeldung "HangmanInstance cannot be resolved" muss ich noch irgendwas vereinbaren? hab ich was vergessen!?
 

moe_joe

Aktives Mitglied
endlich, hab jetzt ne lauffähige version. So sieht das jetzt aus

Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;      // für Dateioperationen

import javax.swing.JFrame;

public class Hangman extends Panel { 
	   
	private static final long serialVersionUID = 1L;
	// Globale Variablen
    final static int WND_B=425, WND_H=350;
    final int SX=50, SY=50;
    RandomAccessFile file;
    String myword=null;  // das zu erratene wort
    char xyword[];        // das ungelöste Wort
    char probed[];
    char notprobed[];
    char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
                   'O','P','Q','R','S','T','U','V','W','X','Y','Z',
		           'Ä','Ö','Ü','ß'};
    int mistakes=0;  // Anzahl der Fehler
    int tries=0;     // Anzahl der Versuche
    KL CONTROL;
    char c;
 
    public Hangman() {                // Hauptroutine
    	
	String stmp=new String();
	try {
	    int wordcount=0;           // neuer Integer für Wörterzahl
	    int wordseek=0;            // ~ für Zielwort-Position
	    RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
	    while ((stmp=f.readLine())!=null) {  // solange das, was wir lesen, noch sichtbar ist
		if (stmp.charAt(0) != '#') {      // und wenn kein '#' am anfang steht
		    wordcount++;                  // zähle es als Wort
		}  
	    }
	    if (wordcount==0) {
	    	System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
	    	System.exit(0);
	    }
	    System.out.println("Woerter in Datendatei: "+wordcount);  // Statusbericht
	    while (wordseek==0) {    // Solange wordseek noch 0 ist, tue ...
		wordseek=(int)(Math.random()*wordcount)+1;  // hol' Dir einen Integer-Wert
	    }
	    System.out.print("Ausgewaehltes Wort: #"+wordseek);  // Statusbericht
	    f.seek(0);      // Position auf Dateianfang setzen
	    wordcount=0;    // Wieder auf NULL

	    while ((stmp=f.readLine())!=null) {   // und das ganze von vorne
		if (stmp.charAt(0) != '#') {
		    wordcount++;
		    if (wordcount==wordseek) {     // wenn an der Position, die wir suchen ...
			myword=stmp;               // setze myword auf gerade gelesenen String
			break;                    
		    }
		}
	    }
	    f.close();         // Datei wieder schließen
	}
	catch(IOException ioe) {    // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
	    System.out.println("IOException: "+ioe.toString());  // Fehlermeldung
	    System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
	    System.exit(0);
	}
	
	CONTROL=new KL();   // neuer KeyListener: CONTROL
	addKeyListener(CONTROL);  // hinzufügen
	xyword=new char[myword.length()];      // array erstellen
	for (int i=0;i<myword.length();i++) {  // array initialisieren
	    xyword[i]='_';
	}
	probed=new char[alphab.length];                // array erstellen
	notprobed=new char[alphab.length];
	for (int i=0;i<alphab.length;i++) {            // array initialisieren
	    probed[i]='-';
	    notprobed[i]=alphab[i];
	}
    }
  public void update(Graphics g)
    {
         paint(g);
    }

    public void paint(Graphics g) {      // die Grafiken
    Toolkit tk=Toolkit.getDefaultToolkit(); 
	// g.drawString("Datensaetze: "+maxdat,40,350);
	// g.drawString("Wort: "+myword,40,200);
	// g.drawString("Zeichen: "+c,40,230);
	g.setColor(Color.white);           // Farbe auf Weiß
	g.fillRect(0,0,WND_B,WND_H);       // Fenster Weiß machen
	g.setColor(Color.black);          // Farbe auf Schwaz setzen
	g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
	g.drawString("Wort: "+new String(xyword),40,215);
	if (mistakes!=-1) {
	    g.drawString("Buchstaben: ",40,260);
	    for (int i=0;i<alphab.length;i++) {
		g.drawChars(probed,i,1,118+i*8,260);
		g.drawChars(notprobed,i,1,118+i*8,275);
	    }
	    g.drawString("Fehler: "+mistakes,40,230);
	}
	UpdateHangMan(g);    // Hangman updaten
    }

    public void UpdateHangMan(Graphics g) {
	Toolkit tk=Toolkit.getDefaultToolkit();   // Toolkit (für Grafikdatei-Support) zuweisen
	
	switch(mistakes) {   // CASE mistakes of ...
	case 6:
	    g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
	    g.setColor(Color.red);
	    g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
	    g.setColor(Color.white);
	    g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
	    removeKeyListener(CONTROL);   // Tastenkontrolle abschalten
	    break;
	case 5:
	    g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
	    break;
	case 4:
	    g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
	    break;
	case 3:
	    g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
	    break;
	case 2:
	    g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
	    break;
	case 1:
	    g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
	    break;
	case 0:
	    g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
	    break;
	case -1:
	    g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
	    g.setColor(Color.green);
	    g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
	    g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
	    removeKeyListener(CONTROL);
	    break;
	}

    }

    class KL implements KeyListener {
	public void keyPressed(KeyEvent e) { }
	public void keyReleased(KeyEvent e) { }
	public void keyTyped(KeyEvent e) {
	    c=e.getKeyChar();              // Taste holen
	    c=Character.toUpperCase(c);    // Buchstabe(?) evtl. GROß machen
	    int i;                        
	    boolean status=false;        // Booleans
	    boolean check=false;         // für versch. Status-Werte
	    for (i=0;i<alphab.length;i++) {
	    	if (c==alphab[i]) {        // wenn c = einer der Buchstaben des Alphabets ist ...
		    if (probed[i]!=c) probed[i]=c; else check=true;  // und der noch nicht vorher getippt wurde, dann ... u.s.w.
		    if (notprobed[i]==c) notprobed[i]='-';
		}
	    }
	    int underscores=0;            // Integer für Anzahl der "_" im bisherigen Wort
	    for (i=0;i<myword.length();i++) {
		if (c==Character.toUpperCase(myword.charAt(i))) {
		    xyword[i]=myword.charAt(i);
		    status=true;
		}
		if (xyword[i]=='_') underscores++;
	    }
	    if (!status && !check) mistakes++;  // wenn der Buchstabe Falsch ist und nicht schon einmal getippt wurde mistakes+1
	    if (!check) tries++;   // solange kein doppelter Tip: tries+1;
	    if (underscores==0 || mistakes>=6) {
		System.out.println(" ("+myword+")");
		System.out.println("Anzahl Versuche: "+tries+"    davon falsch: "+mistakes);
		System.out.println("Getippte Buchstaben: "+new String(probed));
		System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
		System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
	    }
	    if (underscores==0) mistakes=-1;   // wenn keine fehlenden Zeichen im Lösungswort ...
	    if (mistakes>=6) mistakes=6;       // wenn mehr als 5 Fehler gemacht wurden
	    repaint();        // Grafikfenster neuzeichnen
	}
    }

private static void initializeNewWindow(){
JFrame frame= new JFrame();       // neues Fenster
    	        frame.addWindowListener(new WindowAdapter() {   // WindowListener hinzufügen
    	            public void windowClosing(WindowEvent e) {  // wenn auf X geklickt:
    	                System.out.println();
    	                System.exit(0);       // Programm beenden.
    	            }
    	        });
    	        
    	        frame.setLayout(new BorderLayout());
    	        Panel buttonPanel = new Panel();
    	        buttonPanel.setLayout(new FlowLayout());
    	       
    	        final JFrame f = frame;
    	        Button button1 = new Button("Nochmal");
    	                       button1.setPreferredSize(new Dimension(80,20));
    	                       button1.addActionListener(new ActionListener() {
    	                       public void actionPerformed(ActionEvent arg0) {
    	                           System.out.print("Nochmal...");
    	                           f.dispose();
                                           initializeNewWindow();
    	                           }
    	      });
    	        Button button2 = new Button("Beenden");
    	        button2.setPreferredSize(new Dimension(80,20));
    	        button2.addActionListener(new ActionListener() {
    	            public void actionPerformed(ActionEvent arg0) {
    	            System.out.print("Bis zum nächsten mal...");
    	            System.exit(0); 
    	            }
    	      });
    	       
    	        buttonPanel.add(button1);
    	        buttonPanel.add(button2);
    	       
    	        frame.add(buttonPanel,BorderLayout.SOUTH);
    	       
    	        Hangman panel = new Hangman();
    	        frame.add(panel,BorderLayout.CENTER);
    	       
    	        frame.setTitle(".:Hangman:.");  // Titel setzen
    	        frame.setSize(WND_B, WND_H);   // Größe setzen
    	        frame.setVisible(true);                  // auf den Bildschirm
    	        panel.requestFocusInWindow();
}
    public static void main(String args[]) {
    	   initializeNewWindow();
    	    } 
}

nochmal danke für eure ganzen antworten, hat mir echt weiter geholfen!!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
EinNickname9 Denkfehler bei einfacher Schleife Java Basics - Anfänger-Themen 83
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
N Methoden Einfacher SekundenTimer/Stopuhr in Java Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
H wie mehrere variablen in einfacher for-schleife? Java Basics - Anfänger-Themen 2
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
? Klassen einfacher Fehler in einem Java Programm. Java Basics - Anfänger-Themen 5
V Einfacher vergleich von Arrays geht schief Java Basics - Anfänger-Themen 2
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
O Ein einfacher Chatbot (simuliert chat) Java Basics - Anfänger-Themen 7
R Einfacher Regex Java Basics - Anfänger-Themen 3
L Einfacher Methodenaufruf vs. Objekt Java Basics - Anfänger-Themen 4
K Einfacher random namen weitergeben Java Basics - Anfänger-Themen 4
A Lässt sich dieser Ausdruck irgendwie einfacher schreiben? Java Basics - Anfänger-Themen 4
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
P Geht dieser Code noch einfacher? Java Basics - Anfänger-Themen 16
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
M Einfacher Timer ;) Java Basics - Anfänger-Themen 15
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
P falsches ergebnis bei einfacher berechnung Java Basics - Anfänger-Themen 3
M Einfacher Fenster-Ablauf Java Basics - Anfänger-Themen 5
M Gittermuster mit Stringbuilder und einfacher Schleife erstellen Java Basics - Anfänger-Themen 19
T Collections Werte aus einer HashMap auslesen, oder gehts auch einfacher ? Java Basics - Anfänger-Themen 6
D Code einfacher,eleganter programmieren Java Basics - Anfänger-Themen 24
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
C einfacher Link zu *.html Datei möglich? Java Basics - Anfänger-Themen 4
Hindi93 Einfacher Code funktioniert nicht... Java Basics - Anfänger-Themen 6
P Einfacher Rechner Java Basics - Anfänger-Themen 2
T Einfacher Kalender Java Basics - Anfänger-Themen 17
B Frage zu einfacher Rechnung Java Basics - Anfänger-Themen 3
B Hilfe bei einfacher Funktion - Possible loss of precision Java Basics - Anfänger-Themen 2
G Einfacher Anfang mit Hibernate Java Basics - Anfänger-Themen 4
F Von int zu double bei einfacher Rechnung Java Basics - Anfänger-Themen 2
C Einfacher Installer Java Basics - Anfänger-Themen 2
Chucky Einfacher Taschenrechner Verbesserungsvorschläge Java Basics - Anfänger-Themen 13
G Problem mit einfacher For-Schleife und Double Wert Java Basics - Anfänger-Themen 4
D Probleme bei einfacher Rechnung Java Basics - Anfänger-Themen 3
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
Maxq Klassen Actionen in Button implementieren Java Basics - Anfänger-Themen 6
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
JavaBeginner22 Button Text verändern Java Basics - Anfänger-Themen 1
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
B Zurück Button erstellen Java Basics - Anfänger-Themen 1
Tom/S Button info Java Basics - Anfänger-Themen 2
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
T JSP, Button-Color change. Java Basics - Anfänger-Themen 1
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
S Counter Label Button Java Basics - Anfänger-Themen 4
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
J Button als Feld nutzen Java Basics - Anfänger-Themen 17
A JOPtionPaneOptionDialog Abfrage welcher Button gedrückt wurde? Java Basics - Anfänger-Themen 8
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
B Button soll sowohl auf Klicken als auch auf die Enter-Taste reagieren Java Basics - Anfänger-Themen 9
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
I Ordnung JLayeredPane mit Button ändern Java Basics - Anfänger-Themen 5
A JLabel mit button drücken verändern Java Basics - Anfänger-Themen 6
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
CptK mit javafx button erstellen Java Basics - Anfänger-Themen 1
AppGuruCode962 Button mit Textfield verbinden Java Basics - Anfänger-Themen 13
L Java gui reset button Fehler!? Java Basics - Anfänger-Themen 2
L Java reset button Problem Java Basics - Anfänger-Themen 3
L Java reset button Problem Java Basics - Anfänger-Themen 9
L Erste Schritte AndroidStudio Button - Nur Großbuchstaben Java Basics - Anfänger-Themen 2
V JAVA Button Java Basics - Anfänger-Themen 4
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S OOP Button erst nach 2x klicken deaktivieren Java Basics - Anfänger-Themen 4
J Button in anderer Klasse ändern Java Basics - Anfänger-Themen 3
A Fenster mit Button aufrufen Java Basics - Anfänger-Themen 3
V Button/Event wird nicht ausgeführt, was tun? Java Basics - Anfänger-Themen 2
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
I GUI Button Postition festlegen Java Basics - Anfänger-Themen 4
Tacofan Welcher Button wurde zuerst gedrückt? Java Basics - Anfänger-Themen 4
K Interface Fenster mit 3 ComboBoxen und 1 Button Java Basics - Anfänger-Themen 13
J Best Practice Button isPressed o.ä. auswerten Java Basics - Anfänger-Themen 10
S zahl hoch und runter zählen per button Java Basics - Anfänger-Themen 25
G Email-sending Button Java Basics - Anfänger-Themen 9
K Input/Output JCheckBox mit Bestätigungs-Button Java Basics - Anfänger-Themen 22
A Nach Druck eines Buttons reagieren andere Button nicht Java Basics - Anfänger-Themen 3
P Auf Button-Klick außerhalb der GUI-Klasse reagieren Java Basics - Anfänger-Themen 10
C Ein Button soll Focus rausfinden und Methode starten Java Basics - Anfänger-Themen 9
S mit Java HTML Button drücken "lassen" Java Basics - Anfänger-Themen 8
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
R Button soll Wert 1 in Variable schreiben Java Basics - Anfänger-Themen 4
D Zurück Button -- Background wird nicht angezeigt Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben