Eine Idee umsetzen ganz schnell!?

shepherd333

Mitglied
Hallo Experten,
es tut mir leid dass ich euch damit auf die Nerven gehen muss aber ich bin leider echt kein Software-Experte trotz meiner Java-Software-Ausbildung vom letzten Jahr.
Ich habe eine Idee zu einer App und brauche sehr schnell einfach nur einen Prototypen.
Jetzt das ganze mit Java aufzubauen mittels den Tools die dort angeboten werden denke ist keine gute Idee.
Jetzt gibt es so neue Tools wie "Flutter".
Was würdet ihr mir empfehlen wenn ich eine gaaaaaanz einfache App erstellen möchte wo dir Fragen gestellt werden und dann am Ende eine Auswertung kommt anhand deiner Antworten!?

LG,
Anfänger
 

Jw456

Top Contributor
Soll das für Android sein, weil du Flutter benutzen willst?
Flutter ist das Framework und Programmiert wird das meistes in Dart nicht Java.
 

shepherd333

Mitglied
Soll das für Android sein, weil du Flutter benutzen willst?
Flutter ist das Framework und Programmiert wird das meistes in Dart nicht Java.
Also meine Info ist, Flatter ist ein unabhängiges Tools und es kann in alle Platformen compiliert/übersetzt werden. Also egal ob Android oder iOS.
Ich will nur so rasch wie möglich einen Prototypen aufsetzen. Mit dem geringsten Aufwand quasi.
Das als Formular in Java zu machen wäre eine Lösung die mir einfällt aber glaube extrem umständlich wäre. Ich müsste so 10 bis 20 Fragen tellen. Mit 2 oder 3 Antwortmöglichkeiten. Und dann eine Auswertung mit End-resultat.

Am Ende des Tages will man doch eh immer alles auf alle Platformen zum laufen bekommen. Denke auch das es für fast jeden Sch* schon irgendein Tool gibt um es zu convertieren. Das ist aber jetzt nicht mein Problem. Erstmal möchte ich die Sache mal umsetzen können.
Ich kann das ganze danach immer noch mit einem ganz anderen Tool aufsetzen oder portieren.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Kommt darauf an, welchem Zweck der Prototyp dienen soll. Manchmal reichen Wireframes, manchmal kannst Du auch mit Screenshots arbeiten. Wenns funktionaler sein soll, geht auf die Schnelle auch HTML und JavaScript. Es gibt auch Online-Tools, mit denen man einen App simulieren kann, um dem Anwender zu zeigen: so in etwa wird es am Ende funktionieren bzw. aussehen.
 

KonradN

Top Contributor
Also wenn multi Platform, dann ist Flutter eine Idee. Aber man könnte auch Xamarin nehmen - da hast du für Xamarin Forms wohl auch einen Designer im Visual Studio, so dass Du da einfach die UI zusammen klickern kannst.

Oder man greift zu einem Low Code / No Code Ansatz. LiveCode habe ich mir mal angesehen: https://livecode.com/
Da sind so Applikationen sehr einfach umzusetzen - aber das Tooling kostet entsprechend Geld. (Das kommerzielle gibt es regelmäßig als Angebot … aber auch da kostet es immer noch einiges!)
 

Hansen_07

Aktives Mitglied
Jetzt das ganze mit Java aufzubauen mittels den Tools die dort angeboten werden denke ist keine gute Idee.
Jetzt gibt es so neue Tools wie "Flutter".
Was würdet ihr mir empfehlen wenn ich eine gaaaaaanz einfache App erstellen möchte wo dir Fragen gestellt werden und dann am Ende eine Auswertung kommt anhand deiner Antworten!?

LG,
Anfänger

Also wenn du wirklich jeglichen Aufwand vermeiden möchtest und Java + passende Frameworks und/oder Tools für gänzlich ungeeignet hältst (warum eigentlich?), dann gäbe es so etwas wie Google Forms oder vergleichbare Fertiglösungen.
 

shepherd333

Mitglied
So Leute, ich hatte erst heute Zeit es erstmal langsam anzugehen.
Das ganze bisher von mir erwähnte dauert extreme lange zum installieren.
Hab jetzt erstmal Eclipse und OpenJDK installiert und bin mal am basteln von Comboboxen.

Ist das die beste Methode jetzt mit Java in Eclipse mir eine Umfrage zu basteln!?
Also ich würde gerne so 6 bis 8 Comboboxen basteln. Eine kurze Überschrift oder Text daneben hinstellen, damit die Leute wissen was sie auswählen sollen und dann im actionPerformormed (ActionEvent e) schreibe ich dann meine Logik rein.

DENN (unbedingt WICHTIG):
Ich muss bei Frage1: Auswahl 1 dem Wert A eine +1 zurechnen, bei Auswahl B aber dem Wert B eine +1,
und das kann dann bei Frage2 so aussehen, dass bei Auswahl 1 der Wert B eine +2 bekommt.
Am Ende brauchen ich eine Auswertung die sagt welche Werte die meisten Punkte haben und je nachdem einen bestimmten Text auswirft.
Comboboxen find ich erstmal am einfachsten und übersichtlicher als JFrame.
Oder kennt ihr was besseres?


Außerdem: Wie positioniere ich jetzt ein Textfeld neben einer Combox?
Also ich würde es gerne so anordnen:

(Textfeld) [Combobox] (Textfeld) [Combobox]

(Textfeld) [Combobox] (Textfeld) [Combobox]

(Textfeld) [Combobox] (Textfeld) [Combobox]


Zusatz: Am Ende möchte ich noch folgende Funktion hinzufügen:
Je nach Auswahl soll dann daneben ein Bild eingeblendet werden wo jede Auswahl ein anderes hat.
Blödes Beispiel: Ich wähle die Auswahl "Vogel" und dann erscheint daneben das Bild eines Vogels!
 
Zuletzt bearbeitet:

Hansen_07

Aktives Mitglied
Ich muss ja zugeben, mir ist immer noch nicht klar, was du eigentlich genau für welchen Anwendungszweck erstellen möchtest. Soll die Anwendung denn auf mehreren Geräten, von mehreren verschiedenen Personen benutzbar sein können? Oder nur von einer Person, an einem bestimmten Gerät?

Ist das die beste Methode jetzt mit Java in Eclipse mir eine Umfrage zu basteln!?
Also ich würde gerne so 6 bis 8 Comboboxen basteln. Eine kurze Überschrift oder Text daneben hinstellen, damit die Leute wissen was sie auswählen sollen und dann im actionPerformormed (ActionEvent e) schreibe ich dann meine Logik rein.

Eclipse ist erstmal ja nur eine IDE. Und natürlich kannst du damit Java Anwendungen erstellen. Falls mehrere Benutzer die Anwendung benutzen sollen, möchtest du doch aber nicht, dass sich jeder erstmal Eclipse installieren muss, um die Anwendung bedienen zu können?? Ziel sollte also dann eine verteilbare, eigenständig laufende Applikation sein, richtig? Diese kannst du mit Eclipse eben auch erstellen.

Comboboxen find ich erstmal am einfachsten und übersichtlicher als JFrame.
Oder kennt ihr was besseres?

ComboBoxen kann man ja nicht einfach so ins Nichts "malen". Die werden ja idealerweise in einem Container platziert, der ja wiederum auf einem JFrame gezeichnet/dargestellt wird.

Außerdem: Wie positioniere ich jetzt ein Textfeld neben einer Combox?
Also ich würde es gerne so anordnen:

(Textfeld) [Combobox] (Textfeld) [Combobox]

(Textfeld) [Combobox] (Textfeld) [Combobox]

(Textfeld) [Combobox] (Textfeld) [Combobox]

Zum positionieren gibt es unter Swing ja die sogenannten Layout Container. In deinem Falle könnte sich ein Blick auf das GridLayout lohnen.
 

yfons123

Top Contributor
Es gibt auch in Eclipse ein Plugin um einen Scenebuilder für Swing zu bekommen, damit kannst du deine GUI mal provisorisch zusammen stöpseln
netbeans hat den scene builder für swing automatisch installiert
 

mihe7

Top Contributor
DENN (unbedingt WICHTIG):
Ich muss bei Frage1: Auswahl 1 dem Wert A eine +1 zurechnen, bei Auswahl B aber dem Wert B eine +1,
und das kann dann bei Frage2 so aussehen, dass bei Auswahl 1 der Wert B eine +2 bekommt.
Am Ende brauchen ich eine Auswertung die sagt welche Werte die meisten Punkte haben und je nachdem einen bestimmten Text auswirft.
Comboboxen find ich erstmal am einfachsten und übersichtlicher als JFrame.
Oder kennt ihr was besseres?
Das ist Anwendungslogik, die idealerweise überhaupt nichts mit dem verwendeten Framework zu tun haben sollte. Wenn man nur einen Prototypen "zum Herzeigen" basteln will, kann man das natürlich vernachlässigen und baut Fragen und Bewertung halt fest ein.

Andererseits kann man die Sache auch gleich halbwegs vernünftig modellieren, dann fliegt halt nach dem Prototyping nur das UI wieder raus und die Logik kann weiterverwendet werden.
 

shepherd333

Mitglied
Ich muss ja zugeben, mir ist immer noch nicht klar, was du eigentlich genau für welchen Anwendungszweck erstellen möchtest. Soll die Anwendung denn auf mehreren Geräten, von mehreren verschiedenen Personen benutzbar sein können? Oder nur von einer Person, an einem bestimmten Gerät?
Erstmal soll es, so wie ich es mir vorstelle, laufen. Das ist Prio.1
Und es soll nicht 100 Stunden dauern. Sondern so einfach und rasch wie möglich umsetzbar sein, laut meinen Angaben.
Danach kann ich mir immer noch Gedanken machen wo und wie es portiert und verbreitet werden soll.
Eclipse ist erstmal ja nur eine IDE. Und natürlich kannst du damit Java Anwendungen erstellen. Falls mehrere Benutzer die Anwendung benutzen sollen, möchtest du doch aber nicht, dass sich jeder erstmal Eclipse installieren muss, um die Anwendung bedienen zu können?? Ziel sollte also dann eine verteilbare, eigenständig laufende Applikation sein, richtig? Diese kannst du mit Eclipse eben auch erstellen.
Genau, Ziel ist es eine einfache App zu machen die man dann verteilen kann. Damit sie jemand anders ausprobieren kann.
ComboBoxen kann man ja nicht einfach so ins Nichts "malen". Die werden ja idealerweise in einem Container platziert, der ja wiederum auf einem JFrame gezeichnet/dargestellt wird.



Zum positionieren gibt es unter Swing ja die sogenannten Layout Container. In deinem Falle könnte sich ein Blick auf das GridLayout lohnen.
Ja ich habs mal mit einem LayoutContainer gemacht ohne JFrame (Panel).

Es gibt auch in Eclipse ein Plugin um einen Scenebuilder für Swing zu bekommen, damit kannst du deine GUI mal provisorisch zusammen stöpseln
netbeans hat den scene builder für swing automatisch installiert
Danke, schaue ich mir morgen gleich an. Ich hab jetzt Eclipse am laufen. Würdest du dann empfehlen auf Netbeans umzusteigen!? Ich kenne das nicht und habe bisher immer nur mit Eclipse gearbeitet.
 

yfons123

Top Contributor
Danke, schaue ich mir morgen gleich an. Ich hab jetzt Eclipse am laufen. Würdest du dann empfehlen auf Netbeans umzusteigen!? Ich kenne das nicht und habe bisher immer nur mit Eclipse gearbeitet.
nein du kannst bei eclipse bleiben.

Eclipse hat das von mihe erwähnte plugin, das ist das selbe programm dann. Es ist normal dass man sich plugins dazu installiert

Wollte es nur erwähnen dass es bei Netbeans schon automatisch dabei ist
 

shepherd333

Mitglied
Das ist Anwendungslogik, die idealerweise überhaupt nichts mit dem verwendeten Framework zu tun haben sollte. Wenn man nur einen Prototypen "zum Herzeigen" basteln will, kann man das natürlich vernachlässigen und baut Fragen und Bewertung halt fest ein.

Andererseits kann man die Sache auch gleich halbwegs vernünftig modellieren, dann fliegt halt nach dem Prototyping nur das UI wieder raus und die Logik kann weiterverwendet werden.
Aber genau das ist der schwierigste Punkt gerade bei mir.
Aufgebaut hab ich mir bald einmal alles, ist halt nur viel googeln und youtube videos schauen.
Aber wie ich dann die Auswahlen aus den Comboboxen "abspeichere" und dann später als private int weitergebe ist für mich noch "keine Ahnung wie!".
Also ich habe 4 fixe Werte. Nennen wir sie einfach halber STADT,LAND,FLUSS,BUBU
und je nach Antwort soll einer dieser "integer" +1 oder +2 oder +3 erhalten.
Am Ende soll dann ein weitere methode einfach im einfachen "case" verfahren durchgehen......welcher der 4 integer den höchsten Wert hat und dann einen Text aussprucken, je nachdem.

Wie deklariere ich diese 4 Werte in der Classe und wie stelle ich sicher, dass diese Werte addiert und weiter gegeben werden je nachdem welche "Antwort" man in den unterschiedlichen comboboxen auswählt!?
Kann das wer so erklären dass es ein Laie auch kapiert bitte?
 

Jw456

Top Contributor
Dann halte doch eine Instanzvariable in der Haupt Klasse. Gib jedem weiteren Objekt auch die Instanz der Haupt Klasse mit so das jede Klasse darauf zugreifen kann. Auf die Variable oder den getter der Variablen.

Oder eine public Klassenvariable in der deine Punkte gesammelt werden.

Oder eine Singelton Klasse in der die Punkte gesammelt werden.
 
Zuletzt bearbeitet:

shepherd333

Mitglied
Dann halte doch eine Instanzvariable in der Haupt Klasse. Gib jedem weiteren Objekt auch die Instanz der Haupt Klasse mit so das jede Klasse darauf zugreifen kann. Auf die Variable oder den getter der Variablen.

Oder eine public Klassenvariable in der deine Punkte gesammelt werden.

Oder eine Singelton Klasse in der die Punkte gesammelt werden.
Leider bin ich etwas eingerostet und steh auf der Leitung. Bitte nich hauen wenn ihr meinen code anschaut. Alles absoluter Noob-Approach!
Und denkt euch am besten nichts bei der namensgebung, is einfach ein Prototyp. Das wird alles erst angepasst wenn das ganze mal steht.

Ich habe die Klasse MyFrame erstellt.
Java:
public class MyFrame extends JFrame implements ActionListener{

 JComboBox comboBox;
 JComboBox comboBox2;
 private int hund=0;
 private int pfau=0;
 private int hahn=0;
 private int adler=0;
 
 MyFrame(){
 
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setLayout(new FlowLayout(FlowLayout.LEADING,50,10));
 
  String[] gesichtsform = {"Rund","Eckig","Trapez","Dreieck"};
  String[] augenbrauen = {"Dick","Duenn"};
 
  comboBox = new JComboBox(gesichtsform);
  comboBox2 = new JComboBox(augenbrauen);
  comboBox.addActionListener(this);
  comboBox2.addActionListener(this);
  comboBox.setToolTipText("Hier wählen Sie die Form des Gesichtes aus");
  comboBox2.setToolTipText("Hier wählen Sie die Form der Augenbrauen aus");

weiter unten habe ich eine Methode actionPerformed:

Java:
@Override
 public void actionPerformed(ActionEvent e) {
 
     if(e.getSource()==comboBox2) {
           System.out.println(comboBox2.getSelectedItem());
           if(comboBox2.getSelectedIndex()==0)
           {
             MyFrame.hund=+1;
       
           }
           
       }
  if(e.getSource()==comboBox) {
   System.out.println(comboBox.getSelectedItem());

Kann mir jemand es so erklären dass ich den Unterschied verstehe..... Wenn ich die Klassenvariablen hund,pfau,adler,hahn direkt nach
"public class MyFrame extends JFrame implements ActionListener" erstelle ODER sie erst nach "MyFrame()" deklariere.
Ich will einfach in der methode "actionPerformed" darauf zugreifen können und je nach Auswahl a,b,c,d in der combobox diese Variablen hund,pfau,hahn,adler dann ändern.

Edit: Ich muss ja nicht für jede Combobox eine eigene Methode machen, oder? Ich kann ja alles in einer realisieren!?
Also bei allen 8 comboboxen (bisher sind es nur 2) in einer Methode!?
 
Zuletzt bearbeitet:

KonradN

Top Contributor
Prinzipiell ist das doch so in Ordnung oder was geht nicht?

Die Variablen sind als Instanzvariablen definiert worden und damit sind diese in den Methoden der Instanz auch verfügbar. (Mal vom schlechten Design abgesehen, aber das ist jetzt erst einmal egal).
Hättest Du diese Variablen innerhalb des Konstruktors (nach dem MyFrame()) deklariert, dann wären es lokale Variablen im Konstruktor und nur innerhalb des Konstruktors gültig.

Dann noch ein Hinweis: Dein Vorgehen ist das, was vor Java 8 üblich war. Mit Java 8 wurden funktionale Elemente eingebaut in Java und es gibt Lambda Ausdrücke und Methodenreferenzen.

Damit entfällt das:
public class MyFrame extends JFrame implements ActionListener {

Aus Deiner Methode
public void actionPerformed(ActionEvent e) {
werden zwei Methoden, mit den entsprechenden Namen, die angeben, was passiert, also etwas wie:

Java:
private void handleComboBox2(ActionEvent e) {
    System.out.println(comboBox2.getSelectedItem());
    if(comboBox2.getSelectedIndex()==0) {
        MyFrame.hund=+1;
    }   
}
(Das besagt natürlich noch nicht wirklich viel - aber ich habe keine Ahnung, was Du da genau treiben willst. Daher konnte ich nur Deine Namen weiter verwenden und da stach mit hier halt nur ein comboBox2 als Bezeichner ins Auge.)

Eingebunden wird dies dann per:
comboBox2.addActionListener(this::handleComboBox2);

Alternativ - da Du das ActionEvent nicht nutzt:
private void handleComboBox2() {
mit
comboBox2.addActionListener(e -> handleComboBox2());

Zur Erklärung:
  • this::handleComboBox2 wäre eine Methodenreferenz. Damit wird gesagt, welche Methode aufgerufen werden soll.
  • e -> handleComboBox2() ist ein sogenannter Lambda Ausdruck - oft auch als anonyme Methode bezeichnet.
 

shepherd333

Mitglied
Das ist das Teil:

Danke. Gerade installiert.

So probiert gerade ein neues Projekt zu erstellen.
Bekomme wenn ich auf "design klicke":

Eclipse is running under 17.05, but this Java project has a 18 Java compliance level, so WindowBuilder will not be able to load classes from this project. Use a lower level of Java for the project, or run Eclipse using a newer Java version.

Ich kapier den Satz nicht. Was zum Teufel will der von mir?
Ich habe unter "Properties"->"Java Compiler" alles mögliche probiert und andere Versionen eingestellt aber die Meldung kommt immer wieder.
 
Zuletzt bearbeitet:

shepherd333

Mitglied
Prinzipiell ist das doch so in Ordnung oder was geht nicht?

Die Variablen sind als Instanzvariablen definiert worden und damit sind diese in den Methoden der Instanz auch verfügbar. (Mal vom schlechten Design abgesehen, aber das ist jetzt erst einmal egal).
Hättest Du diese Variablen innerhalb des Konstruktors (nach dem MyFrame()) deklariert, dann wären es lokale Variablen im Konstruktor und nur innerhalb des Konstruktors gültig.

Dann noch ein Hinweis: Dein Vorgehen ist das, was vor Java 8 üblich war. Mit Java 8 wurden funktionale Elemente eingebaut in Java und es gibt Lambda Ausdrücke und Methodenreferenzen.

Damit entfällt das:
public class MyFrame extends JFrame implements ActionListener {

Aus Deiner Methode
public void actionPerformed(ActionEvent e) {
werden zwei Methoden, mit den entsprechenden Namen, die angeben, was passiert, also etwas wie:

Java:
private void handleComboBox2(ActionEvent e) {
    System.out.println(comboBox2.getSelectedItem());
    if(comboBox2.getSelectedIndex()==0) {
        MyFrame.hund=+1;
    }  
}
(Das besagt natürlich noch nicht wirklich viel - aber ich habe keine Ahnung, was Du da genau treiben willst. Daher konnte ich nur Deine Namen weiter verwenden und da stach mit hier halt nur ein comboBox2 als Bezeichner ins Auge.)

Eingebunden wird dies dann per:
comboBox2.addActionListener(this::handleComboBox2);

Alternativ - da Du das ActionEvent nicht nutzt:
private void handleComboBox2() {
mit
comboBox2.addActionListener(e -> handleComboBox2());

Zur Erklärung:
  • this::handleComboBox2 wäre eine Methodenreferenz. Damit wird gesagt, welche Methode aufgerufen werden soll.
  • e -> handleComboBox2() ist ein sogenannter Lambda Ausdruck - oft auch als anonyme Methode bezeichnet.
Danke für die Auffrischung. Mein Fehler war "MyFrame.hund=+1;", es gehört aber "this.hund=+1;".

Ich kenne Lambda Ausdrücke sehr wohl nur sind die für mich etwas zu "high" gerade am Anfang. Ich glaub so etwas kann ein Laie wie ich erst machen wenn er mal das Programm fertig stehen hat und dann feintuning betreibt! Aber ich werds versuchen deinem Beispiel so weit es mir möglich ist, zu folgen!
 

shepherd333

Mitglied
Was bedeutet das?
"Eclipse is running under 17.05, but this Java project has a 18 Java compliance level, so WindowBuilder will not be able to load classes from this project. Use a lower level of Java for the project, or run Eclipse using a newer Java version."

17.05? Ich hab keine Ahnung was das für eine Version sein soll. Eclipse ist die Version 4.25.0 und ich habe OpenJDK installiert mit der Version 19.0.1

Edit: Ich habe jetzt ein neues Projekt erstellt mit anderem JRE ausgewählt und jetzt klappt es. Keine Ahnung. Anscheinend mag der WindowBuilder openJDK nicht.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Alles schön und gut was Konrad sagt.

Ich habe sein Projekt so verstanden das er mehrere Bildschirmseiten mit Fragen haben will die er in Comboboxen packt.
Ich gehe mal davon aus das er nicht alle Seiten in einer Klasse machen will.
Und in der End Seite eine Auswertung machen will.

Und da braucht er die Daten aus den vorherigen Instanzvariablen.

Die ja nun privat sind und somit keinzugrif aus anderer Klasse möglich ist. Wenn die Instanz der Klasse da noch existiert.

Deshalb puplic getter und die Instanz der Datenkasse mitgeben. An die nuen Seiten Klasse Instanz.
 
Zuletzt bearbeitet:

shepherd333

Mitglied
Alles schön und gut was Konrad sagt.

Ich habe sein Projekt so verstanden das er mehrere Bildschirmseiten mit Fragen haben will die er in Comboboxen packt.
Ich gehe mal davon aus das er nicht alle Seiten in einer Klasse machen will.
Und in der End Seite eine Auswertung machen will.

Und da braucht er die Daten aus den vorherigen Instanzvariablen.

Die ja nun privat sind und somit keinzugrif aus anderer Klasse möglich ist. Wenn die Instanz der Klasse da noch existiert.

Deshalb puplic getter und die Instanz der Datenkasse mitgeben. An die nuen Seiten Klasse Instanz.
Ich check leider die Hälfte nicht was er schreibt! ;)
Warum werden aus einer Methode zwei? Was meint er damit? Lambas hab ich eher genau umgekehrt in erinnerung. Sie schlucken code und machen aus 2 Zeilen eine.

Hab gerade wieder von vorne angefangen. Diesmal mit dem WindowBuilder und stehe bereits hier an:
Java:
        JComboBox comboBox = new JComboBox(gesichtsform);
        comboBox.setBounds(38, 41, 126, 22);
        frame.getContentPane().add(comboBox);
        comboBox.addActionListener(e -> handleComboBox());
        private void handleComboBox() {
            
        }

Hier meckert er mir aber gleich bei der Zeile "private void handleComboBox()
"syntax error on token "void", record expected

Hab es gelöscht und dann auf "create method" geklickt.
Dann hat er mir das am Ende erstellt:

Java:
private Object handleComboBox() {
        // TODO Auto-generated method stub
        return null;

Keine Ahnung ob das stimmt.
Wie genau füge ich den ActionListener zu den erstellten Boxen hinzu?! jetzt sehe ich den Wald vor lauter Bäumen nicht mehr. Als Laie verwirrt mich das noch mehr!
 

KonradN

Top Contributor
Ich glaub so etwas kann ein Laie wie ich erst machen wenn er mal das Programm fertig stehen hat und dann feintuning betreibt!
Das Problem, dass ich bei diesem Ansatz sehe, ist einfach, dass Du dann eine große Menge unstrukturiertem Code hast, bei dem Du selbst nicht mehr durchschaust und bei dem die Abhängigkeiten schlicht unsauber sind.

Warum werden aus einer Methode zwei? Was meint er damit?
Derzeit hast Du zwei Controls. Bei beiden Controls setzt Du den gleichen Action Handler. Im ActionHandler hast Du dann eine Unterscheidung. Wenn es das erste Control ist, dann mache dies, beim zweiten Control mache jenes.

Du hast also:
a) Eine viel zu große Methode, die die ActionEvents verarbeitet. Dazu hat die Methode einen universellen Namen, der nichts über das aussagt, was die Methode macht.
b) in der Methode dann viel zu viel Code, der unnötig ist - halt die ganzen ifs, mit denen Du zwischen den Controls unterscheidest.

Bezüglich Deines Problems:
Java:
        private void handleComboBox() {
        }
ist eine Methode. Methoden kannst Du nicht in anderen Methoden schreiben sondern diese müssen in der klasse selbst stehen.


Also in etwa so:
Java:
        // Hier bist Du gerade in einer Methode ...
        JComboBox comboBox = new JComboBox(gesichtsform);
        comboBox.setBounds(38, 41, 126, 22);
        frame.getContentPane().add(comboBox);
        comboBox.addActionListener(e -> handleComboBox());

        // Die Methode kann gerne noch weiter gehen ....

    } // Hier endet dann die Methode!

    // Und nun kann die nächste Methode kommen.
    private void handleComboBox() {

    }
 

shepherd333

Mitglied
Das Problem, dass ich bei diesem Ansatz sehe, ist einfach, dass Du dann eine große Menge unstrukturiertem Code hast, bei dem Du selbst nicht mehr durchschaust und bei dem die Abhängigkeiten schlicht unsauber sind.


Derzeit hast Du zwei Controls. Bei beiden Controls setzt Du den gleichen Action Handler. Im ActionHandler hast Du dann eine Unterscheidung. Wenn es das erste Control ist, dann mache dies, beim zweiten Control mache jenes.

Du hast also:
a) Eine viel zu große Methode, die die ActionEvents verarbeitet. Dazu hat die Methode einen universellen Namen, der nichts über das aussagt, was die Methode macht.
b) in der Methode dann viel zu viel Code, der unnötig ist - halt die ganzen ifs, mit denen Du zwischen den Controls unterscheidest.

Bezüglich Deines Problems:
Java:
        private void handleComboBox() {
        }
ist eine Methode. Methoden kannst Du nicht in anderen Methoden schreiben sondern diese müssen in der klasse selbst stehen.


Also in etwa so:
Java:
        // Hier bist Du gerade in einer Methode ...
        JComboBox comboBox = new JComboBox(gesichtsform);
        comboBox.setBounds(38, 41, 126, 22);
        frame.getContentPane().add(comboBox);
        comboBox.addActionListener(e -> handleComboBox());

        // Die Methode kann gerne noch weiter gehen ....

    } // Hier endet dann die Methode!

    // Und nun kann die nächste Methode kommen.
    private void handleComboBox() {

    }
ok. Danke! Jetzt funktioniert es.
Zum Thema Controls:
Ich habe etwas überlegt und bin zur Erkenntnis gekommen ich muss es folgendermaßen umändern:
Frage1: er soll speichern welche Auswahl getroffen wurde.
Frage2: er soll speichern welche Auswahl getroffen wurde.
Frage3: usw.
usw.

Am Ende gibt es eine Liste von Text-Bausteinen die je nachdem welche Auswahlen getroffen wurden angezeigt werden.
Ein Button "Auswerten" zeigt also am Ende an:
Bei Frage1Auswahlx.Text + Frage2Auswhalx.Text + usw.

Wie sollte ich das angehen?
Soll ich eine Klasse schreiben die ALLE Texte behinaltet oder ist hier nich einfach ein Array[String] besser?
Also Frage1.Antwort1,Frage1.Anwort2,Frage2.Antwort1,ect.....

In der Main speichere ich ComboBox Auswahlen ab und am Ende mache ich beim Button "Auswerten" eine
action die einfach schaut was wurde gespeichert und sucht dann die TextBausteine aus dieser anderen Klasse oder dem Array je nachdem was ausgewählt wurde? Wenn du verstehst was ich meine.

Blöd ausgedrückt:
Wenn ich bei Combbox1 "vogel" bei Combobox2 "hund" und bei Combobox3 "ameise" ausgewählt habe dann soll er am Ende auspucken:
"es fliegt" "es bellt" "es ist ein Insekt". So irgendwie.
 
Zuletzt bearbeitet:

shepherd333

Mitglied
Ok zu früh gefreut.
Java:
private void handleComboBox() {
        System.out.println(???????.getSelectedItem());
           this.frage1==???????.getSelectedIndex();
      
           }

Was muss jetzt dort stat "comboBox" stehen?
e geht nicht, comboBox geht nicht, this auch nicht!?

Ich check einfach nicht wie ich dann da weitermache wenn ich den Lambda Ausdruck verwende. Stehe grad an.

Edit: Mir war das jetzt zu nervig und hab es wieder ohne Lamba schnick schnack gemacht:

Java:
comboBox.addActionListener(new ActionListener() {
                public void actionPerformed (ActionEvent e) {
                    frage1=comboBox.getSelectedIndex();
                    System.out.println(comboBox.getSelectedItem());
                    System.out.println(frage1);
                }
        });
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Java:
comboBox.addActionListener(e -> handleComboBox(comboBox.getSelectedIndex());


private void handleComboBox( int index) {
                 this.frage1=index;
                 }
 

KonradN

Top Contributor
Das handleComboBox wäre dann ja eher ein setFrage1

Und bei
Java:
private void handleComboBox() {
        System.out.println(???????.getSelectedItem());
           this.frage1==???????.getSelectedIndex();
      
           }
geht es doch nur um die comboBox - also kannst Du einfach schreiben:
Java:
private void handleComboBox() {
    System.out.println(comboBox.getSelectedItem());
    this.frage1==comboBox.getSelectedIndex();
}

Und das sollte gehen, so comboBox eine Instanzvariable ist. Sollte es eine lokale Variable sein, dann solltest Du es zu einer Instanzvariablen machen.

Aber zumindest in #16 war es noch eine Instanzvariable:
Java:
public class MyFrame extends JFrame implements ActionListener{
    JComboBox comboBox;
    JComboBox comboBox2;
somit wäre comboBox und comboBox2 in der Klasse myFrame verfügbar.
 

Jw456

Top Contributor
Java:
this.frage1==comboBox.getSelectedIndex(); // ist hier nicht ein "=" zuviel
                                         // soll doch bestimmt eine zuweisung sein.
 

DefconDev

Bekanntes Mitglied
Für einen inhaltslosen Prototypen würde ich statt Swing, JavaFX mit dem Scenebuilder nehmen. Für meinen Geschmack, ist der Scenebuilder ein super Tool zum erstellen von GUI. Wenn du eine App für Android bauen willst, dann nimm AndroidStudio, allein das Monitoring der Performance und DB ist sehr praktisch.

Bei Flutter bin ich noch sehr skeptisch, weil es von Google kommt. Da warte ich jeden Tag darauf, dass sie das wieder beerdigen.
 

yfons123

Top Contributor
Für einen inhaltslosen Prototypen würde ich statt Swing, JavaFX mit dem Scenebuilder nehmen.
es gibt den Scene builder auch für Swing..wurde auch schon verlinkt

javafx ist halt einfacher in manchen stellen wie zb man muss sich nicht ums zeichnen kümmern, und anderen schnick schnack aber das sollte ihn nicht davon abhalten swing herzunehmen
 

KonradN

Top Contributor
es gibt den Scene builder auch für Swing..wurde auch schon verlinkt
Der WindowBuilder ist nicht vergleichbar. Swing fehlen einfach zu viele Dinge. Bindings ist das Erste, das mir da direkt einfällt. Wobei das in JavaFX auch nur halbherzig ist - so sind in fxml keine bidirektionale Bindings möglich. Da ist z.B. WPF im .Net Bereich deutlich weiter/besser. (Aber wie war das mit toten Pferden? Da wird nicht wirklich viel weiter entwickelt.)

Aber das ist auch egal - egal mit welchem Tooling er arbeiten wird: Es wird schon problematisch, da er sich über das Datenmodell keine Gedanken gemacht hat. Zusammen mit der Generierung von schlechtem Code wird das dann insgesamt ein sehr problematisches Unterfangen. Diesen RAD Ansatz mit "UI first" ist aus meiner Sicht kein zielführender Ansatz.
Aber das ist eine kritische Sicht, die dem TE nicht wirklich weiter hilft und daher habe ich mich diesbezüglich auch bisher zurück gehalten.
 

yfons123

Top Contributor
was ich halt in meinen lausigen jahren gelernt habe ist, dass es wichtig ist scheibchen aus seiner anwendung raus schneiden zu können ohne alles zu zerstören.

einfach mal bei der FXML oder YAML oder was auch sonst auf löschen klicken und nichts blinkt rot auf.. das ist doch ein träumchen
 

mihe7

Top Contributor
Diesen RAD Ansatz mit "UI first" ist aus meiner Sicht kein zielführender Ansatz.
Ich baue auch grundsätzlich erst das Modell zum Leidwesen des Vertriebs (was übrigens ein großer Vorteil ist, denn wenn Vertrieb etwas sieht, das nach Anwendung aussieht, dann ist das praktisch fertig verkaufbare Software).

Man kann durchaus was frickeln, aber dann muss man sich mit Abstrichen begnügen und je mehr man im Prototypen Logik haben will, desto weniger macht das Sinn.

Heißt: ich kann mir vorstellen, sowas mal eben zusammenzuklicken und mit festen Werten zu versehen, eine Fake-Auswertung dazu und gut ists. Wenn ich aber echte Fragen stellen will, echte Auswertung haben will: warum soll ich dann was schreiben, was ich hinterher in die Tonne klopfe?!? Zumal es dann anfängt, kompliziert zu werden, wenn man das im UI macht. Ein UI an ein Model anbinden, ist dagegen kein Problem.
 

shepherd333

Mitglied
Ich möchte jetzt Bilder einfügen, zu jeder Frage ein Frame, welches dann, je nachdem was man ausgewählt ein anderes Bild anzeigt.
Also Beispiel: in Frage1 wähle ich einen "Vogel" aus und im Bild daneben erscheint dann ein Bild eines Vogels.
Welche......komponente verwende ich da? JFrame? Ich glaube für den ActionListener ist es nicht so das große Ding. Einfach bei getSelectedItem eine Zuweisung zu diesm Bild!? Muss mich da erst einlesen.
Was ich noch vorhabe ist, dass wenn man auf den Button "Auswertung" klickt. Er ein neues Fenster aufmacht und dort dann die Ergebnisse anzeigt! Habe ja jetzt alles auf einem Fenster. Denke da muss ich eine Zuweisung zu einem neuen Fenster erstellen.

Java:
comboBox.addActionListener(e -> handleComboBox(comboBox.getSelectedIndex());


private void handleComboBox( int index) {
                 this.frage1=index;
                 }
Ok. Danke aber das is mir eindeutig ZU kompliziert. Ich hab nicht immer Zeit für das Projekt und nach ein paar Tagen muss ich mich erst immer wieder in den code einlesen. Solche lamba-ausdrücke machen es code-mäßig garantiert schlanker und schöner aber mein Hirn sagt da:"WTF". ;)
 

Jw456

Top Contributor
Was ich noch vorhabe ist, dass wenn man auf den Button "Auswertung" klickt. Er ein neues Fenster aufmacht und dort dann die Ergebnisse anzeigt! Habe ja jetzt alles auf einem Fenster. Denke da muss ich eine Zuweisung zu einem neuen Fenster erstellen.
Und hier kommt ein sinnvolles Datenmodel zum Tragen wo du keines hast.

Das wurde auch schon angesprochen ich in Post #15 , und Konrad in #32.

Neue Klasse neue Bildschirmzeite du brauchst einen Zugriff auf deine gesammelten Daten. Das hast du nicht
 

shepherd333

Mitglied
Update:

Hab jetzt einfach paar Bilder hinzugefügt und beim AktionListener einfach einen case-switch geadded der je nach Auswahl das richtige Bild anzeigt.
Jetzt gehts daran den Button zu machen dass er dann das Ergebnis auf einer neuen Seite aufmacht.
Eine Frage ist noch immer offen oder es tut mir leid falls ich es überlesen habe:
"Wie soll ich die Antworten am besten abspeichern? Hab ca 2 Zeilen pro Antwort (string).
Das heißt wenn man 3 Fragen auswählt kommen am Ende ca. 6 Zeilen text zum vorschein.
Reicht ein Array aus String für das am besten?
 

shepherd333

Mitglied
Update:

Hab jetzt einfach paar Bilder hinzugefügt und beim AktionListener einfach einen case-switch geadded der je nach Auswahl das richtige Bild anzeigt.
Jetzt gehts daran den Button zu machen dass er dann das Ergebnis auf einer neuen Seite aufmacht.
Eine Frage ist noch immer offen oder es tut mir leid falls ich es überlesen habe:
"Wie soll ich die Antworten am besten abspeichern? Hab ca 2 Zeilen pro Antwort (string).
Das heißt wenn man 3 Fragen auswählt kommen am Ende ca. 6 Zeilen text zum vorschein.
Reicht ein Array aus String für das am besten?
würd ein "Interface" oder eine abstrakte Klasse auch eine Lösung sein um nicht alles in der main zu haben!? Mache einfach ein Interface mit allen Text-Bausteinen und kann die dann mit einer Methode aufrufen.
 

KonradN

Top Contributor
würd ein "Interface" oder eine abstrakte Klasse auch eine Lösung sein um nicht alles in der main zu haben!?
Nein, du solltest eine saubere Modellierung der Daten haben. Halt das, was schon mehrfach angesprochen wurde.

Du frickelst Dir da gerade etwas zurecht, das mit jeder Frickelei Dir mehr um die Ohren fliegen wird. Anpassungen werden die Hölle werden, da Du halt absolut keine Struktur im Code hast und Zuständigkeiten nicht getrennt sind.

Selbst wenn Du da eine erste lauffähige Version irgendwie hin bekommen solltest: Das wird viel Kraft und Nerven kosten und das Ergebnis ist - sorry für die harten Worte - ein Haufen Scheiße. Wie sehr diese Worte zutreffen werden, wirst Du dann auch fühlen: Jeder Änderungswunsch, der an Dich heran getragen wird, wird sich halt genau so anfühlen: Der Tritt in einen Haufen Scheiße. (Dabei ist dann maximal die Frage nach der Fußbekleidung: Wirst Du evtl. Gummistiefel anhaben oder darfst Du es mit Sandalen machen!)

Es steht Dir frei, das genau so zu machen. Es gibt viele Leute, die sowas machen (mit entsprechender Bekleidung). Aber das ist nicht das, was ich machen will und daher meine (aus deiner Sicht bestimmt sehr negative) Meinung.

So Projekte fange ich genau anders herum an:
  • Ich betrachte die Daten
  • Ich betrachte die notwendigen Operationen auf den Daten
==> Dann implementiere ich genau das.

Zur gleichen Zeit darf gerne ein UI/UX Designer sich mit dem Kunden unterhalten. Der wird da auch tolle Screens entwerfen und dem Kunden zeigen. Die Funktionalität mit dem Kunden durchspielen. Das macht der aber nicht mit Java! Der hat dazu brauchbare Tools. (JavaFX mit Scenebuilder könnte man sich vorstellen - da hat man eine Deklarative UI! Aber da macht man dann nur die FXML Dateien. Da wird kein Programm drumherum gebaut. )

Dann kommt irgendwann der Punkt: ich habe die Daten, da gibt es ein Model des UIs -> Da kann man dann den Code für die UI schreiben. Aber wirklich erst da.

Du hast da jetzt ein tolles Dach gebaut und fragst Dich, die Du da nun Wände drunter bekommst. Ok, kann man bestimmt anheben und abstützen um dann die Mauern zu bauen. Aber spätestens dann wird es schwer mit Grundplatte oder den Arbeiten, um den Keller auszuheben ....
 

shepherd333

Mitglied
Nein, du solltest eine saubere Modellierung der Daten haben. Halt das, was schon mehrfach angesprochen wurde.

Du frickelst Dir da gerade etwas zurecht, das mit jeder Frickelei Dir mehr um die Ohren fliegen wird. Anpassungen werden die Hölle werden, da Du halt absolut keine Struktur im Code hast und Zuständigkeiten nicht getrennt sind.

Selbst wenn Du da eine erste lauffähige Version irgendwie hin bekommen solltest: Das wird viel Kraft und Nerven kosten und das Ergebnis ist - sorry für die harten Worte - ein Haufen Scheiße. Wie sehr diese Worte zutreffen werden, wirst Du dann auch fühlen: Jeder Änderungswunsch, der an Dich heran getragen wird, wird sich halt genau so anfühlen: Der Tritt in einen Haufen Scheiße. (Dabei ist dann maximal die Frage nach der Fußbekleidung: Wirst Du evtl. Gummistiefel anhaben oder darfst Du es mit Sandalen machen!)

Es steht Dir frei, das genau so zu machen. Es gibt viele Leute, die sowas machen (mit entsprechender Bekleidung). Aber das ist nicht das, was ich machen will und daher meine (aus deiner Sicht bestimmt sehr negative) Meinung.

So Projekte fange ich genau anders herum an:
  • Ich betrachte die Daten
  • Ich betrachte die notwendigen Operationen auf den Daten
==> Dann implementiere ich genau das.

Zur gleichen Zeit darf gerne ein UI/UX Designer sich mit dem Kunden unterhalten. Der wird da auch tolle Screens entwerfen und dem Kunden zeigen. Die Funktionalität mit dem Kunden durchspielen. Das macht der aber nicht mit Java! Der hat dazu brauchbare Tools. (JavaFX mit Scenebuilder könnte man sich vorstellen - da hat man eine Deklarative UI! Aber da macht man dann nur die FXML Dateien. Da wird kein Programm drumherum gebaut. )

Dann kommt irgendwann der Punkt: ich habe die Daten, da gibt es ein Model des UIs -> Da kann man dann den Code für die UI schreiben. Aber wirklich erst da.

Du hast da jetzt ein tolles Dach gebaut und fragst Dich, die Du da nun Wände drunter bekommst. Ok, kann man bestimmt anheben und abstützen um dann die Mauern zu bauen. Aber spätestens dann wird es schwer mit Grundplatte oder den Arbeiten, um den Keller auszuheben ....
Und was genau soll ich dann deiner Meinung anders machen oder ändern? Als Laie brauche ich bitte ganz exakte Anweisungen.
 
Zuletzt bearbeitet:

KonradN

Top Contributor
Du sollst Dir erst einmal ein Datenmodell überlegen. Das habe ich mir jetzt nicht aus dem Thread heraus gesucht. Aber da geht es halt schlicht darum. alles zu identifizieren, womit Du arbeitest und was Du damit machst.

Du hast dann Fragen. Zu den Fragen gibt es dann Auswahlmöglichkeiten, ein Bild und irgend einen Text. Antworten sind dann Bild und Text.

Dann hast Du Bildschirmseiten. Diese haben eine oder mehrere Fragen, jede Frage hat bereits eine Auswahl. Es gibt evtl. einen Titel und eine Beschreibung. Oder noch ein Bild.

Dann hast Du eine Sammlung von Bildschirmseiten. Da gibt es evtl. eine aktuelle Seite.

Das wäre dann ggf. eine Datenstruktur. Da gibt es dann diverse Operationen:
  • Man könnte die Seite wechseln (vor/zurück), evtl. ein Check, ob es Seite vorher oder nachher gibt.
  • Man kann auf der Bildschirmseite bei einer Frage eine Antwort auswählen.
  • Man kann Daten einlesen, ggf. auch schreiben.

Das ist dann etwas, das man als Klassen schreiben kann.

Dann kann eine Applikation einfach eine Sammlung von Bildschirmseite laden und dann eine Instanz eines Fensters erzeugen, das die aktuelle Bildschirmseite anzeigt und so.

Sowas in der Art halt.
 

Hansen_07

Aktives Mitglied
Und was genau soll ich dann deiner Meinung anders machen oder ändern? Als Laie brauche ich bitte ganz exakte Anweisungen.
Verzeih, das ist wirklich nicht böse gemeint, und garantiert will ich dich nicht ärgern!

Aber meine herangehensweise ist ähnlich, wie die der von anderen hier schon mehrfach genannten. Ich modelliere erstmal so genau wie nötig und mir möglich, welche Daten und Operationen auf diese Daten ich wohl benötigen werden, um meine Problemstellung lösbar zu machen.
Die definierten Daten und Operationen packe ich dann in Klassen, schaue wie ich das Design vereinfachen kann (Interfaces? Mir bekannte Entwurfsmuster?.
Daraus baue ich deinen Prototyp der erst mal einfach nur in der Konsole läuft. Buttons, Combo- oder doch CheckBoxen, Bilder/Musik/Themes etc. all das ist total irrelavant in dieser Phase für mich.
Wenn der Prototyp das macht was ich möchte, überlege ich wie ein GUI dazu aussehen könnte, um ein Anwenderfreundliches Ergebnis zu erhalten.
 

shepherd333

Mitglied
Dürft mir echt nicht böse sein aber naja so komme ich leider echt nicht weiter. Eure Antworten sind noch immer sehr grob, undetailiert und schwammig. Nichts wofür ich hier im Forum bin. Also da ist eigentlich nichts dabei was ich wissen wollte oder gefragt habe. Also nicht böse sein!

Ich bin übrigens drauf gekommen ich muss das ganze sowieso neu in Android Studio aufziehen weil mir Eclipse da einfach nicht die Möglichkeiten bietet die ich als nächsten Schritt brauche. Soweit bin ich auch zu dem Ergebnis gekommen zu dem ich wollte. Nur hat sich meine Idee durch das testen geändert. Das war viel viel wichtiger als sich irgendein unsinniges Datenmodel zu überlegen was echt nicht böse gemeint ist aber is halt so wie jemanden Salz anzubieten der gerade am verdursten ist.
 

mihe7

Top Contributor
Dir ist keiner böse, das Forum ist in erster Linie Hilfe zur Selbsthilfe. Die Antworten, gerade von @KonradN, sind doch schon sehr präzise und detailliert. Das Problem scheint eher zu sein, dass Du damit nichts anfangen kannst. Problematisch ist auch, dass Du einerseits von Prototypen schreibst, andererseits aber doch alles funktionsfähig umgesetzt haben willst. Das passt nicht wirklich zusammen. Vielleicht willst Du ein MVP (minimum viable product), also eine erste brauchbare Version.

Das Hauptproblem bei Anfängern ist, dass sie immer versuchen, ein GUI zu bauen und dieses GUI rückt dann in das Zentrum aller Überlegungen. Warum ist das problematisch? Weil in 99,9 % keine (halbwegs saubere) Trennung zwischen GUI und dem Kern der Anwendung erfolgt. Zustand und Logik wird einfach in die GUI-Klassen geklatscht und dann wirds richtig hässlich. Oft geht das so weit, dass die Buttonbeschriftung als Speicher verwendet wird.

Das kann funktionieren, für Dinge, die man einmal schreibt und dann nie wieder anrührt bzw. hinterher in die Tonne tritt. Ein einfaches TicTacToe etc. aber selbst da wird der Code oft ekelhaft und sieht dann z. B. so aus, um den Gewinner zu ermitteln:
Java:
if (buttons[0][0].getText().equals("X") && buttons[0][1].getText().equals("X") && buttons[0][1].getText().equals("X")) {
    label.setText("Spieler 1 hat gewonnen!");
} else if (buttons[1][0].getText().equals("X") && buttons[1][1].getText().equals("X") && buttons[1][1].getText().equals("X")) {
    label.setText("Spieler 1 hat gewonnen!");
}
// das für alle Zeilen, Spalten und Diagonalen
// und den Spaß noch für Spieler 2
Natürlich kann in den Blöcken noch mehr stehen wie beispielsweise Buttons aktivieren/deaktivieren, irgendwie muss man ja den Game-Over-Zustand unterbringen...

Mal abgesehen davon, dass man sich dort ständig den Text holen und mit equals vergleichen muss: wenn ich auf den Buttons morgen fancy Bilder haben will? Schmeiß ich die komplette Anwendung weg, weil nix mehr funktioniert. Super Ansatz.

Ziel ist auch nicht ein "Datenmodell", sondern die Modellierung der Anwendung (ohne UI) mit Klassen bzw. Objekten. Das Datenmodell ist ein Ausgangspunkt hierfür.

Warum ohne UI? Weil dieses für die Anwendung relativ uninteressant ist (wenn man mal vom Aufwand absieht), da es lediglich die Schnittstelle zwischen dem Anwender und der eigentlichen Anwendung darstellt, in der die Musik spielt.

Lies Dir nochmal #41 durch. Das ist doch ein schöner, generischer Ansatz.
 

shepherd333

Mitglied
Dir ist keiner böse, das Forum ist in erster Linie Hilfe zur Selbsthilfe. Die Antworten, gerade von @KonradN, sind doch schon sehr präzise und detailliert. Das Problem scheint eher zu sein, dass Du damit nichts anfangen kannst. Problematisch ist auch, dass Du einerseits von Prototypen schreibst, andererseits aber doch alles funktionsfähig umgesetzt haben willst. Das passt nicht wirklich zusammen. Vielleicht willst Du ein MVP (minimum viable product), also eine erste brauchbare Version.

Das Hauptproblem bei Anfängern ist, dass sie immer versuchen, ein GUI zu bauen und dieses GUI rückt dann in das Zentrum aller Überlegungen. Warum ist das problematisch? Weil in 99,9 % keine (halbwegs saubere) Trennung zwischen GUI und dem Kern der Anwendung erfolgt. Zustand und Logik wird einfach in die GUI-Klassen geklatscht und dann wirds richtig hässlich. Oft geht das so weit, dass die Buttonbeschriftung als Speicher verwendet wird.

Das kann funktionieren, für Dinge, die man einmal schreibt und dann nie wieder anrührt bzw. hinterher in die Tonne tritt. Ein einfaches TicTacToe etc. aber selbst da wird der Code oft ekelhaft und sieht dann z. B. so aus, um den Gewinner zu ermitteln:
Java:
if (buttons[0][0].getText().equals("X") && buttons[0][1].getText().equals("X") && buttons[0][1].getText().equals("X")) {
    label.setText("Spieler 1 hat gewonnen!");
} else if (buttons[1][0].getText().equals("X") && buttons[1][1].getText().equals("X") && buttons[1][1].getText().equals("X")) {
    label.setText("Spieler 1 hat gewonnen!");
}
// das für alle Zeilen, Spalten und Diagonalen
// und den Spaß noch für Spieler 2
Natürlich kann in den Blöcken noch mehr stehen wie beispielsweise Buttons aktivieren/deaktivieren, irgendwie muss man ja den Game-Over-Zustand unterbringen...

Mal abgesehen davon, dass man sich dort ständig den Text holen und mit equals vergleichen muss: wenn ich auf den Buttons morgen fancy Bilder haben will? Schmeiß ich die komplette Anwendung weg, weil nix mehr funktioniert. Super Ansatz.

Ziel ist auch nicht ein "Datenmodell", sondern die Modellierung der Anwendung (ohne UI) mit Klassen bzw. Objekten. Das Datenmodell ist ein Ausgangspunkt hierfür.

Warum ohne UI? Weil dieses für die Anwendung relativ uninteressant ist (wenn man mal vom Aufwand absieht), da es lediglich die Schnittstelle zwischen dem Anwender und der eigentlichen Anwendung darstellt, in der die Musik spielt.

Lies Dir nochmal #41 durch. Das ist doch ein schöner, generischer Ansatz.
Ich verstehe warum es dir und den anderen geht und ich schätze den gut gemeinten Gedanken dahinter sehr, aber es geht meiner Meinung nach absolut am Thema und das was ich gerade brauche total vorbei.
Klingt mir alles eher nach "den Teufel an die Wand malen" wo noch keiner ist und jemanden seine subjektiven "schlechten Erfahrungen" aufdrängen obwohl die gar nicht vorhanden sind oder weiterhelfen zu diesem Kontext.

Das ganze geht eher schon in das philosophische: mach dir vorher Gedanken und plane weil es wird dieses und jenes passieren vs. Ich muss erstmal nen Prototypen machen damit ich erstmal weiß was ich planen muss.

Also nicht bös gemeint aber da fängt man an sinnlos und endlos aneinander vorbei zu reden und der eine will das der andere etwas macht was nicht Ziel oder gefragt ist weil man von sich auf andere schließt.
Bin wie gesagt Laie und das ganze war nur um ganz schnell eine Idee umzusetzen.
Ich meine das sagt ja schon der Titel..."schnell".
Da is nix mit planen und sich Gedanken machen und mal daran gedacht, vielleicht müssen Anfänger wirklich mal diesen Fehler machen damit sie ihn auch verstehen und daraus lernen können?!
Ich meine ihr wollt schon vorab Probleme abfangen obwohl ihr noch nicht mal wisst wie weit das ganze hier gehen wird.
Aber trotzdem danke für die Hinweise.
 

Jw456

Top Contributor
Wenn du für Android arbeiten willst. Wird das Prinzip Datenmodel noch wichtiger.
Denn hier ist jede Bildschirm Seite eine eigene Klasse eine Activity.
Activitys sind abgeschlosse Einheiten. Du kannst nicht einfach auf Daten der ersten Activity von der zweiten zugreifen. Ja man kann einer Activity parameter beim Start mitgeben.

In Android wird das MVVM pattern realisiert.
Zu Zeiten wo es das Viewmodel noch nicht gab wurde offt Singelton eingesetzt. Um Daten unabhängig von der View zur Verfügung zu haben.
 

Jw456

Top Contributor
Ps es geht auch nicht soeinfach der neuen Activity eine Referenz der alten zuübergeben so wie du das von Desktop Java gewohnt bist.
Denn die neue Bildschirmseiten wird hier mit einen Intent an das BS gestartet. Das ist dann fast wie ein neues Programm starten.

Deshalb Datenmodel um unter den Activitys Daten auszutauschen.
 
Zuletzt bearbeitet:

KonradN

Top Contributor
Sorry, aber Dir ist bewusst, dass Du eine Frage gestellt hast, bei der es um das "Design" geht:
würd ein "Interface" oder eine abstrakte Klasse auch eine Lösung sein um nicht alles in der main zu haben!? Mache einfach ein Interface mit allen Text-Bausteinen und kann die dann mit einer Methode aufrufen.

Und jetzt kommst Du daher und sagst uns, dass es Dir darum nicht geht? Dass es Dir egal ist?

Du hast angedeutet, dass Du Deinen Code auftrennen willst. Und da habe ich einen klaren und einfachen Ansatz aufgezeigt. Statt denn sofort kategorisch abzulehnen hättest Du den evtl. etwas ausprobiert. Denn das ist kein Gegensatz zu "um ganz schnell eine Idee umzusetzen." sondern lediglich ein Ansatz, der das auch unterstützt.

vielleicht müssen Anfänger wirklich mal diesen Fehler machen damit sie ihn auch verstehen und daraus lernen können
Dann mach das doch. Niemand hier hält Dich ab! Aber wenn Du Fragen stellst, dann bekommst Du von uns Antworten. Wenn die Antworten nicht das sind, was Du gemeint hast, dann konkretisiere die Fragen. Aber das jetzt hier ist einfach nur mangelhaft und nimmt einem jede Lust, sich mit Dir auseinander zu setzen.
 

shepherd333

Mitglied
Sorry, aber Dir ist bewusst, dass Du eine Frage gestellt hast, bei der es um das "Design" geht:


Und jetzt kommst Du daher und sagst uns, dass es Dir darum nicht geht? Dass es Dir egal ist?

Du hast angedeutet, dass Du Deinen Code auftrennen willst. Und da habe ich einen klaren und einfachen Ansatz aufgezeigt. Statt denn sofort kategorisch abzulehnen hättest Du den evtl. etwas ausprobiert. Denn das ist kein Gegensatz zu "um ganz schnell eine Idee umzusetzen." sondern lediglich ein Ansatz, der das auch unterstützt.

Dan biete nächstes mal einfach zwei Optionen an: "mache es entweder so wie ich es vorschlage und ich glaube das es richtig ist oder wenn du es auf deine komische "Art und Weise" machen willst, dann nehme (nur als Beispiel) "ein Interface".
Nur so als Tipp.

Dann mach das doch. Niemand hier hält Dich ab! Aber wenn Du Fragen stellst, dann bekommst Du von uns Antworten. Wenn die Antworten nicht das sind, was Du gemeint hast, dann konkretisiere die Fragen. Aber das jetzt hier ist einfach nur mangelhaft und nimmt einem jede Lust, sich mit Dir auseinander zu setzen.

Genau, geht mir genauso! Denn wir können jetzt hier noch Tagelang herumdiskutieren wie was und worum und wer noch mehr recht hat! ;)
Bringt alles nix. Alles Off-Topic bzw. nichts was mir jetzt konkret und vor allem SCHNELL weiterhilft oder was ich gefragt habe.
Das Problem was ich hier sehe ist, ihr denkt schon 10 Schritte voraus als Profis, ich muss aber erstmal schritte 2,3,4,5 machen.
Wie gesagt, es bringt nix hier zu diskutieren. Dazu sind andere Topics gut.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Hilfe-brauche eine Idee! Java Basics - Anfänger-Themen 5
S Hat jemand eine Idee warum die JLabels nicht mehr farbig Java Basics - Anfänger-Themen 7
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
A Eclipse IDE - Wie bekomme ich eine ältere Version Java Basics - Anfänger-Themen 6
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
M Wie richte ich eine Diagonale an Robotern in einer World ein? Java Basics - Anfänger-Themen 15
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Kann ich eine jar anschauen wie sie gecoded wurde? Java Basics - Anfänger-Themen 2
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
B eine methode erstellen Java Basics - Anfänger-Themen 7
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Tino1993 for-Schleife, die eine vorgegebene Anzahl von Zeichen ausgibt Java Basics - Anfänger-Themen 3
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
I Wo am besten eine String Konstante initialisieren? Java Basics - Anfänger-Themen 5
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
Y Methoden Wie kann ich eine if-Abfrage bei Setters bauen? Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
C Methoden Java ist auch eine Insel Listing 2.40 Recursion Java Basics - Anfänger-Themen 7
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
P Eine komplizierte Sache Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben