ActionListener applet beenden

Status
Nicht offen für weitere Antworten.
Ich habe die nette Aufgabe ein Layout für ein Pacmanspiel in java zu erstellen. Das ist soweit erledigt. Nun stehe ich vor dem Problem, meinen Funktionsfähigen Buttons die entsprechenden Aufgaben zu zuweisen. In c++ hätte ich die auch schon erldigt, allerdings hab ich keine Ahnung von java 🙁
Ich bin daher für jede Hilfe dankbar


Problem Number one: Der Exit Button
Nach Betätigung des Buttons "Ende" soll das gesammte Applet geschlossen werden
Code:
       public void actionPerformed(ActionEvent ereignis)
    {
      s = ereignis.getActionCommand();
      
      if (s.equals ("Ende"))
      {
      bbeenden = true;                                              //Bbeenden wird true gesetzt
      }
      
      if (bbeenden == true){
      lab2.setText ("bbeenden ist wahr");                           //Test, ob bbeenden true ist, dies geht!!!
      }

      if (bbeenden == true)                                         //wenn Button Ende geklickt wurde...
       {
        System.exit(0);                                             //Soll  Applet beenden werden
       }
}
Er zeigt mir an, dass bbeenden wahr ist, allerdings den Befehl "System.exit(0);" zum Beenden des Applets irnoriert er ???:L




Problem Number two: Klassenaufruf im Borderlayout

Ich muss nach Buttonklick auf Singleplayer eine Klasse im zentralen Teil des Borderlayouts aufrufen... Sie enthält später das Spielfeld mit dem Pacman und allem drum und dran.
Zum Testen hab ich die Klasse unten genommen. Sie malt einfach ein Rechteck mit den Farben schwarz, rot, gold.
Wie kann ich die Klasse dort aufrufen/anzeigen lassen :bahnhof:
Wäre auch hier über eine Hilfe dankbar
Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;

public class CombineLayout  extends JApplet implements ActionListener
{
 Panel pNorth = new Panel(),
          pWest = new Panel(),
          pSouth= new Panel(),
          pCenter= new Panel();

   public void init ()
   {
    b1 = new Button ("Singleplayer");                              //Button "Singleplayer"
    b1.addActionListener (this);                                       //ActionListener aktivieren für b1
    
    b6 = new Button ("Ende");                                        //Button "Ende"
    b6.addActionListener (this);                                       //ActionListener aktivieren für b6

    setLayout(new BorderLayout());
    add(BorderLayout.NORTH, pNorth);
    add(BorderLayout.WEST, pWest);
    add(BorderLayout.CENTER, pCenter);
    add(BorderLayout.SOUTH, pSouth);

   //Das Zentrum... --> später Spielfeld
    
    pCenter.setLayout(new GridLayout(6, 1));
    pCenter.setBackground(Color.white);

   //Hier soll die Klasse aufgerufen werden!!!!!!

    //Der Westen --> Buttons

    pWest.setLayout(new GridLayout(6, 1));                 //Layout für den Westen
    pWest.add(b1);                                         //Einfügen des Button b1 in den Westen
    pWest.add(b6);                                         //Einfügen des Button b6 in den Westen
 
    //Der Süden --> 

    pSouth.setLayout(new FlowLayout());       //Layout für den Süden
    pSouth.add(lab2);                                   //einfügen des Label lab2 in den Süden, lab2 = Copyright
   }                                                            //init Ende

   public void actionPerformed(ActionEvent ereignis)
    {
      s = ereignis.getActionCommand();
      
      if (s.equals ("Ende"))
      {
      ausgabetext = ("Ende");                                       //Wenn Ende gedrückt ist, enthält "Ausgabetext" den Text "Ende"
      bbeenden = true;                                                 //Bbeenden wird true gesetzt
      }
      
      lab3.setText (ausgabetext);                                //"Ende" wird in einem Label angezeigt
      if (bbeenden == true){
     lab2.setText ("bbeenden ist wahr");                     //Test, ob bbeenden true ist
      }

      if (bbeenden == true)                                      //wenn Button Ende geklickt wurde...
       {
        System.exit(0);                                            //Soll  Applet beenden werden
       }
} 
}

 class Flagge extends JPanel {
 public void paint(Graphics g) {
  g.setColor(Color.black);
  g.drawRect(0,0,200,50);
  g.setColor(Color.red);
  g.drawRect(0,50,200,50);
  g.setColor(Color.yellow);
  g.drawRect(0,100,200,50);
  g.setColor(Color.black);
  g.fillRect(0,0,200,50);
  g.setColor(Color.red);
  g.fillRect(0,50,200,50);
  g.setColor(Color.yellow);
  g.fillRect(0,100,200,50);

 }
 }
 
Also system.exit(0) geht nur wenn das Applet signiert ist. Ausserdem schliesst das gleich noch den Browser. Als Alternative kannst du auf eine andere Seite weiterleiten: this.setDocumentLocation(url) oder so ähnlich.
 
Wenn irgendetwas bei der Ausführung eins Applets schief geht, oder nicht wie vorgesehen funktioniert, lohnt sich immer ein Blick in die Java-Console. Da wäre dir nämlich auch die Exception aufgefallen, die durch das System.exit(0); ausgelöst wurde.

Das von zilti angesprochene Laden einer Webseite sieht für diesen Fall so aus:

Code:
getAppletContext().showDocument(url, "_self");
 
Du könntest auch die stop()-Methode des Applets überschreiben, um z.B. Aufräumarbeiten
durchzuführen und diese bei einem Buttonclick aufrufen.

Aber was verstehst du unter Applet schließen ?

Soll vielleicht der Platz, den das Applet auf der HTML-Seite einnimmt, durch
ein häßliches graues Loch ersetzt werden? 😎
 
Leroy42 hat gesagt.:
Aber was verstehst du unter Applet schließen ?

Soll vielleicht der Platz, den das Applet auf der HTML-Seite einnimmt, durch
ein häßliches graues Loch ersetzt werden? 😎


Unter Schließen schwebte mir die Vorstellung, dass sich das gesammte Browserfenster schließt. Allerdings hast du mich mit dem "grauen Loch" auf ne neue viel einfachere Idee gebracht :lol: :lol:
Danke für die Vorschläge, mal gucken was ich am Ende mache, wichtige ist mir erstmal mein zweites Problem mit dem Klassenaufruf im zentralen Teil

???:L

also etwa ein Befehl wie : pCenter.add(classname);
(der nach Möglichkeit noch das Vorhandene ersetzt)
wenn ich das geschafft habe, bin ich erstmal glücklich :roll:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben