GUI, Button und Label erscheinen nicht

Also, wenn ich deinen Ausschnitt bei mir in ein Applet packe, sieht das folgendermassen aus:
Code:
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
 
Aber in dem Beitrag da drunter von MeinerEiner, steht auch das der gepostete Quellcode keine Fehler enthält!
 
ä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
 
so, hier is der ganze code. ich wünsche viel spaß

Code:
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
 
Zuletzt bearbeitet:
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
 
Das mit der paint() Methode ist mir mittlerwiele auch schon aufgefallen. Irgendwann verlieret man echt den überblickt.... habs oben mal geändert.
 
Zurück