# GUI, Button und Label erscheinen nicht



## moe_joe (24. Januar 2008)

Hi,
Bin grad dabei das gui für mein applet zu machen. Allerdings will java irgendwie meinen button und mein label nicht anzeigen!


Das Textarea wird mir wie gewünscht ausgegeben.Aber der Button und das labell nicht. Habe ich etwas bei der vereinbarung vergessen oder woran könnte das liegen?

mfg


----------



## Matze (24. Januar 2008)

Was für ein Layout verwendest du?


----------



## moe_joe (24. Januar 2008)

> setLayout(null);



ich wollte eigentlich kein layout benutzen sondenr die anordnung über setBounds machen


----------



## MeinerEiner_80 (24. Januar 2008)

Moin!
Mach doch bitte mal 

```
getContentPane().setLayout(null);
```

*grüssle*
MeinerEiner


----------



## Matze (24. Januar 2008)

Versuch mal explizit die größer der Buttons anzugeben


----------



## moe_joe (24. Januar 2008)

> Versuch mal explizit die größer der Buttons anzugeben



die größe des buttons geb ich ja über 
	
	
	



```
weiter.setBounds(100, 500, 105, 20);
```
 an



@meinereiner

hba ich gemacht, hat sich ncihts geändert


----------



## MeinerEiner_80 (24. Januar 2008)

Gibts irgendwelche Fehler? 
Also wenn du es im Browser anzeigst, in der Java Console?
Du fügst auch 2mal deine Textarea ein.. 
Lass mal die ganzen Icons weg.

Wenn alles nichts bringt, poste mal die komplette Klasse, so das man sie mal ausführen lassen kann..

*grüssle*
MeinerEiner


----------



## moe_joe (24. Januar 2008)

Fehler werden mir keine angezeigt. kann mir auhc nich erklären woran das liegt

hab auch gad gesehen da sich das textarea 2x hinzufüge. beim textarea hab ich ja auch kein problem, das wird mir angezeigt!


----------



## moe_joe (24. Januar 2008)

ich hoffe das passt so,wenn ich den ganzen quellcode poste sind wir bei 500 zeilen.....


```
getContentPane().setLayout(null);
	         final JTextArea antwort = new JTextArea(myanswer);
	         antwort.setFont( new Font("Arial", Font.BOLD, 15));
	         antwort.setBackground(new Color (199, 225, 242)); // Setzt Farbe 199, 225, 242
	         antwort.setEditable(false);
	         antwort.setBounds(40, 270, 575, 185);
	         getContentPane().add(antwort);
	         antwort.setLineWrap(true);
	         antwort.setVisible(true);
	         JLabel l1 = new JLabel( new ImageIcon(getImage(getCodeBase(),v_image.elementAt(label))));
	         l1.setBounds(50, 50, 100, 100);
	         getContentPane().add(l1);
	         l1.setVisible(true);
	         System.out.println("Bild: "+v_image.elementAt(label));
	         
	         final JButton weiter = new JButton("Weiter geht's");
	         weiter.setBounds(200, 450, 105, 20);
	         getContentPane().add(weiter);
	         ActionListener al = new ActionListener() {
	            public void actionPerformed(ActionEvent e) {
	               addKeyListener(control); // hinzufügen
	               getContentPane().remove(weiter);
	               getContentPane().remove(antwort);
	               requestFocus(); //setzt den Focus noch ..
	               if(v_fragen.isEmpty()){
	                  g.drawString("Herzlichen Glückwunsch! Sie haben alle Fragen beantwortet.", 200, 200);   
	                  repaint();
	               }
	               else{
	                  neue_runde();
	                  reinitVariables();
	                  repaint();
	               }
	            }
	         };
	         weiter.addActionListener(al);
	         weiter.setVisible(true);
```


----------



## zerix (24. Januar 2008)

Hallo,

ich möchte dich bitten die Netiquette zu beachten (Groß-/Kleinschreibung).


MFG

zEriX


----------



## MeinerEiner_80 (24. Januar 2008)

Also, wenn ich deinen Ausschnitt bei mir in ein Applet packe, sieht das folgendermassen aus:

```
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextArea;
/*
 * Main.java
 *
 * Created on 24. Januar 2008, 14:26
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author jweckbach
 */
public class Main extends JApplet{
    
    /** Creates a new instance of Main */
    public Main() {
    }
    public void init(){
        getContentPane().setLayout(null);
             final JTextArea antwort = new JTextArea("test");
             antwort.setFont( new Font("Arial", Font.BOLD, 15));
             antwort.setBackground(new Color (199, 225, 242)); // Setzt Farbe 199, 225, 242
             antwort.setEditable(false);
             antwort.setBounds(40, 270, 575, 185);
             getContentPane().add(antwort);
             antwort.setLineWrap(true);
             antwort.setVisible(true);
             JLabel l1 = new JLabel( "test");
             l1.setBounds(50, 50, 100, 100);
             getContentPane().add(l1);
             l1.setVisible(true);
             
             final JButton weiter = new JButton("Weiter geht's");
             weiter.setBounds(200, 450, 105, 20);
             getContentPane().add(weiter);
             ActionListener al = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                   //addKeyListener(control); // hinzufügen
                   getContentPane().remove(weiter);
                   getContentPane().remove(antwort);
                   requestFocus(); //setzt den Focus noch ..
                   
                }
             };
             weiter.addActionListener(al);
             weiter.setVisible(true);
    }
    
    
}
```

Das läuft ohne Probleme bei mir...
Also liegt der Fehler wohl woanders.. Von daher hatte es schon Sinn, wenn ich nach dem kompletten Code frage, weil ich ihn sonst so komplettieren muss, das er läuft, und von daher deinen Fehler wohl nicht einbaue...

*grüssle*
MeinerEiner


----------



## moe_joe (24. Januar 2008)

das hast du recht, aber wo kann denn der fehler sonst noch sitzen?


----------



## zerix (24. Januar 2008)

zerix hat gesagt.:


> Hallo,
> 
> ich möchte dich bitten die Netiquette zu beachten (Groß-/Kleinschreibung).
> 
> ...



Beachte das bitte.

Poste doch einfach mal deinen Quelltext, wir haben hier keine Wahrsager.

MFG

zEriX


----------



## MiMi (24. Januar 2008)

Es kann hier wohl kaum einer hellsehen oder?


----------



## moe_joe (24. Januar 2008)

> Poste doch einfach mal deinen Quelltext, wir haben hier keine Wahrsager.



ähhm was steht 3 *B*eiträge über dir?


----------



## MiMi (24. Januar 2008)

Aber in dem Beitrag da drunter von MeinerEiner, steht auch das der gepostete Quellcode keine Fehler enthält!


----------



## zerix (24. Januar 2008)

> ähhm was steht 3 Beiträge über dir?



Ich weiß ja nicht, ob du es schon bemerkt hast, aber es wurde schon festgestellt, dass in diesem Code kein Fehler ist, also muss der Fehler wo anders im Code liegen. Fazit du solltest deinen kompletten Code mal posten.

MFG

zEriX


----------



## moe_joe (25. Januar 2008)

so, hier is der ganze code. ich wünsche viel spaß


