Ampelschaltung

Hallo,

ich habe ein Problem in Java, und zwar soll ich eine Ampelschaltung erstellen. Die erste Seite habe ich schon abgeschlossen, jetzt soll ich als nächstes noch rechts, links und gegenüber jeweils eine weitere Ampel und Fußgängerampel nach dem gleichen Muster wie bisher hinpacken, so dass diese wie an einer Kreuzung nacheinander geschaltet werden. Wäre nett wenn mir jemand dabei helfen kann und mir das hier einfach mal vor macht.


Hier mein bisheriger Quelltext:


Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

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

public class Ampelschaltung extends JFrame {
  // Anfang Attribute
  private JPanel jPanel1 = new JPanel(null, true);
  private JPanel jPanel2 = new JPanel(null, true);
  private JPanel jPanel3 = new JPanel(null, true);
  private JPanel jPanel4 = new JPanel(null, true);
  private JPanel jPanel5 = new JPanel(null, true);
  private JPanel jPanel6 = new JPanel(null, true);
  private JPanel jPanel7 = new JPanel(null, true);
  private JPanel jPanel8 = new JPanel(null, true);
  private JPanel jPanel9 = new JPanel(null, true);
  private JButton jButton1 = new JButton();
 
  // Attribut: Phase der Ampelschaltung
  private int phaseAmpel = 1;
  // Ende Attribute
 
  public Ampelschaltung(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 352;
    int frameHeight = 405;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
   
    jPanel1.setBounds(64, 40, 60, 60);
    jPanel1.setOpaque(true);
    jPanel1.setBackground(Color.WHITE);
    cp.add(jPanel1);
    jPanel2.setBounds(64, 120, 60, 60);
    jPanel2.setOpaque(true);
    jPanel2.setBackground(Color.WHITE);
    cp.add(jPanel2);
    jPanel3.setBounds(64, 200, 60, 60);
    jPanel3.setOpaque(true);
    jPanel3.setBackground(Color.WHITE);
    cp.add(jPanel3);
    jPanel4.setBounds(234, 140, 40, 40);
    jPanel4.setOpaque(true);
    jPanel4.setBackground(Color.WHITE);
    cp.add(jPanel4);
    jPanel5.setBounds(234, 220, 40, 40);
    jPanel5.setOpaque(true);
    jPanel5.setBackground(Color.WHITE);
    cp.add(jPanel5);
    jPanel6.setBounds(249, 180, 10, 200);
    jPanel6.setOpaque(true);
    jPanel6.setBackground(Color.WHITE);
    cp.add(jPanel6);
    jPanel7.setBounds(84, 100, 20, 300);
    jPanel7.setOpaque(true);
    jPanel7.setBackground(Color.WHITE);
    cp.add(jPanel7);
    jButton1.setBounds(128, 296, 100, 48);
    jButton1.setText("Nächste Phase");
    jButton1.setMargin(new Insets(1, 2, 3, 4));
    jButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(jButton1);
    // Ende Komponenten
   
    setVisible(true);
  } // end of public Ampelschaltung
    
      // Anfang Methoden
  public static void main(String[] args) {
    new Ampelschaltung("Ampelschaltung");
  } // end of main
 
  public void jButton1_ActionPerformed(ActionEvent evt) {
    {
      if (phaseAmpel == 1) {
        jPanel1.setBackground(Color.RED);
        jPanel2.setBackground(Color.WHITE);
        jPanel3.setBackground(Color.WHITE);
        jPanel4.setBackground(Color.WHITE);
        jPanel5.setBackground(Color.GREEN);
        phaseAmpel = 2;       //nächste Phase
      } else if (phaseAmpel == 2) {
        jPanel1.setBackground(Color.RED);
        jPanel2.setBackground(Color.WHITE);
        jPanel3.setBackground(Color.WHITE);
        jPanel4.setBackground(Color.RED);
        jPanel5.setBackground(Color.WHITE);
        phaseAmpel = 3;      //nächste Phase
      } else if (phaseAmpel == 3) {
        jPanel1.setBackground(Color.RED);
        jPanel2.setBackground(Color.YELLOW);
        jPanel3.setBackground(Color.WHITE);
        jPanel4.setBackground(Color.RED);
        jPanel5.setBackground(Color.WHITE);
        phaseAmpel = 4;    //nächste Phase
      } else if (phaseAmpel == 4) {
        jPanel1.setBackground(Color.WHITE);
        jPanel2.setBackground(Color.WHITE);
        jPanel3.setBackground(Color.GREEN);
        jPanel4.setBackground(Color.RED);
        jPanel5.setBackground(Color.WHITE);
        phaseAmpel = 5;   //nächste Phase
       
      } else if (phaseAmpel == 5) {
        jPanel1.setBackground(Color.WHITE);
        jPanel2.setBackground(Color.YELLOW);
        jPanel3.setBackground(Color.WHITE);
        jPanel4.setBackground(Color.RED);
        jPanel5.setBackground(Color.WHITE);
        phaseAmpel = 6;   //nächste Phase
       
      } else if (phaseAmpel == 6) {
        jPanel1.setBackground(Color.RED);
        jPanel2.setBackground(Color.WHITE);
        jPanel3.setBackground(Color.WHITE);
        jPanel4.setBackground(Color.RED);
        jPanel5.setBackground(Color.WHITE);
        phaseAmpel = 1;   //von vorne
       
      }// end of if
     
    } // end of jButton1_ActionPerformed 
   
   
  } // Ende Methoden
} // end of class Ampelschaltung
Danke im Vorraus!
 
