JFrame anfänger bräuchte hilfestellung

Paty

Mitglied
hallo hoffe das ist richtig hier, wenn nicht gerne verschieben.
Die Frage ist, oder das problem, mein Lehrer meinte, mach einfach mal und jetzt stehe ich vor Aufgabe, mein erstes Projekt was einfach von oben nach unten arbeitet, in jframe zu packen, sprich grafisch darzustellen.
hab den Lehrer jetzt seit einen tag und der denkt gleich, ich kann alles bereits....erster schritt wäre, mein array aus drei personen, mit guthaben und verschiedenen preisen abzurufen ,über den namen, soweit so gut, nur jetzt hackt es schon bei der if abfrage, wie ich die antworten grafisch dargestellt bekomme und dann hackt es schon hier das er meckert, das die namens abfrage auf private klasse zugreift, das mag das programm netbeans auch schon nicht....
name hat private-Zugriff in java.awt.Component
kommt dann als fehler....

erst einmal bräuchte ich aber tipp wie ich das mit if else jetzt darstelle? youtube war leider keine hilfe, fand zumindest nichts direkt dafür

hier mal mein code und ich weiß er ist schlimm aber es ist mein ertes projekt und wie ihr merkt lerne ich noch.... 🙂

und mache ich das dann mit mehreren panels in meinen fall oder wie sollte ich das aufteilen? sprich ein pannel namensabfrage dann eins wo fragt ob man aufladen will und eins für pin eingabe und zum schluss für nachzalung eins oder wie würdet ihr das darstellen? theoretisch ginge auch tabbetpane aber da weiß ich nicht wie ich den code screiben müsste das er in den passenden tab automatisch geht...der benutzer soll ja nicht den zahlvorgang überspringen können....
 
Zuletzt bearbeitet:
Also Deine Fragestellung ist so gerade nicht wirklich verständlich. Ich sehe da gerade nicht wirklich ein konkretes Problem, wo man eine konkrete Antwort geben kann.

Wie Du die UI genau aufbaust, ist erst einmal egal - Du hast mehrere Möglichkeiten genannt und die würden alle prinzipiell funktionieren.

Aber du musst Deinen Code vernünftig strukturieren. Der Aufbau ist so schlicht mangelhaft und kaum nachvollziehbar. Du solltest Dir immer erst die Struktur selbst überlegen und dann das bauen, was man meist als Model bezeichnet. Dann hast Du entsprechende Klassen, die die Daten verwalten und die Du dann nutzen kannst.

So hast Du irgendwelche Kunden (oder wie Du das auch immer nennen willst), die einen Namen und ein Guthaben haben. Die kann man also entsprechend als Klasse schreiben. Und dann gibt es eine KundenKartei oder so, in der die Kunden verwaltet werden. Bei der Kundenkartei kann man dann z.B. nach einem Kunden mit einem bestimmten Namen schauen. Wenn man einen Kunden hat, dann kann man das Guthaben anpassen und so ...

Wenn man sowas hat, dann kann man darauf eine UI aufbauen. Die UI bildet dann irgendwas ab, was dann auf das Model zugreift. Um das vernünftig abzubilden, strukturiert man das weiter. Das kann dann z.B. MVC oder MVVM sein.

Was aber in Deinem Code noch auffällt: Static Variablen sollte man wenn möglich nicht nutzen. Da gibt es bei Dir z.B. keinerlei Grund für.
 
Was mir bei deinem Layout auffällt ist.

Das da bestimmt nur ein Teil angezeigt wird. Der Button die du in den EventListenern erstellst werden sicherlich keinen Platz mehr in dem Layout haben. Somit wird der zweite e Button bestimmt nicht mehr angezeigt.

JButton calculateButton = new JButton("Calculate");

Ist bestimmt nicht mehr sichtbar.



Schaue wie du ein Layout machst was groß genug für deine Views ist.
 
Auch wenn du dein Frame vergrößerst so das du alles sehen kannst.

Macht für mich keinen sinn das du die Label, Textfeld und Buttons nacheinander in das Layout einblendest hinzufügt.
Der User kann ja immer wieder zurück gehen zb auf zu ersten Button und auch zwischen durch auch den Namen ändern .
Das willst du ja bestimmt nicht.

Dann benutze doch immer das gleiche Label, Textfeld und auch den Button.
Ändere doch den Text des Labels entsprechen für die Abfrage.
Und im Listerner prüfst bei welchen Eingabepunkt du bist.
 
ich bin jetzt etwas weiter hab mir textfeld gemacht mit bitte namen angeben und ein text feld zum namen eintragen, jetzt habe ich ja den bereich
public NewJFrame() {
initComponents();

da schreibe ich jetzt praktisch meine funktionen rein?
dachte erst für alle labels und co wird ein code feld generiert zum funktionen rein screiben, anscheinend gib es aber nur das initcomponents?
schreibe ich da quasi den benenner davor und dann die funktion?
quasi so?
public NewJFrame() {
initComponents();
jTextField1.setVisible(true);
panel.add(nameTextField);
submitButton.addActionListener((ActionEvent e) -> {
processName();

ich gehe mal davon aus das ist falsch? 🙃
vermutlich muss ich eher in neuer file dann die funktionen eintragen korrekt?
 
Hallo mit den Infos kann ich nicht viel anfangen.

Wie hier auch schon so oft gesagt Code bitte Komplet in den Code Block oben links "</>"

Was ist NewJFrame ist das eine Klasse die von JFame erbt?
Wie schaut die Methode initComponents(); aus ?
 
ich bin jetzt etwas weiter hab mir textfeld gemacht mit bitte namen angeben und ein text feld zum namen eintragen, jetzt habe ich ja den bereich
public NewJFrame() {
initComponents();

da schreibe ich jetzt praktisch meine funktionen rein?
dachte erst für alle labels und co wird ein code feld generiert zum funktionen rein screiben, anscheinend gib es aber nur das initcomponents?
schreibe ich da quasi den benenner davor und dann die funktion?
quasi so?
public NewJFrame() {
initComponents();
jTextField1.setVisible(true);
panel.add(nameTextField);
submitButton.addActionListener((ActionEvent e) -> {
processName();

ich gehe mal davon aus das ist falsch? 🙃
vermutlich muss ich eher in neuer file dann die funktionen eintragen korrekt?
initComponents ist nur eine ausgelageret Methode, damit der ganze Rotz nicht im Konstruktor steht.
Der Name initComponents und der Fakt, dass du nicht weißt, was das sein soll, spricht sehr dafür, dass die Funktion von einer IDE erstellt wurde.
Wenn du da was reinschreibst, kann es sein, dass du alles wieder verlierst, wenn du das Formular das nächste Mal im Editor öffnest, da sie dann anhand der XML Beschreibung neu erstellt wird.

Was du hier geschrieben hast, ist bis auf fehlende Klammern nicht falsch, sofern nameTextField eine Instanzvariable ist und entweder schon am Deklarationsort oder während initComponents initialisiert wurde.
 

Zurück
Oben