6Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
327
327
EMPFEHLEN
-
02.05.10 19:19 #1
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
-
Hallo,
du musst eine Methode schreiben, welche die Werte wieder auf Standard setzt.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
02.05.10 19:49 #3
-
02.05.10 21:57 #4
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)
-
03.05.10 17:45 #5
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."
-
Könntest du mal den Code zeigen?
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
03.05.10 18:39 #7
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!
WolfyGeä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."
-
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ß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
03.05.10 20:03 #9"Der Vorteil der Klugheit besteht darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger."
-
Zeig mal bitte diesen Code.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
03.05.10 20:53 #11Code :
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."
-
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
setzen.Code :1
panel.setFocusable(true);
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ß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
04.05.10 16:59 #13
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
-
Neuladen erzwingen
Von php-kopfkratzer im Forum PHPAntworten: 2Letzter Beitrag: 07.04.08, 14:15 -
Grafik neuladen
Von gamerfunkie im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 25.02.07, 11:20 -
ImageIcon neuladen
Von Benzol im Forum JavaAntworten: 9Letzter Beitrag: 20.05.06, 17:15 -
Neuladen bei Popupaufruf verhindern! Wie?
Von subzero im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 12.10.03, 19:57 -
JS File neuladen
Von Experience1986 im Forum Javascript & AjaxAntworten: 7Letzter Beitrag: 28.12.02, 19:49





Zitieren


Login