```
package hangman;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Hangman extends JApplet implements ActionListener {

	private static final long serialVersionUID = -1844350059334672767L;
	// Globale Variablen
	final static int WND_B = 640, WND_H = 480; // Fenstergröße setzen
	final static int EXIT_ON_CLOSE = 0;//
	final static int SX = 70, SY = 90;// position der anzuzeigenden Bilder
	String myword = null; // das zu erratene wort
	String myquestion;
	String myanswer;
	char xyword[]; // das ungelöste Wort
	char probed[];// getippte Buchstaben
	char notprobed[];// nicht getippte Buchstaben
	static final 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', 'Ä', 'Ö', 'Ü', 'ß' };
	// Vereinbarung der Buchstaben
	int mistakes; // Anzahl der Fehler
	int tries; // Anzahl der Versuche
	int maximum=5;
	int ende=0;
	int label;
	int i=0;
	boolean los=false;
	boolean ergebnis=false;
	KL control;// Keylistener Control vereinbaren
	Vector<String> v_fragen = new Vector<String>();// Vector vereinbaren
	Vector<String> v_woerter = new Vector<String>();// Vector vereinbaren
	Vector<String> v_antworten = new Vector<String>();// Vector vereinbaren
	Vector<String> v_image = new Vector<String>();// Vector vereinbaren
	String stmp = new String();// String vereinbaren

	// Konstruktor
	public Hangman() {
		control = new KL(); // neuer KeyListener: CONTROL
		System.out.println("konstruktor");
	}

	public void init(){
		
	final JButton start = new JButton("Los geht's...");
	getContentPane().setLayout(new BorderLayout());
	getContentPane().add(start, BorderLayout.CENTER);
		ActionListener al = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				los=true;
				addKeyListener(control); // hinzufügen
				getContentPane().remove(start);
				requestFocus(); //setzt den Focus noch ..
				repaint();
			}
		};
	start.addActionListener(al);
	System.out.println("init");
	};

	public void start(){
		
		File f_fragen = new File("fragen.dat");// File
		File f_woerter = new File("woerter.dat");// File
		File f_antworten = new File("antworten.dat");// File
		File f_image = new File("image.dat");
		
		try { 
			FileReader fr_fragen = new FileReader(f_fragen);
			FileReader fr_woerter = new FileReader(f_woerter);
			FileReader fr_antworten = new FileReader(f_antworten);
			FileReader fr_image = new FileReader(f_image);
			
			char[] c_fragen = new char[(int) f_fragen.length()];
			char[] c_woerter = new char[(int) f_woerter.length()];
			char[] c_antworten = new char[(int) f_antworten.length()];
			char[] c_image = new char[(int) f_image.length()];
			
			fr_fragen.read(c_fragen);	
			fr_woerter.read(c_woerter);
			fr_antworten.read(c_antworten);
			fr_image.read(c_image);
			
			String smtp_fragen =new String(c_fragen);
			String smtp_woerter =new String(c_woerter);
			String smtp_antworten =new String(c_antworten);
			String smtp_image = new String (c_image);
			
			// Den String bei Zeilenumbruch teilen und die einzelnen
			// Teile (=Zeilen) in ein array of string schreiben

			String[] entrys_woerter = smtp_woerter.split("#");
			String[] entrys_antworten = smtp_antworten.split("\\|");
			String[] entrys_fragen = smtp_fragen.split("\\|");
			String[] entrys_image = smtp_image.split("\\#");
			
			
			for (int i=0; i<entrys_image.length; i++){
				v_image.addElement(entrys_image[i]);
			}
			
			for (int i=0; i<entrys_woerter.length; i++){
				v_woerter.addElement(entrys_woerter[i]);
			}
			
			for (int i=0; i<entrys_fragen.length; i++){
				v_fragen.addElement(entrys_fragen[i]);
			}
			
			for (int i=0; i<entrys_woerter.length; i++){
				v_antworten.addElement(entrys_antworten[i]);
			}
			
			}catch (IOException ioe) { // Falls ein Fehler auftreten sollte
				System.out.println("IOException: " + ioe.toString()); // Fehlermeldungausgeben
				System.out.println(" Fehler beim Bearbeiten der Datendatei!");
				System.exit(0);// Beenden
			}
		
		System.out.println("start");
		neue_runde();
		requestFocus(); //setzt den Focus
	}
	
	public void neue_runde(){
		
		int wordseek = 0;
		
		wordseek = (int) (Math.random() * v_fragen.size()); // hol' Dir einen
		System.out.println ("Zufallszahl: "+ wordseek);
		
		label=wordseek;
		
		myword = v_woerter.elementAt(wordseek);
		v_woerter.removeElementAt(wordseek);
		
		myanswer = v_antworten.elementAt(wordseek);
		v_antworten.removeElementAt(wordseek);
		
		myquestion =v_fragen.elementAt(wordseek);
		v_fragen.removeElementAt(wordseek);
		
		reinitVariables();
		repaint();// Fenster neu zeichnen
	}

	public void reinitVariables(){
		
		if (myword == null)
		{
			myword = "Hallo";
		}
		mistakes = 0;
		tries = 0;
		xyword = new char[myword.length()];
		Arrays.fill(xyword,'_');

		probed = new char[alphab.length]; // array erstellen
		notprobed = new char[alphab.length];
		for (int i = 0; i < alphab.length; i++) {
			probed[i] = '-';
			notprobed[i] = alphab[i];
		}
	}

	public void paint( Graphics g) { // die Grafiken
		
		g.setFont( new Font("Arial", Font.BOLD, 12));
		
		if(los){
			g.setColor(new Color (199, 225, 242)); // Setzt Farbe
			g.fillRect(0, 0, WND_B, WND_H);
			g.setColor(Color.BLACK);
			g.drawImage(getImage(getCodeBase(),"images/eingabe_feld.gif"), 50, 275, this);
			g.drawString("Wort: " + new String(xyword), 85, 310);// Das Ratewort
			if (mistakes != -1) {// Wenn noch kein Fehler gemacht wurde...
				g.drawString("Buchstaben: ", 85, 375);// Buchstaben zeichnen
				g.drawString("Versuche: " + (6-mistakes), 85, 340);// falsche Buchstaben
				for (int i = 0; i < alphab.length; i++) {
					g.drawChars(probed, i, 1, 175 + i * 8, 365);// getippte Buchstaben
					g.drawChars(notprobed, i, 1, 175 + i * 8, 380);// Nicht getippte Buchstaben
				}
			}

			if(mistakes !=-1){
				if(mistakes !=6){
					g.setFont( new Font("Arial", Font.BOLD, 16));
					g.drawString(myquestion, 100, 50);
					g.setFont( new Font("Arial", Font.BOLD, 12));
				}
			}
			
			if(mistakes==5){
				g.setColor(Color.red);
				g.drawString("Achtung: Sie haben nur noch einen Versuch", 180, 402 );
				g.setColor(Color.black);
			}
			
			g.setColor(Color.black);
			g.drawString("Hinweis: Buchstabeneingabe erfolgt über die Tastatur!", 155, 450);
		
		}
		
		
		updatehangman(g); // Hangman updaten
	}// Ende pain(Graphics g)

	@Override
	public void update(Graphics g) {
		paint(g);
	}

	public void updatehangman(Graphics g) {
		
		switch (mistakes) { // Verschiedenen Fälle für anzahl der nciht erratnen
		// Buchstaben
		case 6:// Wort nicht erraten
			g.drawImage(getImage(getCodeBase(),"images/falsch.gif"), 450, 85, this);
			g.setColor(Color.red); // Textfarbe auf Rot setzen
			g.setFont( new Font("Arial", Font.BOLD, 14));
			g.drawString(">>> FALSCH <<<", WND_B / 2 - 70, (WND_H / 2)+30);
			g.setFont( new Font("Arial", Font.BOLD, 12));
			g.setColor(Color.black); // Textfarbe auf Weiß setzen
			g.drawString("Das gesuchte Wort war '" + myword + "'!",
					WND_B / 4 + 50, WND_H / 2 + 70); // nicht erratenes Wort
			ergebnis=false;
			
			break;
		case 5: // 5 Falsch getippte Buchstabe
			g.drawImage(getImage(getCodeBase(),"images/hm5.gif"), SX, SY, this);
			break;
		case 4:// 4 Falsch getippte Buchstabe
			g.drawImage(getImage(getCodeBase(),"images/hm4.gif"), SX, SY, this);
			break;
		case 3:// 3 Falsch getippte Buchstabeccc
			g.drawImage(getImage(getCodeBase(),"images/hm3.gif"), SX, SY, this);
			break;
		case 2:// 2 Falsch getippte Buchstabe
			g.drawImage(getImage(getCodeBase(),"images/hm2.gif"), SX, SY, this);
			break;
		case 1:// 1 Falsch getippter Buchstabe
			g.drawImage(getImage(getCodeBase(),"images/hm1.gif"), SX, SY, this);
			break;
		case 0:// Noch kein Buchstabe falsch getippt
			if(los){
				g.drawImage(getImage(getCodeBase(),"images/hm0.gif"), SX, SY, this);
			}
			break;
		case -1:// Wort erraten
			g.drawImage(getImage(getCodeBase(),"images/richtig.gif"), 450, 85, this);
			g.setColor(Color.green);// Textfarbe auf Grün setzen
			g.setFont( new Font("Arial", Font.BOLD, 14));
			g.setColor(new Color (21, 167, 21)); // Setzt Farbe auf Hellblau
			g.drawString(">>> RICHTIG <<<", WND_B / 2 - 70, WND_H / 2+30);
			g.setFont( new Font("Arial", Font.BOLD, 12));
			g.setColor(Color.black); // Setzt Farbe auf Schwarz
			ergebnis=true;
			break;
		}// Ende Switch
	}// Ende UpdateHangMan (Graphics g)

	// KeyListener
	class KL implements KeyListener {// Keylistener
		public void keyPressed(KeyEvent e) {
		}

		public void keyReleased(KeyEvent e) {
		}

		public void keyTyped(KeyEvent e) {
			char c;
			c = e.getKeyChar(); // Taste holen
			c = Character.toUpperCase(c);
			boolean status = false;// status den Wert "false" zuweisen
			boolean check = false;// Check den Wer "false" zuweisen
			
			int underscores = 0; // Integer für Anzahl der "_" im bisherigen
			// Wort
			for (int i = 0; i < myword.length(); i++) { // "Verschlüsseln" des
				// Ratewortes
				if (c == Character.toUpperCase(myword.charAt(i))) {
					xyword[i] = myword.charAt(i);
					status = true;// Status auf "true" setzen
				}
				if (xyword[i] == '_')// Wenn Ratewort Array
					underscores++;// "_"+1
			}
			
			if(mistakes ==-1){
					
				 JPanel p_weiter = new JPanel();
				 p_weiter.setLayout(null);
		         final JTextArea antwort = new JTextArea(myanswer);
		         antwort.setFont( new Font("Arial", Font.BOLD, 15));
		         antwort.setBackground(new Color (199, 225, 242)); // Setzt Farbe 199, 225, 242
		         antwort.setEditable(false);
		         antwort.setBounds(40, 270, 575, 185);
		         antwort.setLineWrap(true);
		         final JLabel l1 = new JLabel( new ImageIcon(getImage(getCodeBase(),v_image.elementAt(label))));
		         l1.setBounds(50, 50, 100, 100);
		         System.out.println("Bild: "+v_image.elementAt(label));
		         getContentPane().add(antwort);
		         p_weiter.add(antwort);
		         p_weiter.add(l1);
		         
		         final JButton weiter = new JButton("Weiter geht's");
		         weiter.setBounds(200, 450, 105, 20);
		         ActionListener al = new ActionListener() {
		            public void actionPerformed(ActionEvent e) {
		               addKeyListener(control); // hinzufügen
		               getContentPane().remove(weiter);
		               getContentPane().remove(antwort);
		               requestFocus(); //setzt den Focus noch ..
		               if(v_fragen.isEmpty()){
		            	  ende=1;
		                  remove(antwort);
		                  remove(l1);
		                  remove(weiter);
		               }
		               else{
		                  neue_runde();
		                  reinitVariables();
		                  repaint();
		               }
		            }
		         };
		         p_weiter.add(weiter);
		         weiter.addActionListener(al);
		         antwort.setVisible(true);
		         weiter.setVisible(true);
		         l1.setVisible(true);
		         getContentPane().add(p_weiter);
		         p_weiter.requestFocus();
		   }
		
			if (ende==1){
				
				final JButton weiter = new JButton("Exit");
		        weiter.setBounds(200, 450, 105, 20);
		        ActionListener a2 = new ActionListener() {
		        	public void actionPerformed(ActionEvent e) {
		        		System.exit(0);
		        	}
		        };
		        weiter.addActionListener(a2);
				repaint();
			}
			
			
			
			for (int i = 0; i < alphab.length; i++) {// For-Schleife
				// initialisieren
				if (c == alphab[i]) {// wenn Buchstabe im Alphabet ist
					if (probed[i] != c)
						probed[i] = c;
					else
						// anderfalls
						check = true;// Check auf "true" setzten
					if (notprobed[i] == c)
						notprobed[i] = '-';

					if (!status && !check)// wenn der Buchstabe Falsch ist und nicht
						mistakes++; // schon einmal Getippt wurde Fehler +1
					System.out.println(status);
				}
			}
			
			if (!check) // Wenn getippter Buchstabe falsch ist
				tries++;// Versuche +1	

			if (underscores == 0 || mistakes >= 6) {// wenn keine "_" mehr im
				// Wort sind und Fehler >=6
				System.out.println(" (" + myword + ")");// das Ratewort ausgeben
				System.out.println("Anzahl Versuche: " + tries
						+ " davon falsch: " + mistakes);// Anzahl der Versuche
				// ausgeben
				System.out
				.println("Getippte Buchstaben: " + new String (probed));// getippte
				// Buchstaben
				// ausgeben
				System.out.println("Anzahl versch. Buchstaben im Wort: "
						+ (tries - mistakes));// Anzahl der verschiedenen
				// Buchstaben ausgeben
				System.out.println("Trefferquote: "// Trefferquote ausgeben
						+ (((tries - mistakes) * 100) / tries) + "%");
			}
			if (underscores == 0) // wenn keine fehlenden Zeichen im
				mistakes = -1;// Lösungswort sind
			if (mistakes >= 6)// wenn mehr als 5 Fehler gemacht wurden
				mistakes = 6;// Fehler auf 6 setzen
			repaint(); // Grafiken neuzeichnen
		}// Ende Keytyped
	}

	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
	}
}// Ende class KL
```


----------



## MeinerEiner_80 (25. Januar 2008)

Moin!
Man fügt und löscht Komponenten immer aus dem ContentPane des JApplet. Bei dir tauschen immer noch ein paar Codeblöcke auf, in denen du direkt auf das Applet zugreifst.. 
Falls du Java 1.6 nutzt, 
ist es nicht so schlimm, weil dann ein Add() oder Remove() aufruf an das ContentPane weitergeleitet wird. 
Falls nicht, führt das zu Fehlern..

Wieso fügst und löscht du Komponenten in der paint() Methode? Wenn man eine Komponente einfügt und dann sichtbar setzt, wird automatisch wieder die repaint() Methode aufgerufen.. 
Da musst du dir was anderes überlegen.. das geht so nicht...

*grüssle*
MeinerEiner


----------



## moe_joe (25. Januar 2008)

Das mit der paint() Methode ist mir mittlerwiele auch schon aufgefallen. Irgendwann verlieret man echt den überblickt.... habs oben mal geändert.


----------

