Außerhalb auf Variable zugreifen

wusli

Aktives Mitglied
Hallo,
Ich habe eine Variable, die in einem Button deklariert ist und jedesmal neu initialisiert wird, wenn ich den Button drücke, sie kann die Werte 0 oder 1 annehmen.
Mit den Werten arbeite ich dann außerhalb des Buttons, aber wie kann ich außerhalb auf die Variable zugreifen??

Danke im Vorraus
 
Java:
final String Wort = wort.getText();
		JButton pruefen = new JButton("Pr\u00FCfen");
		pruefen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			String Buchstabe = buchstabe.getText();
			int richtig;
			
				
	        int index = Wort.indexOf(Buchstabe);
	        
	        if(index > -1)
	        {
	            gesuchtVerdeckt.replace(index, index+1, Buchstabe);
	            richtig = 1;
	           
	        }
	        
	        else
	        {
	        	nein.setText(nein.getText()+Buchstabe);
	        	richtig = 0;
	        	
	        }
	        
	       
	        
	        ta.setText(gesuchtVerdeckt.toString());
	        buchstabe.setText("");
	       
	    	
			}
		
		});
		pruefen.setBounds(303, 10, 89, 23);
		contentPane.add(pruefen);
Das ist der Button

Java:
		if (richtig==0)
        {
        	falsch=falsch+1;
			if (falsch==0)
			{
              
             
				JLabel imagelabel = new JLabel(new ImageIcon("0.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
				frame.pack();
				frame.show();
			} 
		
			if (falsch==1)
             {
                   
                  
                  JLabel imagelabel = new JLabel(new ImageIcon("1.gif"));
            		imagelabel.setBounds(10, 95, 216, 250);
            		contentPane.add(imagelabel);
                    frame.pack();
                    frame.show();
             }
             
             if (falsch==2)
             {     
            	 JLabel imagelabel = new JLabel(new ImageIcon("2.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();
             }
             
             if (falsch==3)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("3.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();
             }
             
             if (falsch==4)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("4.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();  
             }
             
             if (falsch==5)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("5.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();
             }
             
             if (falsch==6)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("6.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();   
             }
             
             if (falsch==7)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("7.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();  
             }
             
             if (falsch==8)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("8.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();  
             }
             
             if (falsch==9)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("9.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();    
             }
          
             if (falsch==10)
             {
                 
                  JLabel imagelabel = new JLabel(new ImageIcon("10.gif"));
          		imagelabel.setBounds(10, 95, 216, 250);
          		contentPane.add(imagelabel);
                  frame.pack();
                  frame.show();
                
               }   
		}
Das ist der Teil außerhalb des Buttons

Und jetzt will ich wissen, wie ich auf die Variable Richtig zugreifen kann
 
Setz Richtig als Attribut der Klasse und dann kannst du überall in der Klasse drauf zugreifen

also :
Java:
 private int richtig;

und im ActionListener machst du jedes mal wenn der ausgeführt wird einfach:

Java:
richtig=0;
 
wie geht das??
Ich habs nämlich genauso gemacht wie es oben stand:
Java:
Private int richtig
 
Würde es keinen Sinn machen, boolean statt int für die Variable zu nehmen, wenn die Werte, die die Variable annimmt eh nur 1/0 bzw. true/false sind?

Wie schon gesagt, du musst die Variable außerhalb der actionPerformed()-Methode initialisieren.
 
Wenn ich das jetzt außerhalb mache:
Java:
private boolean richtig
bekomme ich die Fehlermeldung : Illegal modifier for parameter richtig; only final is permitted
 
Ich weiß gar nicht, ob das die schönste Lösung ist, aber ich würde eine eigene ActionListener schreiben, die von ActionListener erbt. Diese bekommt dann ein Referenzattribut auf die Klasse, in der der Button konstruiert wird (vermutlich ein Frame?) mit
Code:
MyFrame myFrame
, wenn MyFrame die Klasse ist, in der der Button konstruiert wird.
Dann wird in MyFrame der ActionListener konstruiert, und mit
Code:
actListener.myFrame = this
eine Referenz erstellt (wenn actListener der konstruierte ActionListener ist).
Nun bekommt noch MyFrame die Variable
Code:
int richtig
, die nun in der actionPerformed()-Methode mittels
Code:
myFrame.richtig = 0
verändert werden kann.
Je nachdem, wie groß dein Projekt wird, würde sich eine getter-/setter-Methode in MyFrame anbieten, mit der du dann auf die Variable zugreifst.
 
Also der Link hat mir nichts gebracht...
Durch das mit dem eigenen ActionListener blick ich nicht durch...

Ich poste einfach nochmal den kompletten Quellcode
Java:
package Hangman;


import java.awt.EventQueue;



public class Hangman extends JFrame {

	private JPanel contentPane;
	private JTextField buchstabe;
	private JTextField wort;

	/**
	 * Launch the application.
	 */
	
	public static void main(String[] args) {
		  
		
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Hangman frame = new Hangman();
					frame.setVisible(true);
					
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	

		 
		 
		
	public Hangman() {
		boolean richtig;
		
		
		setTitle("Hangman");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 408, 397);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		
		
		buchstabe = new JTextField();
		buchstabe.setBounds(207, 11, 86, 20);
		contentPane.add(buchstabe);
		buchstabe.setColumns(1);
		
		wort = new JTextField();
		wort.setText("Wort");
		wort.setBounds(10, 11, 86, 20);
		contentPane.add(wort);
		wort.setColumns(1);
		
		final JTextArea nein = new JTextArea();
		nein.setToolTipText("Buchstaben die nicht vorkommen\r\n");
		nein.setBounds(255, 95, 135, 250);
		contentPane.add(nein);
		
		
		final JFrame frame = new JFrame();
		
		
		 int falsch=0;
		
		final StringBuilder gesuchtVerdeckt  = new StringBuilder ("____"); 
		
		final JTextArea ta = new JTextArea();
		ta.setBounds(10, 54, 378, 20);
		contentPane.add(ta);
		
		private boolean richtig;
		
		final String Wort = wort.getText();
		JButton pruefen = new JButton("Pr\u00FCfen");
		pruefen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			String Buchstabe = buchstabe.getText();
			
			
				
	        int index = Wort.indexOf(Buchstabe);
	        
	        if(index > -1)
	        {
	            gesuchtVerdeckt.replace(index, index+1, Buchstabe);
	            richtig = true;
	           
	        }
	        
	        else
	        {
	        	nein.setText(nein.getText()+Buchstabe);
	        	richtig = false;
	        	
	        }
	        
	       
	        
	        ta.setText(gesuchtVerdeckt.toString());
	        buchstabe.setText("");
	       
	    	
			}
		
		});
		pruefen.setBounds(303, 10, 89, 23);
		contentPane.add(pruefen);
		final String Text = ta.getText();
		
		
		
		if (richtig==false)
        {
        	falsch=falsch+1;
			if (falsch==0)
			{
              
             
				JLabel imagelabel = new JLabel(new ImageIcon("0.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
				frame.pack();
				frame.show();
			} 
		
			if (falsch==1)
             {
                   
                  
                  JLabel imagelabel = new JLabel(new ImageIcon("1.gif"));
            		imagelabel.setBounds(10, 95, 216, 250);
            		contentPane.add(imagelabel);
                    frame.pack();
                    frame.show();
             }
             
             if (falsch==2)
             {     
            	 JLabel imagelabel = new JLabel(new ImageIcon("2.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();
             }
             
             if (falsch==3)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("3.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();
             }
             
             if (falsch==4)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("4.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();  
             }
             
             if (falsch==5)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("5.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();
             }
             
             if (falsch==6)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("6.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();   
             }
             
             if (falsch==7)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("7.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();  
             }
             
             if (falsch==8)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("8.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();  
             }
             
             if (falsch==9)
             {
            	 JLabel imagelabel = new JLabel(new ImageIcon("9.gif"));
           		imagelabel.setBounds(10, 95, 216, 250);
           		contentPane.add(imagelabel);
                   frame.pack();
                   frame.show();    
             }
          
             if (falsch==10)
             {
                 
                  JLabel imagelabel = new JLabel(new ImageIcon("10.gif"));
          		imagelabel.setBounds(10, 95, 216, 250);
          		contentPane.add(imagelabel);
                  frame.pack();
                  frame.show();
                
               }   
		}
           
		
		JButton button1 = new JButton("Ok");
		button1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				wort.enable(false);
				wort.setVisible(false);
				String Wort = wort.getText();
				JLabel lbl_1 = new JLabel("Wortl\u00E4nge:"+ Wort.length()+" Zeichen");
				lbl_1.setBounds(10, 77, 46, 14);
				contentPane.add(lbl_1);
				
				
				
				
				
			}
		});
		button1.setBounds(106, 10, 89, 23);
		contentPane.add(button1);
		
		JLabel lblNewLabel = new JLabel("Buchstaben die nicht vorkommen");
		lblNewLabel.setFont(new Font("Arial", Font.BOLD, 11));
		lblNewLabel.setBounds(207, 77, 183, 14);
		contentPane.add(lblNewLabel);
		
		
		
		
		
		
		
		
		
		
	}
}
 
Zunächst hier der eigene ActionListener:
Java:
class MyListener implements ActionListener {
    Hangman frame;

    public void actionPerformed(ActionEvent evt) {
        // dein Code ab Zeile 91 bis 119
    }
}

und dann die Änderungen in deinem Code:
Java:
public class Hangman extends JFrame {
 
    private JPanel contentPane;
    private JTextField buchstabe;
    private JTextField wort;

    // den eigenen Listener initialisiert:
    MyListener myListener;
    // die Variable initialisiert:
    int richtig;
[JAVA=87] final String Wort = wort.getText();
JButton pruefen = new JButton("Pr\u00FCfen");
myListener = new MyListener();
myListener.frame = this;
pruefen.addActionListener(myListener);[/code]

/EDIT: achja, du musst dann natürlich in der actionPerformed immer
Code:
frame.richtig = ...
schreiben statt richtig = ...
 
Zuletzt bearbeitet:
Schieb richtig direkt unter die JTextFields. Da ist die Klasse, du hast es in den Constructor (was zwangsläufig auch eine Methode ist) gepackt.
 
@raGe666 sorry, aber ich hab das versucht aber nicht wirklich hinbekommen, ich hab keine Ahnung wo ich was einsetzten soll und so..
 
@raGe666 sorry, aber ich hab das versucht aber nicht wirklich hinbekommen, ich hab keine Ahnung wo ich was einsetzten soll und so..

mm also solltest du dich nicht erst einmal mit den Basics beschäftigten bevor du GUIs baust? 😀
weil klar können wir dir jetzt vorkauen, wie etwas geht, aber dabei wirst du wahrscheinlich 0,000% lernen wenn du es einfach abtippst

Ist der restliche Code denn von dir?
 
Ja, der restliche Code ist von mir, ich würd das ganze halt gerne hinbekommen....
Ich finde, dass ich dadurch schon einiges gelernt habe, bis jetzt haben wir noch nie grafisch programmiert in der Schule, aber das kommt halt jetzt kommendes Schuljahr und ich fänd es halt cool, wenn ich so Sachen dann schon könnte 🙂
 
Rein technisch sind das schon Basics... du deklarierst eine private variable im Konstruktor (dabei ist es unerheblich, obs für ne GUI oder irgendwelche Funktionssamlung ist). Hau dein
Java:
private boolean richtig
in die Klasse, so wie es schon paarmal gesagt wurde.
 
Entweder in die, zu der dein Button gehört oder wenigstens in die Methode, in der du den ActionListener hinzufügst:

Java:
final String Wort = wort.getText();
int richtig;
JButton pruefen = new JButton("Pr\u00FCfen");
pruefen.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String Buchstabe = buchstabe.getText();

Ich kann mich meinen Vorrednern nur anschließen: dein Problem hat mit GUI erstmal rein gar nichts zu tun und wenn du möchtest, dass du deinen Mitschülern wirklich was voraus hast, dann fang nochmal ganz vorne in einer einfachen Konsole an: Variablen, Sichtbarkeitsbereiche, Methoden. Das dürfte für den Anfang genügend Arbeit sein.
 
Das hatte ich ja schon versucht, aber dann bekomm ich die Fehlermeldung: Cannot refer to a non-final variable richtig inside an inner class defined in a different method
 
da fehlt auch noch nen final aber...
machs als Attribut der Klasse weil wenns final ist, kannst du den int nicht mehr direkt ändern

ich versuchs nur noch einmal^^

genau wie die Textfelder
Java:
 private JPanel contentPane;
    private JTextField buchstabe;
    private JTextField wort;

private (boolean/int <--- je nach dem was du jetzt benutzt) richtig;

dass is die "Lösung" für dein geposteten Code ,... nicht für raGe666 Lösung
 
Zuletzt bearbeitet:
@raGe666 sorry, aber ich hab das versucht aber nicht wirklich hinbekommen, ich hab keine Ahnung wo ich was einsetzten soll und so..

- wo die erstellte Klasse hinkommt, weißt du ja hoffentlich 😛
- der erste Code-Schnipsel müsste auch klar sein
- der zweite Code-Schnipsel hat eine Zeilenangabe, die sich auf deinen Sourcecode im vorangehenden Beitrag von dir bezieht, wo bleibt da noch Spielraum? 🙂

aber hier dann nochmal der zweite Code mit etwas mehr Zeilen zur Orientierung:
[JAVA=87] final String Wort = wort.getText();
JButton pruefen = new JButton("Pr\u00FCfen");
myListener = new MyListener();
myListener.frame = this;
pruefen.addActionListener(myListener);

// die actionPerformed()-Methode fällt hier ja weg, da sie schon in der eigenen Klasse ist

pruefen.setBounds(303, 10, 89, 23);
contentPane.add(pruefen);
final String Text = ta.getText();
[/code]

/ EDIT: wenn du int/boolean richtig
Code:
private
machst, musst du zum ändern eine setter-Methode schreiben, die dann vom ActionListener benutzt wird, um 'richtig' zu ändern:
Java:
// in der Klasse Hangman:
    public void setRichtig(int value) {
        richtig = value;
    }

dann steht in der actionPerformed() halt nicht mehr nur
Code:
frame.richtig = 0;
, sondern
Code:
frame.setRichtig(0);
 
Zuletzt bearbeitet:
Achja, du willst ja dein richtig auch ändern können, da wäre final natürlich wirklich schlecht (so genau hab ich mir das Thema gar nicht angeschaut😳). Also dann wohl in den Klassenrumof mit deiner Variable.
 
Jetzt hab ich nur noch einen Fehler:
public void setRichtig(int value) { bei der Zeile schreibt der mir void is an invalid type for the variable setRichtig
 
dann hast du das vermutlich in eine Methode rein geschrieben. Du musst setRichtig() in die Klasse Hangman schreiben und nicht in seinen Konstruktor oder sonst wo rein!
Am Besten, du tust das VOR die letzte geschweifte Klammer, die die Klasse Hangman schließt, rein:
Java:
class Hangman extends JFrame {

    // blablabla

    public void setRichtig(int value) {
        richtig = value;
    }
}
aber ich würde dir auch ans Herz legen, nochmal etwas in den Grundlagen zu schmökern. Diese Seite hier erklärt alles eigtl richtig gut, auch wenns manchmal etwas unkonventionell passiert.
 
Ja, werd ich demnächst nochmal tun 😉
Aber, mir ist noch ein Problem aufgefallen, ich kann jetzt nichtmehr auf meine Textareas zugreifen, aber auf die Textfelder schon, obwohl ich die Textareas als final deklariert habe...
 
da ist es genauso wie mit 'richtig'. Die Klasse myListener 'kennt' die ganzen Variablen gar nicht, sondern nur die Klasse Hangman, auf die der Listener eine Referenz ('frame') hat. Also musst du vor jeden Aufruf von Variablen der Klasse Hangman in der actionPerformed auch noch ein
Code:
frame.
setzen.
Zum Beispiel:
Java:
int index = frame.Wort.indexOf(Buchstabe);
oder
Java:
frame.nein.setText(frame.nein.getText()+Buchstabe);
 
frame.ta.setText(gesuchtVerdeckt.toString());
so bringt das trotzdem nichts...

frame.nein.setText(frame.nein.getText()+Buchstabe);
nein cannot be resolved or is not a field
 
hier mal dein code in einem KSKB.... Kommentare folgen...

Java:
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class Hangman extends JFrame {

	private JPanel contentPane;
	private JTextField buchstabe;
	private JTextField wort;
	private JTextArea nein = new JTextArea();
	private JTextArea ta = new JTextArea();
	private boolean richtig;
	private StringBuilder gesuchtVerdeckt = new StringBuilder("____");
	private String Wort;
	private String Text = ta.getText();

	public JTextArea getTa() {
		return ta;
	}

	public StringBuilder getGesuchtVerdeckt() {
		return gesuchtVerdeckt;
	}

	public JTextArea getNein() {
		return nein;
	}

	public JPanel getContentPane() {
		return contentPane;
	}

	public JTextField getBuchstabe() {
		return buchstabe;
	}

	public JTextField getWort() {
		return wort;
	}

	public boolean isRichtig() {
		return richtig;
	}

	public void setRichtig(boolean richtig) {
		this.richtig = richtig;
	}

	/**
	 * Launch the application.
	 */

	public static void main(String[] args) {

		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Hangman frame = new Hangman();
					frame.setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */

	public Hangman() {

		setTitle("Hangman");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 408, 397);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		buchstabe = new JTextField();
		buchstabe.setBounds(207, 11, 86, 20);
		contentPane.add(buchstabe);
		buchstabe.setColumns(1);

		wort = new JTextField();
		wort.setText("Wort");
		wort.setBounds(10, 11, 86, 20);
		contentPane.add(wort);
		wort.setColumns(1);

		nein.setToolTipText("Buchstaben die nicht vorkommen\r\n");
		nein.setBounds(255, 95, 135, 250);
		contentPane.add(nein);

		int falsch = 0;

		ta.setBounds(10, 54, 378, 20);
		contentPane.add(ta);

		JButton pruefen = new JButton("Pr\u00FCfen");
		pruefen.addActionListener(new MyActionListener(this));
		pruefen.setBounds(303, 10, 89, 23);
		contentPane.add(pruefen);

		if (richtig == false) {
			falsch = falsch + 1;
			if (falsch == 0) {

				JLabel imagelabel = new JLabel(new ImageIcon("0.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 1) {

				JLabel imagelabel = new JLabel(new ImageIcon("1.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 2) {
				JLabel imagelabel = new JLabel(new ImageIcon("2.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 3) {
				JLabel imagelabel = new JLabel(new ImageIcon("3.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 4) {
				JLabel imagelabel = new JLabel(new ImageIcon("4.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 5) {
				JLabel imagelabel = new JLabel(new ImageIcon("5.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 6) {
				JLabel imagelabel = new JLabel(new ImageIcon("6.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 7) {
				JLabel imagelabel = new JLabel(new ImageIcon("7.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 8) {
				JLabel imagelabel = new JLabel(new ImageIcon("8.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 9) {
				JLabel imagelabel = new JLabel(new ImageIcon("9.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}

			if (falsch == 10) {

				JLabel imagelabel = new JLabel(new ImageIcon("10.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}
		}

		JButton button1 = new JButton("Ok");
		button1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				wort.enable(false);
				wort.setVisible(false);
				String Wort = wort.getText();
				JLabel lbl_1 = new JLabel("Wortl\u00E4nge:" + Wort.length()
						+ " Zeichen");
				lbl_1.setBounds(10, 77, 46, 14);
				contentPane.add(lbl_1);

			}
		});
		button1.setBounds(106, 10, 89, 23);
		contentPane.add(button1);

		JLabel lblNewLabel = new JLabel("Buchstaben die nicht vorkommen");
		lblNewLabel.setFont(new Font("Arial", Font.BOLD, 11));
		lblNewLabel.setBounds(207, 77, 183, 14);
		contentPane.add(lblNewLabel);

	}
}

class MyActionListener implements ActionListener {
	private Hangman hangman;

	public MyActionListener(Hangman hangman) {
		this.hangman = hangman;
	}

	public void actionPerformed(ActionEvent e) {
		String Buchstabe = hangman.getBuchstabe().getText();

		int index = hangman.getWort().getText().indexOf(Buchstabe);

		if (index > -1) {
			hangman.getGesuchtVerdeckt().replace(index, index + 1, Buchstabe);
			hangman.setRichtig(true);

		}

		else {
			hangman.getNein().setText(hangman.getNein().getText() + Buchstabe);
			hangman.setRichtig(false);

		}

		hangman.getTa().setText(hangman.getGesuchtVerdeckt().toString());
		hangman.getBuchstabe().setText("");

	}

}

Ich war mal so frei den frame aus den if-Abfragen-Marathon rauszunehmen...
von Zeile 88 bis Zeile 211 ist dein Konstruktor und der wird wie oft durchlaufen????
genau 1x und zwar wenn du in der Main-Methode in Zeile 69 ihn mit [c]new[/c] aufrufst!

Das du 11x bei der If-Abfrage
Java:
if (falsch == 10) {

				JLabel imagelabel = new JLabel(new ImageIcon("10.gif"));
				imagelabel.setBounds(10, 95, 216, 250);
				contentPane.add(imagelabel);
			}
schreibst, schreit doch förmlich danach in einer Methode ausgelagert zu werden, der du nur die Nr des Bildes übergibst...

aber trotz der ganzen Mühe mit dem Null Layout (hat jeder -glaube ich mal- ausprobiert), ist der Ansatz meines Erachtens falsch....trenne man Logik und Anzeige. Progge mal eine Klasse Hangman, die dann die entsprechenden Variablen eines Hangman´s hat. Lösungswort, Anzahl der Versuche, max. Anzahl, etc....dann erst die GUI darum bauen, das ist viel einfacher (imho)

[edit][JAVA=118]if (richtig == false) {
falsch = falsch + 1;
if (falsch == 0) {

JLabel imagelabel = new JLabel(new ImageIcon("0.gif"));
imagelabel.setBounds(10, 95, 216, 250);
contentPane.add(imagelabel);
}

if (falsch == 1) {

JLabel imagelabel = new JLabel(new ImageIcon("1.gif"));
imagelabel.setBounds(10, 95, 216, 250);//usw[/code]
daraus [c]if(richtig..){[/c] oder
Code:
if(!richtig){...
 
Zuletzt bearbeitet:

Zurück
Oben