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
 

wusli

Aktives Mitglied
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
 

pl4gu33

Top Contributor
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;
 

wusli

Aktives Mitglied
wie geht das??
Ich habs nämlich genauso gemacht wie es oben stand:
Java:
Private int richtig
 

raGe666

Mitglied
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.
 

wusli

Aktives Mitglied
Wenn ich das jetzt außerhalb mache:
Java:
private boolean richtig
bekomme ich die Fehlermeldung : Illegal modifier for parameter richtig; only final is permitted
 

raGe666

Mitglied
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.
 

wusli

Aktives Mitglied
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);
		
		
		
		
		
		
		
		
		
		
	}
}
 

raGe666

Mitglied
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:

Noctarius

Top Contributor
Schieb richtig direkt unter die JTextFields. Da ist die Klasse, du hast es in den Constructor (was zwangsläufig auch eine Methode ist) gepackt.
 

wusli

Aktives Mitglied
@raGe666 sorry, aber ich hab das versucht aber nicht wirklich hinbekommen, ich hab keine Ahnung wo ich was einsetzten soll und so..
 

pl4gu33

Top Contributor
@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? :D
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?
 

wusli

Aktives Mitglied
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 :)
 

mla.rue

Bekanntes Mitglied
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.
 

HimBromBeere

Top Contributor
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.
 

wusli

Aktives Mitglied
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
 

pl4gu33

Top Contributor
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

Mitglied
@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 :p
- 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:

HimBromBeere

Top Contributor
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:oops:). Also dann wohl in den Klassenrumof mit deiner Variable.
 

wusli

Aktives Mitglied
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
 

raGe666

Mitglied
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.
 

wusli

Aktives Mitglied
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...
 

raGe666

Mitglied
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);
 

wusli

Aktives Mitglied
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
 

jgh

Top Contributor
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
I double-Variable außerhalb des Try-Catch-Blocks nicht gültig Java Basics - Anfänger-Themen 2
MarvinsDepression Umgebungsvariable kann Java-Applikationen außerhalb der IDE nicht starten Java Basics - Anfänger-Themen 4
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
M String außerhalb der main-Methode Java Basics - Anfänger-Themen 4
L Buttons außerhalb der sichtbaren Activity Java Basics - Anfänger-Themen 8
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
G Wie rufe ich eine Methode außerhalb eines Projektes auf? Java Basics - Anfänger-Themen 18
U Properties außerhalb des war-Files Java Basics - Anfänger-Themen 1
P Auf Button-Klick außerhalb der GUI-Klasse reagieren Java Basics - Anfänger-Themen 10
S Methode außerhalb der Klasse definieren Java Basics - Anfänger-Themen 5
N Files außerhalb eines des jar-files einlesen mac Java Basics - Anfänger-Themen 10
H Enum außerhalb einer Klasse? Java Basics - Anfänger-Themen 2
P Methode außerhalb der Klasse aufrufen Java Basics - Anfänger-Themen 10
F APP außerhalb von Netbeans starten Java Basics - Anfänger-Themen 2
R Switch Werte außerhalb verwenden Java Basics - Anfänger-Themen 2
S Zugriff auf Klasse/Methoden außerhalb eines Projektordners einschränken Java Basics - Anfänger-Themen 5
P Unterschied JRE innerhalb/ außerhalb des JDK Verzeichnisses? Java Basics - Anfänger-Themen 5
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
J Java-Klassen außerhalb von Eclipse debuggen Java Basics - Anfänger-Themen 7
G mousemove außerhalb des fensters Java Basics - Anfänger-Themen 9
M ActionListener außerhalb des EDT ausführen Java Basics - Anfänger-Themen 2
R Eclipse Run Configuration von außerhalb starten Java Basics - Anfänger-Themen 2
C Eigenschaften außerhalb einer Klasse nicht sichtbar Java Basics - Anfänger-Themen 13
M Effizienter Variablen außerhalb einer Schleife zu deklarieren? Java Basics - Anfänger-Themen 1
R Mausposition außerhalb des SWING Fensters Java Basics - Anfänger-Themen 2
G Protected Variablen außerhalb der eigenen Klassenhierarchie sichtbar Java Basics - Anfänger-Themen 5
G Wieso enum Declaration nur außerhalb einer Methode möglich? Java Basics - Anfänger-Themen 9
T Jar: Zugriff auf Dateien inner- unter außerhalb d. jar-Files Java Basics - Anfänger-Themen 3
A dateireferenzierung innerhalb/außerhalb des archivs Java Basics - Anfänger-Themen 2
G Warum nur initialisierungen außerhalb von Methoden Java Basics - Anfänger-Themen 12
X Malen außerhalb der paint() Methode Java Basics - Anfänger-Themen 4
R Klasse aus Packet kann nicht außerhalb zugreifen Java Basics - Anfänger-Themen 8
O Variable Zimmergrößen per scanner einlesen Java Basics - Anfänger-Themen 5
richis-fragen String("AT") als StringObject-Variable deklarieren Java Basics - Anfänger-Themen 14
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
E Variable von 1. Fenster an 2. Fenster übergeben. Java Basics - Anfänger-Themen 7
T Variable in Schleife deklarieren, Speicherplatz, Garbage Collector Java Basics - Anfänger-Themen 10
T Datum als Variable wert Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
U Wie mache ich die Variable xyz eindeutig/unique? Java Basics - Anfänger-Themen 20
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Variable Felderanzahl Java Java Basics - Anfänger-Themen 10
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
W Schleife und einmal variable++ zu viel Java Basics - Anfänger-Themen 20
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
G variable kopieren bzw. woanders benutzen Java Basics - Anfänger-Themen 6
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
J Double Variable und Addition Java Basics - Anfänger-Themen 2
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
KogoroMori21 Variable im Parameter und Ohne Java Basics - Anfänger-Themen 5
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
H Datentypen Wertebereich von <Klassenname> <Variable> Java Basics - Anfänger-Themen 12
M Private Variable Java Basics - Anfänger-Themen 2
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
T Variable in for Schleife ansprechen ohne Array ? Java Basics - Anfänger-Themen 25
s.marcii Modulo in der Variable einsetzen - ist das möglich? Java Basics - Anfänger-Themen 2
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
B Inkrement von Variable Java Basics - Anfänger-Themen 8
V Variablen statische Variable einer Objektvariable zuordnen Java Basics - Anfänger-Themen 3
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
J JTextField Bezeichnung als Variable Java Basics - Anfänger-Themen 3
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
H Variable um 1 erhört ausgeben Java Basics - Anfänger-Themen 4
V Erste Schritte Eine Array-Variable mit Benutzereingaben befüllen Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
L cannot find symbol variable Kon Java Basics - Anfänger-Themen 8
C Statischer Typ aber Variable nicht statisch? Java Basics - Anfänger-Themen 5
H Variable.methode aufstellen, verstehen Java Basics - Anfänger-Themen 2
R Warnung, wenn eine Variable eingegeben wird Java Basics - Anfänger-Themen 6
S Variable einscannen Java Basics - Anfänger-Themen 30
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
J Input-Variable nicht sichtbar Java Basics - Anfänger-Themen 2
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
E Variable (Vektor) in andere Methode übergeben Java Basics - Anfänger-Themen 4
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben