Willkommen bei Network & Security     remoteshell-security.com
Partnerseiten
login.php?sid=a103126a6ebe28325ca3bc99f9bcb67b profile.php?mode=register&sid=a103126a6ebe28325ca3bc99f9bcb67b faq.php?sid=a103126a6ebe28325ca3bc99f9bcb67b memberlist.php?sid=a103126a6ebe28325ca3bc99f9bcb67b search.php?sid=a103126a6ebe28325ca3bc99f9bcb67b index.php?sid=a103126a6ebe28325ca3bc99f9bcb67b

Foren-Übersicht » Programmierung » Neuzeichnen mit repaint()! Aber wie? (Java)
Neues Thema eröffnen  Neue Antwort erstellen Vorheriges Thema anzeigen :: Nächstes Thema anzeigen 
Neuzeichnen mit repaint()! Aber wie? (Java)
BeitragVerfasst am: 21.01.2007 15:18 Antworten mit Zitat
Brück
Anmeldedatum: 20.05.2006
Beiträge: 1




Hi Leute,Ich bin noch ziemlich unerfahren in Java und bin grad aus Übungszwecken das Spiel Hangman am programmieren. Ich hab jedoch ein Problem mit dem Zeichnen, und zwar will ich das bei einem Fehler, das Bild (Strichmännchen am Galgen) immer weiter gezeichnet wird. Ich denke ich haben es bis jetzt richtig in der paint() methode implementiert, jedoch weiss ich nicht wie man diese Methode während der Laufzeit ein weiteres mal aufruft. Meines erachtens müsste das mit der repaint() methode gehen, jedoch weiss ich nicht wie. Ich würde mich sehr über eure Hilfe freuen Wink!
THX im Voraus!

Hier mein Quellcode:

Code:
import java.awt.*;
import java.awt.event.*;

public class HangmanX extends Frame implements ActionListener,WindowListener{
   
   static String Wort = "Tevion";
   String s;
   int Fehler = 0;
   Label l1,l2,l3,l4,l5,l6;
   TextField tf;
   Button b;
   
   public HangmanX(){
      
      super("Hangman-X");
      setLayout(null);
      setSize(440,200);
      setVisible(true);
      addWindowListener(this);
      
      Button b1 = new Button("Eingeben");
      b1.setSize(75,25);
      b1.setLocation(160,160);
      b1.setVisible(true);
      b1.addActionListener(this);
      add(b1);
      
      tf = new TextField();
      tf.setSize(120,25);
      tf.setLocation(15,160);
      tf.setVisible(true);
      add(tf);
      
      l1 = new Label("T");
      l1.setSize(20,20);
      l1.setLocation(60,30);
      l1.setVisible(false);
      add(l1);
      
      l2 = new Label("e");
      l2.setSize(20,20);
      l2.setLocation(80,30);
      l2.setVisible(false);
      add(l2);
      
      l3 = new Label("v");
      l3.setSize(20,20);
      l3.setLocation(100,30);
      l3.setVisible(false);
      add(l3);
      
      l4 = new Label("i");
      l4.setSize(20,20);
      l4.setLocation(120,30);
      l4.setVisible(false);
      add(l4);
      
      l5 = new Label("o");
      l5.setSize(20,20);
      l5.setLocation(140,30);
      l5.setVisible(false);
      add(l5);
      
      l6 = new Label("n");
      l6.setSize(20,20);
      l6.setLocation(160,30);
      l6.setVisible(false);
      add(l6);
      
   }

   public static void main(String[] args) {

      HangmanX hx = new HangmanX();
      hx.repaint(10);

   }
   
   public void paint(Graphics g){
      
      g.drawLine(60, 50, 70, 50);
      g.drawLine(80, 50, 90, 50);
      g.drawLine(100, 50, 110, 50);
      g.drawLine(120, 50, 130, 50);
      g.drawLine(140, 50, 150, 50);
      g.drawLine(160, 50, 170, 50);
      g.drawLine(240, 0, 240, 200);
      
      /*g.drawLine(330,180,330,40);
      g.drawLine(280,180,380,180);
      g.drawLine(330,40,400,40);
      g.drawLine(330,60,350,40);
      g.drawLine(400,40,400,60);
      g.drawOval(390,60,22,22);
      g.drawLine(395,65,400,70);
      g.drawLine(395,70,400,65);
      g.drawLine(402,65,407,70);
      g.drawLine(402,70,407,65);
      g.drawLine(395,75,407,75);
      g.drawLine(401,81,401,112);
      g.drawLine(401,85,390,105);
      g.drawLine(401,85,412,105);
      g.drawLine(401,112,393,135);
      g.drawLine(401,112,409,135);*/
      
      if(Fehler == 1){
      g.drawLine(280, 180, 330, 180);
      }else{
         if(Fehler == 2){
            g.drawLine(330,180,330,40);
         }else{
            if(Fehler == 3){
               g.drawLine(330,40,400,40);
            }else{
               if(Fehler == 4){
                  g.drawLine(330,60,350,40);
               }else{
                  if(Fehler == 5){
                     g.drawLine(400,40,400,60);
                  }else{
                     if(Fehler == 6){
                        g.drawOval(390,60,22,22);
                        g.drawLine(395,65,400,70);
                        g.drawLine(395,70,400,65);
                        g.drawLine(402,65,407,70);
                        g.drawLine(402,70,407,65);
                        g.drawLine(395,75,407,75);
                     }else{
                        if(Fehler == 7){
                               g.drawLine(401,81,401,112);
                        }else{
                           if(Fehler == 8){
                              g.drawLine(401,85,390,105);
                              g.drawLine(401,85,412,105);
                           }else{
                              if(Fehler == 9){
                                 g.drawLine(401,112,393,135);
                                 g.drawLine(401,112,409,135);
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }


   public void actionPerformed(ActionEvent e) {
      
      if(e.getActionCommand().equals("Eingeben")){
         s = tf.getText();
         
         if(s.equalsIgnoreCase(l1.getText())){
            l1.setVisible(true);
         }
         else{
            
            if(s.equalsIgnoreCase(l2.getText())){
               l2.setVisible(true);
            }
            else{
      
               if(s.equalsIgnoreCase(l3.getText())){
                  l3.setVisible(true);
               }
               else{

                  if(s.equalsIgnoreCase(l4.getText())){
                     l4.setVisible(true);
                  }
                  else{
                     
                     if(s.equalsIgnoreCase(l5.getText())){
                        l5.setVisible(true);
                     }
                     else{
                        if(s.equalsIgnoreCase(l6.getText())){
                           l6.setVisible(true);
                        }
                        else{
                           System.out.println("Der Buchstabe ist nicht im Wort enthalten!");
                           Fehler++;
                           System.out.println("Anzahl der Fehler: "+Fehler);
                           if(Fehler == 9){
                              System.out.println("Sie haben leider verloren!");
                           }
                        }
                     }
                  }
               }
            }
         }   
         
      }
   }
   
   public void windowActivated(WindowEvent arg0) {}
   public void windowClosed(WindowEvent arg0) {}
   public void windowClosing(WindowEvent arg0) {System.exit(0);}
   public void windowDeactivated(WindowEvent arg0) {}
   public void windowDeiconified(WindowEvent arg0) {}
   public void windowIconified(WindowEvent arg0) {}
   public void windowOpened(WindowEvent arg0) {}

}


Gruß Andreas
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: 21.01.2007 16:12 Antworten mit Zitat
duddits
Anmeldedatum: 03.01.2006
Beiträge: 569
Wohnort: /proc




Hi,

also erstmal die Veränderung an deinem Quelltext damit dein Problem vorerst gelöst ist:
Code:

import java.awt.*;
import java.awt.event.*;

public class HangmanX extends Frame implements ActionListener,WindowListener{
   
   static String Wort = "Tevion";
   String s;
   int Fehler = 0;
   Label l1,l2,l3,l4,l5,l6;
   TextField tf;
   Button b1;
   
   public HangmanX(){
     
      super("Hangman-X");
      setLayout(null);
      setSize(440,200);
      setVisible(true);
      addWindowListener(this);
     
      b1 = new Button("Eingeben");
      b1.setSize(75,25);
      b1.setLocation(160,160);
      b1.setVisible(true);
      b1.addActionListener(this);
      add(b1);
     
      tf = new TextField();
      tf.setSize(120,25);
      tf.setLocation(15,160);
      tf.setVisible(true);
      add(tf);
     
      l1 = new Label("T");
      l1.setSize(20,20);
      l1.setLocation(60,30);
      l1.setVisible(false);
      add(l1);
     
      l2 = new Label("e");
      l2.setSize(20,20);
      l2.setLocation(80,30);
      l2.setVisible(false);
      add(l2);
     
      l3 = new Label("v");
      l3.setSize(20,20);
      l3.setLocation(100,30);
      l3.setVisible(false);
      add(l3);
     
      l4 = new Label("i");
      l4.setSize(20,20);
      l4.setLocation(120,30);
      l4.setVisible(false);
      add(l4);
     
      l5 = new Label("o");
      l5.setSize(20,20);
      l5.setLocation(140,30);
      l5.setVisible(false);
      add(l5);
     
      l6 = new Label("n");
      l6.setSize(20,20);
      l6.setLocation(160,30);
      l6.setVisible(false);
      add(l6);
     
   }

   public static void main(String[] args) {

      HangmanX hx = new HangmanX();
      hx.repaint(10);

   }
   
   public void paint(Graphics g){
     
      g.drawLine(60, 50, 70, 50);
      g.drawLine(80, 50, 90, 50);
      g.drawLine(100, 50, 110, 50);
      g.drawLine(120, 50, 130, 50);
      g.drawLine(140, 50, 150, 50);
      g.drawLine(160, 50, 170, 50);
      g.drawLine(240, 0, 240, 200);

     
   }


   public void actionPerformed(ActionEvent e) {
      Graphics g = getGraphics();
      if(e.getActionCommand().equals("Eingeben")){
         s = tf.getText();
         
         if(s.equalsIgnoreCase(l1.getText())){
            l1.setVisible(true);
            repaint();
         }else if(s.equalsIgnoreCase(l2.getText())){
            l2.setVisible(true);
            repaint();
         }else if(s.equalsIgnoreCase(l3.getText())){
             l3.setVisible(true);
             repaint();
         }else if(s.equalsIgnoreCase(l4.getText())){
             l4.setVisible(true);
             repaint();
         }else if(s.equalsIgnoreCase(l5.getText())){
             l5.setVisible(true);
             repaint();
         }else if(s.equalsIgnoreCase(l6.getText())){
             l6.setVisible(true);
             repaint();
         }else{
            System.out.println("Der Buchstabe ist nicht im Wort enthalten!");
             Fehler++;
             System.out.println("Anzahl der Fehler: "+Fehler);
             if (Fehler == 1) {
                g.drawLine(280, 180, 330, 180);
               }else if (Fehler == 2) {
               g.drawLine(330,180,330,40);
               }else if (Fehler == 3) {
               g.drawLine(330,40,400,40);
               }else if (Fehler == 4) {
               g.drawLine(330,60,350,40);
               }else if (Fehler == 5) {
               g.drawLine(400,40,400,60);
               }else if (Fehler == 6) {
                 g.drawOval(390,60,22,22);
                 g.drawLine(395,65,400,70);
                 g.drawLine(395,70,400,65);
                 g.drawLine(402,65,407,70);
                 g.drawLine(402,70,407,65);
                 g.drawLine(395,75,407,75);
               }else if (Fehler == 7) {
               g.drawLine(401,81,401,112);
               }else if (Fehler == 8) {
               g.drawLine(401,85,390,105);
                 g.drawLine(401,85,412,105);
               }else if (Fehler == 9) {
               g.drawLine(401,112,393,135);
                 g.drawLine(401,112,409,135);
                 System.out.println("Sie haben leider verloren!");
                 b1.setEnabled(false);
                 
               }
             
       }
         
      }
         
         
         
         
             
   }
   
   public void windowActivated(WindowEvent arg0) {}
   public void windowClosed(WindowEvent arg0) {}
   public void windowClosing(WindowEvent arg0) {System.exit(0);}
   public void windowDeactivated(WindowEvent arg0) {}
   public void windowDeiconified(WindowEvent arg0) {}
   public void windowIconified(WindowEvent arg0) {}
   public void windowOpened(WindowEvent arg0) {}

}


Was habe ich nun geändert?
Zunächst einmal habe ich deine if else if Verschachtelungen was auseinander genommen.
Nun sind es nur noch if bzw. if else Anweisungen somit ist die Abarbeitung deines Codes ein wenig effektiver.
Weiterhin habe ich ohne die repaint()-Methode garbeitet da diese nicht so mein Fall ist.
Nunja ich habe jetzt einfach ein Graphics-Objekt in actionPerformed() eingefügt und greife darüber auf die entsprechende Funktion (drawLine()) zurück.

Aber es gibt noch das Problem das bei Minimierung des Programms der Inhalt von der Fläche gelöscht wird, da ein repaint() automatisch ausgeführt wird.
Falls dich das stört muss du dich mal schlau machen wie man sich da Abhilfe schaft.

Nun gut kommen wir zum unschönen Teil. Also dein Programm weißt bei weiterer Entwicklung eine Menge Probleme auf, da es sehr statisch Aufgabaut ist.
Das heißt das du bei Verwendung eines anderen Wortes zum Erraten alles im Quelltext ändern musst.
Hier sollte man das Programm vll. in mehrere Klassen aufteilen und isch die Vorteile von OOP zu nutze machen.

mfg duddits
Zj

_________________
Quidquid agis, prudenter agas et respice finem!

Jabber ID: duddits@amessage.info
Webseite: http://www.remoteshell-security.com
Weblog: http://blog.remoteshell-security.com
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Jabber ID
Neuzeichnen mit repaint()! Aber wie? (Java)
Foren-Übersicht » Programmierung
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Alle Zeiten sind GMT + 1 Stunde  
Seite 1 von 1  

  
  
 Neues Thema eröffnen  Neue Antwort erstellen  


Forensicherheit

Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin
Deutsche Übersetzung von phpBB.de


remoteshell-security.com | Partner | Boardregeln | Impressum