Turtle Wichtig! Wichtig! Morgen Abgabetermin!

Status
Nicht offen für weitere Antworten.

ph4tstyl3z

Neues Mitglied
Hi ich habe ein Problem und zwar muss ich morgen in der Schule ein Java Programm abgeben. Es geht um eine "Turtle". Ich habe das Programm schon so halb fertig. Es soll eine Grafische Benutzeroberfläche mit 3 Buttons entstehen. Ich glaube das habe ich soweit fertig. Nur ich ich kriege diese Sachen nicht mehr hin:
Die "turtle" soll je nach Buttondruck sich bewegen und einen Strich hinter sich herziehen. Also beim "gehen" Button soll die Turtle sich halt in die jeweilige Richtung bewegen und dann noch die "links" und "rechts" Buttons. Beim jeweiligen Button eine Drehung von 90 Grad.

Bin absolut aufgeschmissen weil ich das nicht hinkriege wäre über jede Hilfe dankbar.

Hier mein bis jetzt geschriebenes Programm:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 09.05.2006
  * @author
  */

public class Turtle extends JFrame {
  // Anfang Variablen
  private JButton ButtonGeradeAus = new JButton();
  private JButton ButtonRechts = new JButton();
  private JButton ButtonNachLinks = new JButton();
  // Ende Variablen

  public Turtle(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 368;
    int frameHeight = 338;
    setSize(frameWidth, frameHeight);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    ButtonGeradeAus.setBounds(0, 0, 137, 57);
    ButtonGeradeAus.setText("Gerade aus laufen");
    cp.add(ButtonGeradeAus);
    ButtonGeradeAus.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        ButtonGeradeAusActionPerformed(evt);
      }
    });

    ButtonRechts.setBounds(224, 0, 129, 57);
    ButtonRechts.setText("Nach rechts laufen");
    cp.add(ButtonRechts);
    ButtonRechts.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        ButtonRechtsActionPerformed(evt);
      }
    });

    ButtonNachLinks.setBounds(0, 240, 137, 57);
    ButtonNachLinks.setText("Nach links laufen");
    cp.add(ButtonNachLinks);
    ButtonNachLinks.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        ButtonNachLinksActionPerformed(evt);
      }
    });

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  


  public void ButtonGeradeAusActionPerformed(ActionEvent evt) {

  }

  public void ButtonRechtsActionPerformed(ActionEvent evt) {

  }

  public void ButtonNachLinksActionPerformed(ActionEvent evt) {

  }


  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new Turtle("Turtle");

  }
  
     public void paint (Graphics stift)  {
      stift.setColor(Color.red);
      zeichnevieleQuadrate(stift,150,150,2,5 );
     }
  
  public void zeichnevieleQuadrate (Graphics stift, int xrechtslinks,int yobenunten,int lstart, int k){





         int x=xrechtslinks     ;
         int y=yobenunten     ;
         int l=lstart     ;




        stift.drawLine(x,y,x+l,y);
        stift.drawLine(x+l,y,x+l,y+l);
        stift.drawLine(x,y,x,y+l);
        stift.drawLine(x,y+l,x+l,y+l);

      }
 ;

Wäre über jede Hilfe überaus glücklich!!!
Mfg
 

PyroPi

Aktives Mitglied
Hallo!

ph4tstyl3z hat gesagt.:
Hi ich habe ein Problem und zwar muss ich morgen in der Schule ein Java Programm abgeben.

Na dann wird das ja noch ne lange Nacht ... :lol:
Normalerweise stellt man solche Fragen ja auch nicht erst kurz vor spät.

Also hier ein paar Hinweise:

Da du deine Turtle ja immer nur um 90 Grad drehen mußt, kannst du dir eine globale Variable int richtung anlegen. Bei jedem Klick auf einen der Drehen-Buttons berechnest du richtung + 90 oder - 90, je nachdem, in welche Richtung du drehst. (Wenn die Werte zu groß oder zu klein werden mußt du jeweils 360 subtrahieren oder addieren, damit nur die Werte 0 (oben), 90 (rechts), 180 (unten) und 270 (links) gespeichert werden.).

Das geht dann kurz z.B. so:
Code:
    richtung = (richtung + 90) % 360  // Drehung nach rechts

Für die aktuelle Position legst du dir ebenfalls Variablen an (posX, posY). Beim Klick auf den Gehen-Button ziehst du eine Linie einer bestimmten Länge len von der aktuellen Position in eine der vier Richtungen, je nachdem, welchen Wert richtung gerade hat:

Code:
    switch (richtung) {
        case 90:  // neue Position ist rechts von der aktuellen Position
            neuX = posX + len;
            neuY = posY;
            break;
        case 180:  // neue Position ist unterhalb der aktuellen Position
            neuX = posX;
            neuY = posY + len;
            break;
        ...
    }

    zeichneLinie(posX, posY, neuX, neuY);

    // die neue aktuelle Position setzen
    posX = neuX;
    posY = neuY;