Zuletzt bearbeitet:

Tarrew

Top Contributor
Also "einfach vormachen" hilft dir am Ende auch nicht ;)

Was hast du denn schon probiert und woran scheiterst du? Im Prinzip hast du ja nur zusätzliche Zustände. Wie man die Farben setzt etc. weißt du ja.
 

Tarrew

Top Contributor
Wenn du einfach nur die fertige Lösung willst, solltest du hier vorbeigucken:
http://www.java-forum.org/forum/private-stellangebote-und-stellensuche-von-usern.97/
Ein bisschen Eigeninitiative ist hier schon gefragt.

Du hast dir ja schonmal zwei neue JPanel's "jPanel8" und "jPanel9" erstellt. Da wirst du vermutlich noch ein paar mehr brauchen. Mit der setBounds-Methode kannst du die JPanels verschieben und die Größe festlegen. Wie du es ja auch schon vorher gemacht hast. Da musst du halt ein bisschen mit den Werten rumspielen bis du dein gewünschtes Ergebnis hast.

Bezüglich der Farben hilft es dir vllt. wenn du dir mal die Zustandsmaschine zu der Ampelschaltung auf ein Blatt zeichnest. Dann lässt sich der bestehende Code relativ leicht erweitern.
 
K

kneitzel

Gast
Tarrew hat Dir den Weg doch aufgezeigt. Wo ist bitte Dein Problem? Ich habe fast das Gefühl, dass der Code oben nicht einmal von Dir stammt und Du daher total aufgeschmissen bist gerade. Wende Dich dann doch an denjenigen, der den Code oben erstellt hat - evtl. macht er dann auch noch den Rest für dich?

Oder sollte mich mein Gefühl jetzt irren? Dann täte es mir leid und die erste Frage wäre dann wichtig: Was für ein Problem hast Du mit der Aufgabe? Was verstehst Du beim aufgezeigten Weg von Tarrew nicht?
 

JStein52

Top Contributor
Naja, war nicht wirklich mein Codeabschnitt. Ich habe da nur die Phasenfortschaltung eingefügt.

Aber ansonsten gilt natürlich was @Tarrew geschrieben hat: Überlegen welche JPanels noch für die fehlenden Ampeln gebraucht werden, diese positionieren und die Beim Buttonclick die Phasen fortschalten und die Farben setzen. Das Gerüst funktioniert ja jetzt mit zwei Ampeln. Links eine rot/grün/gelb und rechts eine rot/grün - Fussgängerampel. Reine Fleissarbeit.
 

Jardcore

Top Contributor
Wie wäre es mit ein Ampel Objekt erstellst, diese Ampel hat dann drei Leuchten. Und zusätzlich noch zwei Koordinaten x und y. Die Koordinaten bestimmen dabei auch die Positionen der Leuchten. Und die Zustände beschreibt dann ein Ampelsteuerung Objekt.

Dann kannst du einfach new Ampel(x,y); aufrufen und zack kannst du die Ampel hinschieben wo du willst.
 
K

kneitzel

Gast
Also ich finde diese negativen Gedanken nicht gut. Anderen zu helfen ist hier eine freiwillige Leistung. Wer das möchte ist herzlich willkommen. Wer nicht: Auch om. Ich sehe das nicht als Ausnutzung. Ich habe Anderen schon bei kommerziellen Projekten geholfen. Die wurden für die Arbeit, die ich gemacht habe, bezahlt.

Aber wurde ich ausgenutzt? Nein. Ich wurde fürstlich bezahlt - freundliche Worte sind ein toller Lohn für eine Freizeit-Tätigkeit. Ich habe auch andere Hobbies, wo ich sogar damit lebe, hin und wieder angemacht zu werden. Aber ich mache, was ich für richtig halte und lasse mich da nicht beirren. Und ich konzentriere mich auf das Positive.

Und auch die andere Sicht ist wichtig: Da hat jemand eine Aufgabe bekommen, die er nicht lösen kann. Nun sucht er und findet eine Teillösung, die er evtl. nicht versteht. Damit fragt er um Hilfe. Ist doch so weit alles ok. Ob wir ihm helfen können ist eine andere Frage, da ggf. Grundlagen fehlen. Aber hier gibt es nicht die Absicht, jemanden auszunutzen sondern nur die Absicht, eine Aufgabe mit wenig Aufwand zu lösen. Das ist legitim und ok. Nur evtl. stimmen die Vorstellungen nicht und wir können ihm nicht mal eben so mit paar kleinen Posts alle Geheimnisse der Software Entwicklung vermitteln :)

Daher: Ruhig positiver heran gehen.
 
X

Xyz1

Gast
Sollte die Schaltung/Ausgabe ungefähr so sein: ?
Code:
Ampel 1 gelb (0. Sek.)
Ampel 2 gelb (0. Sek.)
Ampel 3 gelb (0. Sek.)
Ampel 4 gelb (0. Sek.)
Ampel 1 rot! (1. Sek.)
Ampel 2 rot! (1. Sek.)
Ampel 3 rot! (1. Sek.)
Ampel 4 rot! (1. Sek.)
Ampel 1 grün ... (10. Sek.)
Ampel 2 grün ... (10. Sek.)
Ampel 1 gelb (15. Sek.)
Ampel 2 gelb (15. Sek.)
Ampel 1 rot! (16. Sek.)
Ampel 2 rot! (16. Sek.)
Ampel 4 grün ... (17. Sek.)
Ampel 3 grün ... (17. Sek.)
Ampel 4 gelb (22. Sek.)
Ampel 3 gelb (22. Sek.)
Ampel 4 rot! (23. Sek.)
Ampel 3 rot! (23. Sek.)
Ampel 1 grün ... (25. Sek.)
Ampel 2 grün ... (25. Sek.)
Ampel 1 gelb (30. Sek.)
Ampel 2 gelb (30. Sek.)
Ampel 1 rot! (31. Sek.)
Ampel 2 rot! (31. Sek.)
Ampel 4 grün ... (32. Sek.)
Ampel 3 grün ... (32. Sek.)
Ampel 4 gelb (37. Sek.)
Ampel 3 gelb (37. Sek.)
Ampel 3 rot! (38. Sek.)
Ampel 4 rot! (38. Sek.)
Ampel 1 grün ... (40. Sek.)
Ampel 2 grün ... (40. Sek.)
Ampel 1 gelb (45. Sek.)
Ampel 2 gelb (45. Sek.)
Ampel 1 rot! (46. Sek.)
Ampel 2 rot! (46. Sek.)
Ampel 4 grün ... (47. Sek.)
Ampel 3 grün ... (47. Sek.)
Ampel 3 gelb (52. Sek.)
Ampel 4 gelb (52. Sek.)
Ampel 3 rot! (53. Sek.)
Ampel 4 rot! (53. Sek.)
Ampel 1 grün ... (55. Sek.)
Ampel 2 grün ... (55. Sek.)
Ampel 1 gelb (60. Sek.)
Ampel 2 gelb (60. Sek.)
Ampel 1 rot! (61. Sek.)
Ampel 2 rot! (61. Sek.)
Ampel 3 grün ... (62. Sek.)
Ampel 4 grün ... (62. Sek.)
Ampel 3 gelb (67. Sek.)
Ampel 4 gelb (67. Sek.)
Ampel 3 rot! (68. Sek.)
Ampel 4 rot! (68. Sek.)
Ampel 1 grün ... (70. Sek.)
Ampel 2 grün ... (70. Sek.)
Ampel 1 gelb (75. Sek.)
Ampel 2 gelb (75. Sek.)
Ampel 1 rot! (76. Sek.)
Ampel 2 rot! (76. Sek.)
Ampel 3 grün ... (77. Sek.)
Ampel 4 grün ... (77. Sek.)
Ampel 3 gelb (82. Sek.)
Ampel 4 gelb (82. Sek.)
Ampel 3 rot! (83. Sek.)
Ampel 4 rot! (83. Sek.)
Ampel 1 grün ... (85. Sek.)
Ampel 2 grün ... (85. Sek.)
Ampel 1 gelb (90. Sek.)
Ampel 2 gelb (90. Sek.)
Ampel 1 rot! (91. Sek.)
Ampel 2 rot! (91. Sek.)
Ampel 3 grün ... (92. Sek.)
Ampel 4 grün ... (92. Sek.)
Ampel 3 gelb (97. Sek.)
Ampel 4 gelb (97. Sek.)
Ampel 3 rot! (98. Sek.)
Ampel 4 rot! (98. Sek.)
Ampel 1 grün ... (100. Sek.)
Ampel 2 grün ... (100. Sek.)

Ampel 1 und 2 ist west ost, Ampel 3 und 4 ist nord süd.

Das zwischen Ampel 1 und 2 rot und dann grün nur 1 Sek. liegt (und zwischen Ampel 3 und 4 2 Sek.), ist darstellungs-rundungs-bedingt (an dieser Stelle hab ich nicht gerundet).

Ich kann dir so etwas schreiben, aber das kostet etwas, einfach ein jobangebot in den dafür passenden Bereich rein.

Edit: Wieso sind zu Programmanfang alle Ampeln rot? Na, das musst du selber herausfinden. ;D
 

Neue Themen


Oben