JavaFX Von Klasse auf Controller Inhalt zugreifen

AvaJ2

Mitglied
hi,

ich wollte mal fragen, ob einer weiß, wie man von einer separaten Klasse x zugriff auf den Controller hat, z.B. um in der Klasse x die texte eines Buttons oder Textfeldes zu ändern.

Zunächst dachte ich daran, in einer Methode, die den Text ändern soll, den Controller als parameter zu übergeben. Hat leider nicht funktioniert.
 

knilch

Bekanntes Mitglied
Hi,
So kurz gesagt, musst du dem Controller die Instanz der Klasse x mitteilen, damit der Controller dort die Members setzten, bzw. lesen kann.
Aber so ohne Code wird's schwierig, wo dein Problem liegt...
 

AvaJ2

Mitglied
Genau, an sowas hatte ich auch gedacht, aber weiß nicht, wie ich in den Controller die Klasse x mitteile.
Code ist recht groß, kurz gezeigt sieht es ungefähr so aus:
Java:
public class KlasseX{

private FirstController fc;
public KlassX(){
machEtwas(fc);
}

public void machEtwas(FirstController fc){
this.fc=fc;
fc.button.setText("RUN");
}

}

Code:
public class FirstController implements Initializable{

@FXML
public Button button
...
public void initialize(URL location, ResourceBundle resources) {}

}
 

knilch

Bekanntes Mitglied
Hi,
In der Klasse FirstController.java, welche ja der Controller vom FXML ist, muss die onAction- Mehtode implementiert werden, wenn z.B. auf einen Button, welcher im FXML deklariert ist, gedrückt wird.
Hier mal ein Beispiel:
View.fxml:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ViewController">
  <children>
  <Label text="Name eingeben">
  <padding>
  <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
  </padding>
  </Label>
  <TextField fx:id="textField">
  <VBox.margin>
  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
  </VBox.margin>
  </TextField>
  <Label fx:id="label">
  <VBox.margin>
  <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
  </VBox.margin>
  </Label>
  <Button fx:id="button" onAction="#handleBtnEvent" text="Drück mich">
  <VBox.margin>
  <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
  </VBox.margin>
  <padding>
  <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
  </padding>
  </Button>
  </children>
</VBox>
ViewController.java:
Java:
import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class ViewController implements Initializable {
    @FXML
    private Button button;
    @FXML
    private Label label;
    @FXML
    private TextField textField;
  
    private KlasseX klasseX;
      
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // TODO
    }
  
    public void setClassX(KlasseX klasseX) {
        this.klasseX = klasseX;
    }
  
    @FXML
    protected void handleBtnEvent() {
        klasseX.setName(textField.getText());
        label.setText("Der Name der eingegeben wurde ist: " + klasseX.getName());
    }
}
KlasseX.java
Java:
public class KlasseX {
    private String name;

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
}
Main.java:
Java:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class Main extends Application {

    public static void main(String[] args) {
        launch();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            final FXMLLoader loader = new FXMLLoader(getClass().getResource("View.fxml"));
            final Parent root = (Parent) loader.load();
  
            ViewController viewController = (ViewController)loader.getController();
            viewController.setClassX(new KlasseX());
            primaryStage.setTitle("Java FX");

            Scene scene = new Scene(root);
          
            primaryStage.setScene(scene);
            primaryStage.show();
          
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
 
Zuletzt bearbeitet:

AvaJ2

Mitglied
Das hat aber grade nichts mit meinem Problem zu tun oder?
Ich will ja den Text eines Button/Labels/Textfeld usw. auf einer anderen Klasse ändern.
Was du zeigst ist die standard Prozedur, wie man den Buttons ausführt.
 

knilch

Bekanntes Mitglied
Ich hab die code snippets noch updated.. mit der KlasseX.java und wie du auf den Member name via ViewController zugreifen kannst...
Ich will ja den Text eines Button/Labels/Textfeld usw. auf einer anderen Klasse ändern.
Auf die FXML-Controlls kannst du nur in der Kontroller-klasse zugreifen.
 

AvaJ2

Mitglied
hmm...
@FXML
protected void handleBtnEvent() {
klasseX.setName(textField.getText());
label.setText("Der Name der eingegeben wurde ist: " + klasseX.getName());
}

das wird ja immer nich im Controller umgeschrieben, ist es nicht möglich in der KlasseX den Text eines Labels zu ändern, so das ich nur noch den Konstruktor aufrufen muss im Controller?
Dachte das es vorteilhafter währe, da ich mehrere Klassen erstellen kann und je nach situation Änderungen vornehme, z.B durch factories.
 

knilch

Bekanntes Mitglied
So ist das eigentlich nicht vorgesehen..
Ein FXML benutzt eine Controller-Klasse, in welcher die Aktionen, die im GUI ausgeführt werden implementiert werden.
Was du machen möchtest (so versteh ich das), ist eine KlasseX, welche auf die Controlls vom FXML zugreifen will und dort den Text ändert (oder sonst was)...
Dies ist aber die Aufgabe der Controller-Klasse vom FXML.
 

AvaJ2

Mitglied
Okay, danke.
Verwirrt mich jetzt aber etwas. Fabrikmethoden haben doch dann in javafx kein sinn, da man da sowieso auf die GUI Elemente nicht zugreifen kann oder verstehe ich das falsch (zumindest fällt mir keine Situation ein wo man dann noch factories bräuchte)?
 

knilch

Bekanntes Mitglied
Fabrikmethoden haben doch dann in javafx kein sinn, da man da sowieso auf die GUI Elemente nicht zugreifen
Auf die Controlls (Button, Label, TextField etc.) kannst du innerhalb dem FXML-Controller zugreifen. Du kannst die Controlls (Button, Label, TextField etc.) je nach Situation unterschiedlich benennen, aktivieren, deaktivieren, etc. Das machst du indem du vor primaryStage.show(); die verschiedenen status setzt. z.B. im FXML-Controller:
Damit wird der Button von Senden auf Send umbeannt, je nachdem welcher wert in der Methode setStatus() mitgegeben wird.
Java:
  public void setStatus(boolean status ) {
     if(status)
       button.setText("Send");
     else
       button.setText("Senden");
   }
und in
Java:
    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            final FXMLLoader loader = new FXMLLoader(getClass().getResource("View.fxml"));
            final Parent root = (Parent) loader.load();
   
            ViewController viewController = (ViewController)loader.getController();
            viewController.setClassX(new KlasseX());
            viewController.setStatus(true);
            primaryStage.setTitle("Java FX");
            Scene scene = new Scene(root);
            primaryStage.setScene(scene);
            primaryStage.show();
           
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
Das mit den Factory-Methoden und Factory-Pattern kannst du nicht so 1:1 umsetzten. Mit JavaFX wird das MVC-Pattern evtl. das MVVM-Pattern umgesetzt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Javafx Controller Klasse in Maven AWT, Swing, JavaFX & SWT 7
L JavaFX Verständnisfrage zu JavaFX FXML und Controller-Klasse AWT, Swing, JavaFX & SWT 1
D JavaFX Controller Klasse splitten? AWT, Swing, JavaFX & SWT 16
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
_user_q Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
T JavaFX TableColumn in separate Klasse auslagern AWT, Swing, JavaFX & SWT 7
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
B Was würden Profis an meiner Klasse verbessern? AWT, Swing, JavaFX & SWT 1
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
S Stream API, Anonyme Klasse AWT, Swing, JavaFX & SWT 8
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
F Jtree aus Klasse mit Arraylisten AWT, Swing, JavaFX & SWT 1
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
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
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 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
S per Button Variableninhalt aus anderer Klasse holen AWT, Swing, JavaFX & SWT 3
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
N JavaFX Erweitern der Line(Shape)-Klasse AWT, Swing, JavaFX & SWT 1
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
J JavaFX Mehrfache Benutzung von Methoden einer Klasse AWT, Swing, JavaFX & SWT 17
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
B Swing GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 4
B Klasse mit ArrayList AWT, Swing, JavaFX & SWT 1
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
D AWT Das ganze GUI in eine Klasse? AWT, Swing, JavaFX & SWT 1
C JavaFX Klasse wird nicht als public erkannt AWT, Swing, JavaFX & SWT 6
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
V JavaFX, Pane construktor von einer Klasse in der Main verwenden. AWT, Swing, JavaFX & SWT 4
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
X buttons aus externe klasse lesen? AWT, Swing, JavaFX & SWT 3
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
M Gui in einer anderen Java Klasse aufrufen AWT, Swing, JavaFX & SWT 1
A Problem mit JFrame in separater Klasse AWT, Swing, JavaFX & SWT 3
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
D Nächste GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 7
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
JavaInBrain Swing Rückgabe aus MouseListener-Klasse AWT, Swing, JavaFX & SWT 3
J Swing Nach SwingWorker Funktion aus der GUI Klasse aufrufen AWT, Swing, JavaFX & SWT 5
G JPanel aufrufen in andere Klasse AWT, Swing, JavaFX & SWT 2
G Window aus anderer Klasse aufrufen AWT, Swing, JavaFX & SWT 4
S klasse einbinden funktioniert nicht AWT, Swing, JavaFX & SWT 6
M JDialog übergibt eingaben nicht an aufrufende klasse AWT, Swing, JavaFX & SWT 15
B Zugriff auf JFrame obwohl die Klasse abgeleitet ist AWT, Swing, JavaFX & SWT 3
M Swing Array aus anderer Klasse AWT, Swing, JavaFX & SWT 6
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
J ActionListener per Innere Klasse oder e.getActionCommand() if-Abfrage? AWT, Swing, JavaFX & SWT 12
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
J Anonyme Klasse - Button ansprechen - Warum muss Button final sein? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben