tutorials.de Buch-Aktion 05/2012
Like Tree6Danke
  • 1 Beitrag von zerix
  • 1 Beitrag von André Uhres
  • 1 Beitrag von zerix
  • 1 Beitrag von zerix
  • 1 Beitrag von zerix
  • 1 Beitrag von zerix
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
327
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Wolfy0013
    Wolfy0013 Wolfy0013 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Ort
    String getOrt (String nick ){ return ort }
    Beiträge
    61
    Hallo erstmal.
    Also als erstes muss ich sagen, dass ich mit Java zwar halbwegs anständig programmieren kann, allerdings keinerlei Ahnung der theoretischen Seite habe.
    Ich bin mir zum Beispiel nicht einmal sicher was der Unterschied zwischen AWT und Swing ist und wusste deshalb auch nicht in welches Unterforum damit, wofür ich mich hier entschuldige.
    Ich bin gerade dabei ein Spiel zu programmieren, bei dem an eine Klasse in der ich ein JFrame (=Mainklasse) erstelle, eine Klasse mit extends Canvas (=Gameklasse) hinzugefügt wird.
    Nun wird nach einer beendeten Runde die Gameklasse von der Mainklasse removed und eine andere geadded. Nachher soll die Gameklasse wieder an die Mainklasse angefügt werden!
    Mein Problem ist nun, dass die Klasse nicht neu gestartet wird, sondern alles so ist, wie ich sie ausgeblendet habe.
    Meine Frage also: Gibt es eine Möglichkeit, die Klasse neu zu starten, bzw. zurückzusetzen oder zu beenden und dann wieder starten?
    Versucht habe ich bereits, die Klasse neu zu definieren, was aber keinen Erfolg erzielt.
    Code :
    1
    
     game=new game(); //game--> Gameklasse, vorher global definiert


    Ich bedanke mich im Voraus für alle Hilfestellungen,
    Wolfy
     

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    du musst eine Methode schreiben, welche die Werte wieder auf Standard setzt.

    Gruß

    Sascha
    Wolfy0013 bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    Avatar von Wolfy0013
    Wolfy0013 Wolfy0013 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Ort
    String getOrt (String nick ){ return ort }
    Beiträge
    61
    Zitat Zitat von Sascha Schirra Beitrag anzeigen
    Du musst eine Methode schreiben, welche die Werte wieder auf Standard setzt.
    War leichter, als ich mit gedacht hatte. Danke, hat funktioniert!
     

  4. #4
    Avatar von André Uhres
    André Uhres André Uhres ist offline Mitglied
    Registriert seit
    Mar 2009
    Beiträge
    16
    Hallo Wolfy,

    Die Swing Oberflächenkomponenten beginnen alle mit "J". Es ist zwar möglich, AWT und Swing Oberflächenkomponenten zu mischen, es wird aber generell nicht empfohlen. Daher würde ich "Canvas" eher als "JComponent" oder "JPanel" deklarieren.

    Als die ursprüngliche AWT API für JDK 1.0 entwickelt wurde, gab es nur heavyweight Komponenten ("heavyweight" bedeutet, dass die Komponente ihr eigenes undurchlässiges natives Fenster hat).

    Mit der Einführung der lightweight Komponenten in JDK 1.1 (eine "lightweight" Komponente ist eine, die das native Fenster ihres nächsten heavyweight Vorfahrs wiederverwendet), musste das AWT das Malen für lightweight Komponenten im gemeinsamen Java Code einführen. Somit gibt es feine Unterschiede bezüglich des Malvorgangs für heavyweight und lightweight Komponenten.

    Nach dem JDK 1.1, als das Swing Toolkit freigegeben wurde, stellte dieses seine eigenen Malmechanismen vor. In den meisten Fällen ähnelt und beruht der Swing Malmechanismus auf dem AWT. Aber er führt auch einige Unterschiede bezüglich der Mechanismen ein, sowie neue APIs, mit denen die Anwendungen den Malvorgang einfacher anpassen können.

    Wir empfehlen, daß Entwickler für die meisten GUI Bedürfnisse Gebrauch von Swing machen.

    Gruß,
    André
    Geändert von André Uhres (02.05.10 um 22:00 Uhr)
    Wolfy0013 bedankt sich. 

  5. #5
    Avatar von Wolfy0013
    Wolfy0013 Wolfy0013 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Ort
    String getOrt (String nick ){ return ort }
    Beiträge
    61
    Danke, für den Tipp. Ich habe es mal auf mein Programm angewendet und sofort bemerkt, dass das Flackern, das mich ziemlich stört weg war.
    Dann ist mir aufgefallen, dass der Keylistener (der MouseListener schon) plötzlich nicht mehr funktionierte (geadded mit this.addKeyListener(this)) und das Removen und Adden der Klassen mit extends JPanel ) nicht mehr richtig funktioniert:
    Beim ersten Mal klicken (In einer Menü-Klasse, ebenfalls JPanel) zeigt er mir an, dass er die Klasse added, die Paint-Methode einmal aufruft, allerdings zeigt das Programm nichts an. Beim zweiten Mal nach Rückkehr in die Menüklasse geht dann nichts mehr. Er hört auf zu zeichen und malt weder in der Game noch in der Menuklasse.
    Da scheint was an der Aktualisierung des JFrames zu hapern! Ich aktualisiere jetzt nach jedem Klassentausch mit fenster.setVisible(true).
    Tipps.....?
    Danke, Wolfy
     
    "Der Vorteil der Klugheit besteht darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger."

  6. #6
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Könntest du mal den Code zeigen?

    Gruß

    Sascha
    Wolfy0013 bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  7. #7
    Avatar von Wolfy0013
    Wolfy0013 Wolfy0013 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Ort
    String getOrt (String nick ){ return ort }
    Beiträge
    61
    Zitat Zitat von Sascha Schirra Beitrag anzeigen
    Könntest du mal den Code zeigen?
    Gerne, Hier die wichtigsten Auschnitte:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    public class Main{
        static JFrame F;
        //static game game = new game();
        static menu menu = new menu();
        static options op;
        static shop shop;
        static game game;
        static int round=1;
        
        public static void changeCanvas(String name){
            System.out.println(name);
     
            if(name.equals("game")){ // VON MENU INS GAME
                 F.remove(menu);
                 int[] a = {0,0,0,0};
                 game.setData(a,round);
                 F.add(game);
                 F.setVisible(true);
            }
                   else if(name.equals("menu_g")){ //VOM GAME INS MENU
                 F.remove(game);
                 game.reset();
                 F.add(menu);
                 F.setVisible(true);
            }
            //.....
        }
     
            
        public static void main(String[] args) {
            op = new options();
            shop = new shop();
            game= new game();
    //       try {
    //           Runtime.getRuntime().exec("SetRes\\SetRes.exe h1024 v768");
    //      } catch (IOException e) {e.printStackTrace();}
            
                    F =new JFrame();
                //FENSTER OPTIONEN EINSTELLEN (GRÖßE...)
                    F.add(menu);
                    F.setVisible(true);
        
            }

    In der Main erstelle ich das Fenster und eine Funktion, bei der ich mittels mitgegebenen String eine Klasse entferne und hinzufüge.

    Aufrufen in den Klassen geschieht dann so per MouseListener:

    Code :
    1
    2
    3
    4
    5
    
    public void mouse (MouseEvent e){
            
            if(collider.SimpleCollide(30,30,e.getX(),e.getY(),100,100)){ //RECHNET AUS, OB SICH DIE MAUS IN EINEM BESTIMMTEN RAHMEN BEFINDET (return boolean)
                Main.changeCanvas("game");  //Funktion
            }

    Und nocheinmal: Mit CANVAS hat das alle wunderbar funktioniert!

    Wolfy
    Geändert von Wolfy0013 (03.05.10 um 18:42 Uhr)
     
    "Der Vorteil der Klugheit besteht darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger."

  8. #8
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Schau dir mal das CardLayout an.
    http://java.sun.com/docs/books/tutor...yout/card.html

    Wenn eine Komponente neu gezeichent werden soll, erreichst du das mit repaint().

    Gruß

    Sascha
    Wolfy0013 bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  9. #9
    Avatar von Wolfy0013
    Wolfy0013 Wolfy0013 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Ort
    String getOrt (String nick ){ return ort }
    Beiträge
    61
    Zitat Zitat von Sascha Schirra Beitrag anzeigen
    Schau dir mal das CardLayout an.
    Wow, das ging mal wirklich glatt! Danke! Allerdings ist da noch das Problem mit dem KeyListener, der keinerlei Reaktion zeigt.

    Ich adde ihn wie erwähnt einfach bei starten der Klasse mit this.addKeyListener(this); während die Klasse über ein implements KeyListener verfügt.
     
    "Der Vorteil der Klugheit besteht darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger."

  10. #10
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Zeig mal bitte diesen Code.

    Gruß

    Sascha
    Wolfy0013 bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  11. #11
    Avatar von Wolfy0013
    Wolfy0013 Wolfy0013 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Ort
    String getOrt (String nick ){ return ort }
    Beiträge
    61
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    import...
     
    public class game extends JPanel implements KeyListener{
        collide[] collider = new collide[4];
        collide collider_me = new collide();
        animator ballonfire;
        animator bunkerexpl;
        animator[] weaponexpl = new animator[4];
        //.....
        
        game(){     
              MouseListener ml=new MouseAdapter(){ 
                    public void mousePressed(MouseEvent me){    mouse(me);    }   };
              this.addMouseListener(ml); // funktioniert
     
              this.addKeyListener(this); // funktioniert nicht
              int[] money = {0,0,0,0};
              setData(money,0);
        }
     
     
        ///....
     
        public void keyPressed(KeyEvent e) {
            System.out.println("TEST"); // wird nie angezeigt
            if(!intro){
            //-------------BEWEGUNGEN----------------------//
            if(e.getKeyCode()==KeyEvent.VK_RIGHT || e.getKeyCode()==KeyEvent.VK_LEFT){
                if(e.getKeyCode()==KeyEvent.VK_LEFT){       move[0][0]=true;            }
                else{   move[0][1]=true;        }
                checkWinkel(0);
            }
            if(e.getKeyCode()==KeyEvent.VK_N || e.getKeyCode()==KeyEvent.VK_M){
                if(e.getKeyCode()==KeyEvent.VK_N){      move[1][0]=true;            }
                else{   move[1][1]=true;        }
                checkWinkel(1);
            }
     
            //.....
        }

    Bitte sehr!
     
    "Der Vorteil der Klugheit besteht darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger."

  12. #12
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Der KeyListener funktioniert nur, wenn die Komponente die diesen implementiert den Focus hat. Ein JPanel kann normal nicht den Focus bekommen.

    Du musst bei dem JPanel erstmal
    Code :
    1
    
    panel.setFocusable(true);
    setzen.

    Dann musst du einen MouseListener hinzufügen, der bei einem Klick auf das JPanel reagiert, damit das Panel den Focus bekommt.
    Code :
    1
    
    panel.grabFocus();

    Gruß

    Sascha
    Wolfy0013 bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  13. #13
    Avatar von Wolfy0013
    Wolfy0013 Wolfy0013 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Ort
    String getOrt (String nick ){ return ort }
    Beiträge
    61
    Perfekt! Ich habe mir schon gedacht, dass es etwas mit dem Focus zu tun hat, habe aber keine Funktion zum In-den-Focus-nehmen gefunden.
    Danke an alle die mir geholfen haben!
    Wolfy
     
    "Der Vorteil der Klugheit besteht darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger."

Ähnliche Themen

  1. Neuladen erzwingen
    Von php-kopfkratzer im Forum PHP
    Antworten: 2
    Letzter Beitrag: 07.04.08, 14:15
  2. Grafik neuladen
    Von gamerfunkie im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 25.02.07, 11:20
  3. ImageIcon neuladen
    Von Benzol im Forum Java
    Antworten: 9
    Letzter Beitrag: 20.05.06, 17:15
  4. Neuladen bei Popupaufruf verhindern! Wie?
    Von subzero im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 12.10.03, 19:57
  5. JS File neuladen
    Von Experience1986 im Forum Javascript & Ajax
    Antworten: 7
    Letzter Beitrag: 28.12.02, 19:49