Einrichten der ersten arbeitsfähigen Version

This commit is contained in:
2025-06-21 17:27:59 +02:00
parent 616fbacd5f
commit d915f549c5
6 changed files with 224 additions and 0 deletions

26
Kontrolleur.java Normal file
View File

@@ -0,0 +1,26 @@
public class Kontrolleur {
View view;
Zufallszahlengenerator zufallszahlengenerator;
public void setView(View v) {
this.view = v;
}
public void setZufallszahlengenerator(Zufallszahlengenerator z) {
this.zufallszahlengenerator = z;
}
public boolean setObergrenze(String nutzereingabe) {
if(nutzereingabe.matches("[0-9]+")) {
int nutzereingabeAlsZahl = Integer.parseInt(nutzereingabe);
this.zufallszahlengenerator.setObergrenze(nutzereingabeAlsZahl);
return true;
} else {
return false;
}
}
public void weiseAnZufallszahl() {
this.zufallszahlengenerator.erzeugeNeueZufallszahl();
}
}

3
Observer.java Normal file
View File

@@ -0,0 +1,3 @@
public interface Observer {
public void update();
}

9
Subject.java Normal file
View File

@@ -0,0 +1,9 @@
import java.util.ArrayList;
public interface Subject {
ArrayList<Observer> observers = new ArrayList<>();
public void attach(Observer o);
public void detach(Observer o);
public void notifyObservers();
}

63
View.java Normal file
View File

@@ -0,0 +1,63 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class View implements Observer {
Kontrolleur kontrolleur;
Zufallszahlengenerator zufallszahlengenerator;
JFrame fenster;
JButton generierKnopf;
JTextField eingabeFeld;
JLabel ausgabeFeld;
public View() {
fenster = new JFrame("Zufallswahl");
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.setSize(480,240);
eingabeFeld = new JTextField();
generierKnopf = new JButton("Generiere Zufallszahl");
ausgabeFeld = new JLabel("Willkommen beim Zufallszahlengenerator!");
registriereListener();
Container oberfläche = fenster.getContentPane();
oberfläche.add(eingabeFeld, BorderLayout.NORTH);
oberfläche.add(generierKnopf, BorderLayout.CENTER);
oberfläche.add(ausgabeFeld, BorderLayout.SOUTH);
fenster.setVisible(true);
}
public void setKontrolleur(Kontrolleur k) {
this.kontrolleur = k;
}
public void setZufallszahlengenerator(Zufallszahlengenerator z) {
this.zufallszahlengenerator = z;
}
private void registriereListener() {
this.generierKnopf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (kontrolleur.setObergrenze(eingabeFeld.getText())) {
kontrolleur.weiseAnZufallszahl();
} else {
ausgabeFeld.setText("Gib eine ganze Zahl an!");
}
}
});
}
@Override
public void update() {
StringBuilder ausgabeText = new StringBuilder();
ausgabeText.append("Zufallszahl: ");
ausgabeText.append(this.zufallszahlengenerator.getZufallszahl());
ausgabeText.append(" | Obergrenze: ");
ausgabeText.append(this.zufallszahlengenerator.getObergrenze());
this.ausgabeFeld.setText(ausgabeText.toString());
}
}

View File

@@ -0,0 +1,41 @@
public class Zufallszahlengenerator implements Subject {
int obergrenze;
long zufallszahl;
@Override
public void attach(Observer o) {
this.observers.add(o);
}
@Override
public void detach(Observer o) {
this.observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
public void setObergrenze(int obergrenze) {
this.obergrenze = obergrenze;
notifyObservers();
}
public int getObergrenze() {
return this.obergrenze;
}
public void erzeugeNeueZufallszahl() {
int minimum = 1;
this.zufallszahl = minimum + Math.round(Math.random() * (this.obergrenze - minimum));
notifyObservers();
}
public long getZufallszahl() {
return this.zufallszahl;
}
}

82
package.bluej Normal file
View File

@@ -0,0 +1,82 @@
#BlueJ package file
dependency1.from=View
dependency1.to=Zufallszahlengenerator
dependency1.type=UsesDependency
dependency2.from=Kontrolleur
dependency2.to=View
dependency2.type=UsesDependency
dependency3.from=Kontrolleur
dependency3.to=Zufallszahlengenerator
dependency3.type=UsesDependency
editor.fx.0.height=737
editor.fx.0.width=800
editor.fx.0.x=1571
editor.fx.0.y=99
objectbench.height=93
objectbench.width=1007
package.divider.horizontal=0.6
package.divider.vertical=0.8706338939197931
package.editor.height=666
package.editor.width=879
package.editor.x=1232
package.editor.y=446
package.frame.height=873
package.frame.width=1031
package.numDependencies=3
package.numTargets=7
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=60
readme.name=@README
readme.width=49
readme.x=10
readme.y=10
target1.height=70
target1.name=Kontrolleur
target1.showInterface=false
target1.type=ClassTarget
target1.width=120
target1.x=450
target1.y=320
target2.height=70
target2.name=Observer
target2.showInterface=false
target2.type=InterfaceTarget
target2.width=120
target2.x=360
target2.y=150
target3.height=70
target3.name=Main
target3.showInterface=false
target3.type=ClassTarget
target3.width=120
target3.x=10
target3.y=90
target4.height=70
target4.name=View
target4.showInterface=false
target4.type=ClassTarget
target4.width=120
target4.x=100
target4.y=320
target5.height=70
target5.name=Zufallszahlengenerator
target5.showInterface=false
target5.type=ClassTarget
target5.width=200
target5.x=230
target5.y=20
target6.height=70
target6.name=Subject
target6.showInterface=false
target6.type=InterfaceTarget
target6.width=120
target6.x=200
target6.y=150
target7.height=70
target7.name=README.md
target7.type=TextTarget
target7.width=120
target7.x=500
target7.y=20