Das mal als Ansatz, den Rest darfst du jetzt selber machen ... :wink:

Viele Grüße,

PyroPi
 

ph4tstyl3z

Neues Mitglied
Mein Problem liegt darin das ich die Buttons nicht mit der aktion verbinden kann bzw. einfach nicht weiß wie es geht...
 

Brainiac

Bekanntes Mitglied
Code:
public class TestFrame extends JFrame implements ActionListener {
    private JButton testButton;

    public TestFrame() {
        testButton = new JButton("Test");
        testButton.addActionListener(this);
        setSize(500,500);
        getContentPane().add(testButton);
        pack();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equalsIgnoreCase("test") {
            System.out.println("TestButton gedrückt");
        }
    }

    public static void main(String argv[]) {
        new TestFrame().setVisible(true);
    }
}

So alles andere wieder du.
 

L-ectron-X

Gesperrter Benutzer
Ich finde die getActionCommand()-Methode ziemlich "steif". Ich empfehle die Verwendung der Methode nur bedingt, denn sobald man den Text auf dem Button ändert muss auch die Abfrage editiert werden. Es genügt schon ein Tippfehler und schon geht gar nichts mehr.
Besser ist die Verwendung von getSource().

Code:
   public void actionPerformed(ActionEvent e) { 
        Object source = e.getSource();
        if(source == testButton) { 
            System.out.println("TestButton gedrückt"); 
        } 
    }

Hier ist es völlig Wurst, was auf dem Button steht.
 

Leroy42

Top Contributor
Hierzu passend gleich mal 'ne Stil-/Resource-Frage.

Wenn eine GUI-Komponente mehrere Button beherbergt, ist es dann
besser denen einen gemeinsamen ActionListener zu verpassen,
der dann, via getSource(), die gewünschte Aktion ausführt, oder lieber
jedem Button seinen eigenen anonymen ActionListener zu gönnen.

Bei der ersten Variante muß ich ja alle Buttons als Instanzvariablen
deklarieren, was ich mir bei der zweiten Variante schenken kann.

Bei der zweiten, von mir derzeit fast ausschließlich benutzten, Variante
wird widerum für jeden Button eine eigene Klasse generiert;
meist nur aus einer Methode mit einer Zeile bestehend.

Was ist eure Vorgehensweise? :shock:
 

L-ectron-X

Gesperrter Benutzer
Ich glaube, diese Frage hat Beni schon mal in einem anderen Thread beantwortet, nur finde ich den nicht mehr.
 

lin

Top Contributor
Also ich bevorzuge die erste Variante, denn ich finde es aus Gründen der Übersichtlichkeit übertrieben, für jeden Button ne eigene Klasse anzulegen, wenn man die Events auch in nur einer Klasse verarbeiten kann. Kommt natürlich teilweise auf die Situation drauf an. Manchmal ist man gezwungen, für ne spezielle Komponenten ne spezielle Verarbeitung zu coden.
 
B

Beni

Gast
Man verwende "javax.swing.Action", und ist den ganzen Krampf mit ActionListenern los :wink:

Ansonsten würde ich für "pro Aktion ein ActionListener" plädieren: je weniger if's, desto einfacher und robuster (und einfacher zu erweitern) das Ganze :bae: (jedem das seine, eine "richtige" Lösung gibt es hier nicht).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
F Vieleck Turtle Java Basics - Anfänger-Themen 4
B BlueJ Turtle nicht gefunden Java Basics - Anfänger-Themen 6
ineedhelpinjava OOP Bitte wichtig Java Basics - Anfänger-Themen 6
Azazel Wie wichtig sind Castings in Java ? Java Basics - Anfänger-Themen 1
B Wie wichtig ist Verwendung von StringBuffer in Schleifen? Java Basics - Anfänger-Themen 10
M Sind ternäre Operatoren für einen guten Programmierstil wichtig ? Java Basics - Anfänger-Themen 10
C Operationen auf Bitebene und Verschiebeoperatoren wichtig? Java Basics - Anfänger-Themen 26
X Nur ein Thread - Ist Threadsafe Berücksichtigung wichtig? Java Basics - Anfänger-Themen 22
L Wichtig! Benötige Hilfe bei Java! Java Basics - Anfänger-Themen 6
F Classpath: Wichtig für Runnable JAR? Java Basics - Anfänger-Themen 2
G welche Teile der api sind wichtig? Java Basics - Anfänger-Themen 3
U zweite Frage: return, wichtig Java Basics - Anfänger-Themen 8
I Schulprojekt !sehr wichtig! Java Basics - Anfänger-Themen 6
T Wie wichtig ist Design Patterns in einer Firma? Java Basics - Anfänger-Themen 8
J Array - wichtig Java Basics - Anfänger-Themen 5
D Ergebnisse als .txt Speichern.wichtig. Java Basics - Anfänger-Themen 47
A Java Installtions Directory wichtig? Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben