JavaFX Mit einer Methode auf Stage zugreifen.

ForianF

Mitglied
Hallo, ich heiße Florian und bin 30 Jahre alt.
Mit JavaFx befasse ich mich jetzt ca 3 Monate.
Bis jetzt konnte ich auch alles nachlesen und habe hier schon viel gelernt.

Ich versuche schon seit 2 Tagen auf die Stage der public void start (Stage stage) Methode zuzugreifen.
Dies will ich erreichen weil ich ein paar Buttons in einer anderen klasse habe und aktionen ausführen wie z.b. das Fenster verschieben zu können.

Meine Idee war nun ein Stage zu erstellen: public static Stage stage1;
und dieses Stage dann der Start-Methode: public void start (stage1)
zu übergeben.
Dies scheint allerdings nicht zu funktionieren.

Gibt es eine Lösung für mein Problem, bzw ist das Überhaupt möglich ?

Hier der Code mit dem ich das versuche zu testen.

Java:
package stageTest;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import static javafx.application.Application.launch;

public class Test extends Application
{
    public static Stage stage1;
   
    @Override       
    public void start (stage1)

    {
        GridPane grid = new GridPane();
        Label label = new Label("test");
        grid.add(label, 1, 1);

        Scene scene = new Scene(grid, 400, 200);
       
        stage1.setTitle("TestScene");
        stage1.setScene(scene);
        stage1.show();
    }    
   
    public static void main(String[] args)
    {
        launch(args);
    }
}
 

Jardcore

Top Contributor
Ich glaube dein Denkansatz ist ein wenig falsch.

Die Stage in der start() Methode ist das Hauptfenster deiner Application.

Du kannst ganz einfach (egal wo) ein neues Stage Objekt anlegen und diese mit show() öffnen.
Für einfache Benachrichtigungen gibt es auch Dialoge. http://code.makery.ch/blog/javafx-dialogs-official/

Für die Verwaltung deiner Fenster bietet es sich an einen FensterController oder ähnliches zu erstellen, welcher die Referenzen auf deine Fenster hält. Der Controller entscheidet dann welches Fenster zurzeit angezeigt wird.
Mit der Methode close() der Stage kannst du nämlich auch Fenster temporär schließen und später erneut öffnen.
 

ForianF

Mitglied
Danke!
dein Beitrag hat mir weiter geholfen, und du hattest recht .. mein Denkansatz war nicht ganz richtig.

Das mit der close() Methode habe ich an anderen Stellen bereits verwendet.
Einen FensterController werde ich eventuell in einem anderen Projekt testen.

Verstehe ich das richtig das ich jetzt ein Stage in der Startmethode anlege, ohne dieses zu verwenden ?
Und wenn, ist das schlecht ?

Ich habe den Code jetzt wie folgt.

Java:
package stageTest;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import static javafx.application.Application.launch;

public class Test extends Application
{
    public static Stage stage()
    {
        Stage stage = new Stage();
        GridPane grid = new GridPane();
        Label label = new Label("test");
        grid.add(label, 1, 1);

        Scene scene = new Scene(grid, 400, 200);      
        stage.setTitle("TestScene");
        stage.setScene(scene);      
        return stage;
    }
  
    @Override      
    public void start (Stage Hauptfenster)
    {
        stage().show();
    }   
  
    public static void main(String[] args)
    {
        launch(args);
    }
}
 
Zuletzt bearbeitet von einem Moderator:

dzim

Top Contributor
Was genau möchtest du denn erreichen? Ich muss zugeben, dass ich gerade nicht ganz hinterherkomme, was dein Ziel ist.
 

ForianF

Mitglied
Ich habe es wahrscheinlich auch nicht genau genug erklärt.
Mein Programm funktionierte bis jetzt gut, wurde aber unübersichtlich weil fast alles in der Methode start geschrieben war.
Die Buttons habe ich jetzt in einer extra Klasse, diese funktionieren so auch.
Das einzige was nicht funktioniert, ist die Positionierung der Dialoge die beim klicken auf diese Buttons erscheinen.
Ein Button hat zum beispiel die Funktion Fahrzeuge hinzuzufügen.
Klickt man diesen geht ein Dialog (der soll direkt neben dem Button Fahrzeug Hinzufügen erscheinen)auf in dem man das Fahrzeug eingeben kann und beim Klick auf hinzufügen geht es wieder zu, soweit klappt also alles.
Die Positionierung funktioniert allerdings nicht, da diese Position wohl immernoch von deisem in der Startmethode erzeugten Stage ausgeht!?
folgenden befehl habe ich für die Positionierung ursprünglich als alles in der Start Methode stand benutzt:
Code:
            dialog.setX(hauptFenster.getX()+225);
            dialog.setY(hauptFenster.getY()+0);
Jetzt habe ich versucht diese Ausrichtung an der neuen Stage Methode anzuwenden, mit diesem Code:
Code:
            dialog.setX(hauptstage.getX()+225);
            dialog.setY(hauptstage.getY()+0);


Hier die aktuelle Start-Klasse:
Code:
import javafx.application.Application;
import javafx.stage.Stage;
import static javafx.application.Application.launch;

public class Start extends Application
{
    @Override       
    public void start (Stage Hauptfenster)
    {
        Hauptstage.stage().show();
    }
    public static void main(String[] args)
    {
        launch(args);
    }
}

und die Hauptstage Klasse:
Java:
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundPosition;
import javafx.scene.layout.BackgroundRepeat;
import javafx.scene.layout.BackgroundSize;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Hauptstage
{
        public static double xOffset = 0;
        public static double yOffset = 0;
        public static Label StatusLabel = new Label();
            
        public static Stage stage()
    {
         //hintergrundbild
        BackgroundImage myBI= new BackgroundImage(new Image("/style/hintergrund.png",800,533,false,true),
        BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
        BackgroundSize.DEFAULT);
       
        GridPane grid = new GridPane();
        grid.setGridLinesVisible(false);
        grid.setHgap(10);//gibt horinzontaler abstand der elemente an
        grid.setVgap(10);//gibt vertikaler abstand der elemente an
        grid.setPadding(new Insets(10, 10, 10, 10)); //gibt abstand von grid zu fensterrand an
        grid.setBackground(new Background(myBI));
       
        Scene scene = new Scene(grid, 800, 533);
        scene.getStylesheets().add("/style/style.css");
        scene.setFill(new Color(0, 0, 0, 1.00));
       
        Stage stage = new Stage();
        stage.setTitle("BikeSetup");
        stage.setScene(scene);
        stage.initStyle(StageStyle.TRANSPARENT);
        stage.setResizable(false);
       
        //Fenster verschieben
        grid.setOnMousePressed((MouseEvent event) ->
        {
            xOffset = event.getSceneX();
            yOffset = event.getSceneY();
        });
        grid.setOnMouseDragged((MouseEvent event) ->
        {
            stage.setX(event.getScreenX() - xOffset);
            stage.setY(event.getScreenY() - yOffset);
        });
       
       
        grid.add(Buttons.exit(),1,2);
        grid.add(Feld_Location.location(),1,1);
        grid.add(Feld_Location.loctaion_inhalt(),1,1);
       
        return stage;
    }
}

Ich hoffe so habe ich das Problem verständlicher erklärt.
Danke schonmal für die Hilfe hier :)
Ich hatte lange gewartet und gegoogelt bevor ich mich hier gemeldet habe, aber leider bin ich nicht wirklich weiter gekommen.
 

thet1983

Top Contributor
Warum machst du dir nicht einfach eine Getter?
Java:
public static getMainStage(){
     return mainStage;
}
// Zugriff aus einer anderen Klasse
//....
MainApp.getMainStage();
 

ForianF

Mitglied
Jetzt habe ich das Problem gelöst.
Das mit dem Getter habe ich versucht, wollte aber nicht so recht.
Irgendwas habe ich wohl falsch gemacht daran.
Nachdem ich nach "getMainStage" gegoogelt habe und mir ein paar codes angeschaut habe, fand ich die Lösung für mein Problem.
Durch die Antworten die mich nicht weitergebracht haben, habe ich trotzdem dazugelernt. :)

Nochmals danke für die Unterstützung hier !

Hier ein ausschnitt der Klasse :
Java:
public class Start extends Application
{
    public static Stage primaryStage;

    @Override      
    public void start (Stage primaryStage)
    {
        this.primaryStage = primaryStage;
       primaryStage.show();
    }
 

thet1983

Top Contributor
genau das was ich geschrieben habe...

wenn du es jetzt so lässt, also 'public' dann könnte man die Stage aus einer anderen Klasse manipulieren.
wenn du es private und mit getter machst dann ist dein object geschützt.
also für andere Klassen nur über getter ansprechbar

Java:
public class MainApp extends Application{
           private static Stage mainStage; // private object kann icht von aussen manipuliert werden

          public void start(Stage mainStage){
              this.mainStage = mainStage;
         }
}

/* Getter von MainStage */
public static Stage getMainStage(){return mainStage;}

// ---------- KLASSE B ------//

public class KlasseB{
        public static void main(String[]args){
               System.out.println(MainApp.getMainStage().toString());
        }
}
 

ForianF

Mitglied
Ok, jetzt funktioniert es mit dem Getter.
Mein Fehler beim ersten versuch mit einem Getter zu arbeiten war das ich den Befehl
Java:
this.mainStage = mainStage;
vergessen hatte.
Danke vielmals, jetzt klappt alles wie es soll :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
B Methode setzt nicht das Layout in einer if-Abfrage AWT, Swing, JavaFX & SWT 13
E AWT Implementierung einer Anweisung in Methode ActionPerformed AWT, Swing, JavaFX & SWT 2
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
Z JOptionPane mit einer Methode in dem Vordergrund setzen? AWT, Swing, JavaFX & SWT 6
S Progress Monitor mit einer Methode() verbinden AWT, Swing, JavaFX & SWT 4
J mehrere Action Buttons mit einer ActionListener Methode AWT, Swing, JavaFX & SWT 7
M GUI Update während der Verarbeitung einer Methode AWT, Swing, JavaFX & SWT 3
D Element aus einer Methode heraus hinzufügen AWT, Swing, JavaFX & SWT 2
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
@SupressWarnings() JavaFX Auf den Controller einer ListCell zugreifen AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
K JavaFX ViewTable mit einer LinkedList befüllen AWT, Swing, JavaFX & SWT 3
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
MiMa Selektion aus einer ListView AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
D JavaFX Einbinden einer .fxml AWT, Swing, JavaFX & SWT 1
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Prüfung einer Eingabe auf Gleitkommazahl AWT, Swing, JavaFX & SWT 5
J Suchmaschine einer Datenbank AWT, Swing, JavaFX & SWT 5
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
M Auswahl aus einer ListView AWT, Swing, JavaFX & SWT 3
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
C JavaFX Tief setzen in der Überschrift einer Tabellenspalte AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben