samedi 6 juin 2015

Erste Schritte Canvas verschwinden nicht mehr

Hallo,

Ich arbeite zur Zeit an einem Schulprojekt. Wir programmieren in einer Gruppe Schiffeversenken und ich bin für die GUI zuständig.
Mittlerweile habe ich einen Startbildschirm. Dort kann ich per button wählen ob ich die Beschreibung lesen oder das Spiel Starten möchte. Das funktioniert auch sehr gut. Nun möchte ich von meinem Spiel, wenn sich die beiden Felder aufgebaut haben, über einen Button die Beschreibung einsehen können. und von der Beschreibung auch wieder zurück zum Spiel. Im Moment kann ich dann nur das Spiel neu starten. Das Problem dabei ist nun wenn ich vom Spiel die Beschreibung aufrufe verschwindet das Spiel und die Beschreibung erscheint(das soll ja so sein) dann geh ich wieder zum Spiel (Die Beschreibung verschwindet und das Spielfeld wird angezeigt) das kann ich 2 mal machen und danach verschwindet meine Beschreibung nicht mehr, aber das Spiel baut sich hinter dem Canvas der Beschreibung auf wenn ich dann noch einmal auf Beschreibung clicke hängt sich die jar ganz auf.
Ich habe hier einmal den Code der Gui eingefügt.
Ich würde mich rießig freuen, wenn mir jemand meinen Fehler aufzeigt oder mir einen Tipp gibt woran es liegen könnte.
Dankeschön schon mal
Grüße Ric

Java Code:

  1.  
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. public class FENSTER extends Frame{
  5.  
  6.  
  7. //größe Fenster
  8. private int x;
  9. private int y;
  10.  
  11.  
  12. private static Frame fenster = null;
  13. private static int kästchen1 [][];
  14. private static int hoehe1 = 10;
  15. private static int breite1 = 10;
  16. static Button SpielStarten = new Button(); // Button starten @ startscreen
  17. static Button Beschreibung = new Button(); // Butto Beschreibung @startscreen
  18. static Button Exit = new Button(); // Buttonexit for all
  19. static Button BeschreibungSpiel = new Button(); // Button Beschreibung wäh Spiels
  20. static Button SpielStartenBeschreibung = new Button(); // Button Spiel Starten aus der Beschreibung
  21. static Canvas beschreibung = new Canvas(); // Canvas Beschreibung
  22. static Canvas Feld1 = new Canvas (); // Canvas Feld1
  23. static Canvas Feld2 = new Canvas(); // Canvas Feld2
  24. private static Canvas feldLinks[][] = new Canvas[breite1][hoehe1];
  25. private static Canvas feldRechts[][] = new Canvas[breite1][hoehe1];
  26.  
  27.  
  28. public FENSTER(){
  29.  
  30.  
  31. if (fenster == null) // Object wird nur erstellt wenn noch kein Fester offen ist
  32. {
  33.  
  34.  
  35. fenster = new Frame("Battleshipdown");
  36. fenster. setResizable (false);
  37. fenster. setSize (400, 150);
  38. fenster. setVisible (true);
  39. fenster. setLayout (null);
  40. fenster. setBackground (Color. black);
  41.  
  42.  
  43. fenster. addWindowListener(new WindowAdapter()
  44. {
  45. public void windowClosing (WindowEvent event)
  46. {
  47. System.exit(0);
  48. };
  49. }
  50. );
  51.  
  52.  
  53. //Erstellt den Startbutton
  54. SpielStarten.setBounds(20, 63, 100, 50);
  55. SpielStarten.setLabel("Spiel Starten");
  56. SpielStarten.setBackground(Color.red);
  57. SpielStarten.addActionListener(new ActionListener()
  58.  
  59.  
  60. {
  61. public void actionPerformed(ActionEvent evt) {
  62. SpielStarten(evt);
  63. }
  64. });
  65. fenster.add(SpielStarten);
  66. //Erstellt den Button für die Beschreibung
  67. Beschreibung.setBounds (140, 63, 100, 50);
  68. Beschreibung.setLabel("Beschreibung");
  69. Beschreibung.setBackground(Color.red);
  70. Beschreibung.addActionListener(new ActionListener()
  71. {
  72. public void actionPerformed(ActionEvent evt)
  73. {
  74. beschreibungAnzeigenStart(evt);
  75. }
  76. }
  77. );
  78. fenster.add(Beschreibung);
  79.  
  80.  
  81. }
  82.  
  83.  
  84. }
  85. //startet das Spiel vom Startscreen
  86. public static void SpielStarten(ActionEvent evt)
  87. {
  88. fenster.setSize(1200, 800); //ändert das Fenster in Spielgröße
  89. fenster.setBackground(Color.yellow);
  90. linkesFeldZeichnen();
  91. rechtesFeldZeichnen();
  92.  
  93.  
  94. fenster.remove(SpielStarten);
  95. fenster.remove(Beschreibung);
  96. //erstellt den Beschreibungs Button um die Beschreibung währrend des Spiels zu aufzurufen
  97. BeschreibungSpiel.setBounds(1100, 25, 100, 50);
  98. BeschreibungSpiel.setLabel("Beschreibung");
  99. BeschreibungSpiel.setBackground(Color.lightGray);
  100. BeschreibungSpiel.addActionListener (new ActionListener()
  101. {
  102. public void actionPerformed(ActionEvent evt)
  103. {
  104. beschreibungAnzeigenSpiel(evt);
  105. }
  106. }
  107. );
  108. fenster.add(BeschreibungSpiel);
  109.  
  110.  
  111. }
  112. //zeigt die Beschreibung währrend des Spiels an
  113. public static void beschreibungAnzeigenSpiel(ActionEvent evt)
  114. {
  115. fenster.remove(BeschreibungSpiel);
  116. fenster.remove(Beschreibung);
  117. fenster.remove(SpielStarten);
  118.  
  119. //BeschreibungSpiel.setVisible(false);
  120. //Beschreibung.setVisible(false); //blendet den Beschreibung button aus
  121. SpielStarten.setVisible(false);
  122. //SpielStartenBeschreibung.setVisible(true);
  123.  
  124. SpielStartenBeschreibung.setBounds(450, 650, 100, 50);
  125. SpielStartenBeschreibung.setLabel("Spiel Starten");
  126. SpielStartenBeschreibung.setBackground(Color.red);
  127. SpielStartenBeschreibung.addActionListener(new ActionListener()
  128.  
  129.  
  130. {
  131. public void actionPerformed(ActionEvent evt) {
  132. SpielStartenBeschreibung(evt);
  133. }
  134. });
  135.  
  136.  
  137.  
  138. fenster.add(SpielStartenBeschreibung);
  139. /*neues Graphik Objekt wird erstellt
  140.   in diesem wird dann das Textfeld erstellt
  141.   */
  142.  
  143.  
  144. beschreibung = new Canvas()
  145.  
  146.  
  147. {
  148.  
  149.  
  150. public void paint (Graphics g)
  151. {
  152.  
  153.  
  154.  
  155.  
  156. //Font erzeugen
  157. Font myFont=new Font("Arial", Font.ITALIC|Font.PLAIN, 18); //erstellt das Text Objekt
  158.  
  159.  
  160. String s="Die Beschreibung wird mit der Vollversion 1.0 Veröffentlicht!"; //fügt den Text ein
  161.  
  162.  
  163. g2d.setFont( myFont ); //Schriftart setzen
  164. g2d.drawString(s,50,50); //String rendern
  165.  
  166.  
  167. }
  168. };
  169.  
  170.  
  171. beschreibung. setBackground(Color.lightGray);
  172.  
  173. beschreibung. setSize (600, 600); //setzt größe des Text Feldes
  174. beschreibung. setLocation (200, 50); //setzt den Ort des Text Feldes
  175. fenster. add (beschreibung); //fügt das Text Feld zum Fenster hinzu
  176.  
  177.  
  178. for (int j = 0; j < hoehe1; j++)
  179. {
  180. for (int k = 0; k < breite1; k++)
  181. {
  182. fenster.remove(feldLinks[j][k]);
  183. }
  184. }
  185. fenster.remove(Feld1);
  186. for (int l = 0; l < hoehe1; l++)
  187. {
  188. for (int o = 0; o < breite1; o++)
  189. {
  190. fenster.remove(feldRechts[l][o]);
  191. }
  192. }
  193. fenster.remove(Feld2);
  194. }
  195. //einblenden der Beschreibung am Start
  196. public static void beschreibungAnzeigenStart(ActionEvent evt)
  197. {
  198. fenster.setSize(700, 800);
  199. fenster.setBackground(Color.lightGray); //ändert das Fenster passend für die Beschreibung
  200.  
  201.  
  202. SpielStartenBeschreibung.setBounds(450, 650, 100, 50);
  203. SpielStartenBeschreibung.setLabel("Spiel Starten");
  204. SpielStartenBeschreibung.setBackground(Color.red);
  205. SpielStartenBeschreibung.addActionListener(new ActionListener()
  206.  
  207.  
  208. {
  209. public void actionPerformed(ActionEvent evt) {
  210. SpielStartenBeschreibung(evt);
  211. }
  212. });
  213. fenster.add(SpielStartenBeschreibung);
  214.  
  215.  
  216. fenster.remove(Beschreibung);
  217. fenster.remove(SpielStarten);
  218. beschreibung = new Canvas() /*neues Graphik Objekt wird erstellt
  219.   in diesem wird dann das Textfeld erstellt
  220.   */
  221. {
  222. public void paint(Graphics g) {
  223.  
  224.  
  225.  
  226.  
  227. //Font erzeugen
  228. Font myFont=new Font("Arial", Font.ITALIC|Font.PLAIN, 18); //erstellt das Text Objekt
  229.  
  230.  
  231. String s="Die Beschreibung wird mit der Vollversion 1.0 Veröffentlicht!"; //fügt den Text ein
  232.  
  233.  
  234. g2d.setFont( myFont ); //Schriftart setzen
  235. g2d.drawString(s,50,50); //String rendern
  236.  
  237.  
  238. }
  239. };
  240. beschreibung. setSize (600, 600); //setzt größe des Text Feldes
  241. beschreibung. setLocation (0, 50); //setzt den Ort des Text Feldes
  242. fenster. add (beschreibung); //fügt das Text Feld zum Fenster hinzu
  243. }
  244. //startet das Spiel aus der Beschreibung heraus
  245. public static void SpielStartenBeschreibung(ActionEvent evt)
  246. {
  247.  
  248.  
  249. fenster.setSize(1200, 800); //ändert das Fenster in Spielgröße
  250. fenster.setBackground(Color.yellow);
  251. linkesFeldZeichnen();
  252. rechtesFeldZeichnen();
  253. fenster.remove(SpielStarten);
  254. fenster.remove(Beschreibung);
  255. fenster.remove(SpielStartenBeschreibung);
  256. //erstellt den Beschreibungs Button um die Beschreibung währrend des Spiels aufzurufen
  257. BeschreibungSpiel.setBounds(1100, 25, 100, 50);
  258. BeschreibungSpiel.setLabel("Beschreibung");
  259. BeschreibungSpiel.setBackground(Color.lightGray);
  260. BeschreibungSpiel.addActionListener (new ActionListener()
  261. {
  262. public void actionPerformed(ActionEvent evt)
  263. {
  264. beschreibungAnzeigenSpiel(evt);
  265. }
  266. }
  267. );
  268.  
  269.  
  270. fenster.add(BeschreibungSpiel);
  271. fenster.remove(beschreibung);
  272. }
  273.  
  274.  
  275. /**
  276.   * Zeichnet das linke Spielfeld
  277.   * dieses ist 10 mal 10 groß und nur grau gefüllt mit schwarzen Trennlinien
  278.   *
  279.   */
  280. public static void linkesFeldZeichnen(){
  281. int x = 55;
  282. int y = 85;
  283. //int name = 0;
  284.  
  285.  
  286. for (int j = 0; j < hoehe1; j++)
  287. {
  288. for (int k = 0; k < breite1; k++)
  289. {
  290. //name++;
  291. feldLinks[j][k] = new Canvas ()
  292. {
  293.  
  294.  
  295. public void paint (Graphics g)
  296. {
  297. g. setColor (Color. cyan);
  298. g. clearRect (0, 0, 47, 47);
  299. g. fillRect (0, 0, 47, 47);
  300.  
  301.  
  302. }
  303. };
  304.  
  305.  
  306. y = y+50;
  307. feldLinks[j][k]. setSize (47, 47);
  308. feldLinks[j][k]. setLocation (x, y);
  309. //System.out.println(y);
  310.  
  311.  
  312. fenster. add (feldLinks[j][k]);
  313. //System.out.println("added");
  314. //System.out.println(k);
  315. //System.out.println(name);
  316.  
  317.  
  318. }
  319. x = x+50;
  320. y = 85;
  321.  
  322.  
  323. }
  324.  
  325.  
  326. Feld1 = new Canvas ()
  327. {
  328.  
  329.  
  330. public void paint (Graphics g)
  331. {
  332. g. setColor (Color. black);
  333. g. clearRect (0,00, 507, 507);
  334. g. fillRect (0,0,507,507);
  335.  
  336.  
  337. }
  338. };
  339. //Feld1. setVisible (true);
  340. Feld1. setSize (510, 510);
  341. Feld1. setLocation (50, 130);
  342. fenster. add (Feld1);
  343.  
  344.  
  345. }
  346.  
  347.  
  348. /**
  349.   * Zeichnet das rechte Spielfeld
  350.   * dieses ist 10 mal 10 groß und nur grau gefüllt mit schwarzen Trennlinien
  351.   *
  352.   */
  353. public static void rechtesFeldZeichnen()
  354. {
  355. Feld2 = new Canvas ()
  356. {
  357.  
  358.  
  359. public void paint (Graphics g)
  360. {
  361. g. setColor (Color. black);
  362. g. clearRect (0,00, 507, 507);
  363. g. fillRect (0,0,507,507);
  364.  
  365.  
  366. }
  367. };
  368. int c = 655;
  369. int v = 85;
  370. for (int l = 0; l < hoehe1; l++)
  371. {
  372. for (int o = 0; o < breite1; o++)
  373. {
  374. feldRechts[l][o] = new Canvas ()
  375. {
  376.  
  377.  
  378. public void paint (Graphics g)
  379. {
  380. g. setColor (Color. cyan);
  381. g. clearRect (0, 0, 47, 47);
  382. g. fillRect (0, 0, 47, 47);
  383.  
  384.  
  385. }
  386. };
  387. v = v+50;
  388. //feldRechts[l][o]. setVisible (true);
  389. feldRechts[l][o]. setSize (47, 47);
  390. feldRechts[l][o]. setLocation (c, v);
  391. //System.out.println(y);
  392.  
  393.  
  394. fenster. add (feldRechts[l][o]);
  395. //System.out.println("added");
  396. //System.out.println(o);
  397. }
  398. c = c+50;
  399. v = 85;
  400. }
  401. //Feld2. setVisible (true);
  402. Feld2. setSize (507, 507);
  403. Feld2. setLocation (650, 130);
  404. fenster. add (Feld2);
  405.  
  406.  
  407. }
  408.  
  409.  
  410. /**
  411.   * Setzt das Kästchen an der Stelle X, Y auf Orange
  412.   */
  413.  
  414.  
  415. public void markiereGetroffen(int x, int y)
  416. {
  417. Graphics g=feldLinks[x][y].getGraphics();
  418. g.setColor (Color. orange); // ändert die aktuelle Farbe
  419. g.clearRect (0, 0, 47, 47);
  420. g.fillRect (0, 0, 47, 47); //zeichnet das Kästchen neu in der neu gesetzten Farbe
  421. //feldLinks[x][y]. setVisible (true); //setzt das kästchen sichtbar
  422.  
  423.  
  424. }


Erste Schritte Canvas verschwinden nicht mehr

0 commentaires:

Enregistrer un commentaire