Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich bin Recht neu in der Programmierung unter Java für PC-Software. Ich habe vor etwa einem halben Jahr mit Java gestartet und bin dann nachdem die Basics saßen zur Android Entwicklung übergegangen. Jetzt würde ich gerne ein PC-Programm schreiben.
Bei Android sieht der Aufbau so aus:
Package:
-> Klasse 1
-> Klasse 2
-> Klasse 3
Eigentlich ist jeder Klasse ein eigenes Layout zugeordnet. Das heißt beispielsweise Klasse 1 ist ein Login Bereich. Ist man erfolgreich eingeloggt startet sich Klasse 2 mit dem neuen Layout und dem Code der unter Klasse 2 geschrieben wurde. Jede Klasse hat ihre eigene Main Methode.
Ich möchte das ganze nun ähnlich in Java unter Netbeans programmieren. Also ein einheitliches Package mit verschiedenen Klassen darunter die eine eigene Benutzeroberfläche haben. Soweit so gut. Ich habe jetzt mal ein Beispiel entwickelt. Ein Package mit zwei Klassen. In Klasse 1 befindet sich nur ein Button. Wenn auf diesen geklickt wird soll die Klasse 2 mit der eigenen Benutzeroberfläche erscheinen. Ähnlich wie wenn man ein Programm installiert.
Meine Frage ist wie wechsel ich zwischen diesen Klassen?
Ist mein Ansatz zu denken es ist wie unter Android richtig? Oder hat man hier nur ein Fenster das je nach Aktivität (Klicken des Buttons) neue Elemente (z.B. Textfelder) hinzufügt und den Button unsichtbar macht?
Also zum Wechseln der Klasse hast du zwei Möglichkeiten:
Erstens du gehts hin und machst nur in der ersten Klasse eine main-Methode, die anderen ersetzt du durch etwas wie
Java:
static void start (){
//Code aus der Main hier einfügen
}
Diese Rufst du dann aus der vorherigen Klasse mit
Java:
NameDerKlasse.start()
auf. Dabei kannst du auch noch Parameter, etc. übergeben.
P.s. das würde ich empfehlen, das mit nur einem Fenster ist zwar schöner für den Benutzter aber deutlich schwerer.
Alternativ probiere es mit
Java:
new NameDerKlasse();
, dies kann aber probleme verursachen, z.b probleme mit Threads.
Generell solltest du nicht direkt versuchen, das Android-Framework eins-zu-eins auf Desktop zu übertragen.
Stattdessen kannst du dir einfach mal die gebräuchlichen GUI-Frameworks wir JavaFx oder etwas älter Swing angucken, und wie man mit diesen arbeitet.
Sowohl die Variante mit einem Fenster und verschiedenen Inhalten, als auch verschiedene Inhalte sind möglich - und beide haben Vor- und Nachteile.
Hallo ihr zwei. Erstmal dankeschön für eure Antworten. Der Grund weshalb ich es bevorzugen würde alles in einem Fenster Step-by-Step zu machen liegt daran, das es immer wieder der gleiche Schritt ist.
Der Benutzer soll ein Bild von seinem PC wählen klickt auf weiter -> dann wird er nach einigen dingen gefragt klickt weiter (dabei wird das Bild im hintergrund bearbeitet) -> Benutzer klickt wieder auf weiter, ist damit fertig und kann sich das fertige Bild wieder speichern.
Deshalb bietet sich meiner Meinung nach (hab ja keine anderen Erfahrungen bzw. wüsste nicht wie ich das mit mehreren Fenstern lösen sollte) eine Lösung mit nur einem Fenster am besten an.
Ich habe es mal nach Steinschnüffler's Variante probiert. Dabei habe ich bemerkt das man so natürlich den code ausführen kann, aber die GUI irgendwie fehlt. Deshalb habe ich mal die Stage probeweise mit übergeben. Hat zwar funktioniert, ich denke mir aber das das nicht unbedingt sinnvoll ist das Hauptfenster durch jede Klasse und Methode zu reichen. Der Code sieht derzeit so aus:
public class FxErstes extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage hauptFenster)
{
Button schaltFlaeche = new Button();
schaltFlaeche.setText("Start Seite 2");
schaltFlaeche.setOnAction( (ev) -> StartSeite2(hauptFenster) );
StackPane behaelter = new StackPane();
behaelter.getChildren().add(schaltFlaeche);
hauptFenster.setTitle("Test");
Scene fensterSzene = new Scene(behaelter, 400, 200);
hauptFenster.setScene(fensterSzene);
hauptFenster.show();
}