Zugriff auf Bildschirmobjekte aus einem anderen Programm

Juelin

Bekanntes Mitglied
Hallo,
habe in einem Programm Bildschirmobjekte wie Label, Textfield usw.
private Label anzeige
private Textfield eingabe

Besteht eine Möglichkeit von einem zweiten Programm auf diese Objekte
zu zugreifen?
Also z.B. den Text des Labels zu ändern oder so, mit anzeige.setText().
Einfach auf public setzen geht nicht.

Danke und Gruß
Jürgen
 

KonradN

Super-Moderator
Mitarbeiter
Erst einmal gehe ich davon aus, dass Du nicht Programm sondern Fenster meinst. (So wie Du in Deiner Anwendung Vital 4 weitere Fenster hast, die Du bei Bedarf modal öffnest. Es ist alles ein Programm aber Du hast mehrere Fenster.)

Ja, prinzipiell kannst Du auch auf Elemente von anderen Fenstern zugreifen. Dazu brauchst Du prinzipiell nur eine Referenz auf den entsprechenden Controller und die Elemente müssten public sein.

Aber: Das ist nichts, das man machen sollte! Eigentlich sollte die eigentlichen Daten und die Logik unabhängig von der Oberfläche sein. Dann können sich die Daten ändern und Komponenten, die sich für eine solche Information interessieren, werden dann informiert (Das wäre dann das Observer Pattern). In JavaFX ist da schon sehr viel vorhanden für. So kannst Du z.B. hin gehen und eine Klasse haben, dass die Daten hält. Nehmen wir einfach nur ein kleines Beispiel:

Java:
public class Model {
    private StringProperty vorname = new SimpleSringProperty();
    
    public StringProperty getVornameProperty() {
        returnvorname;
    }
}

Wenn Du nun irgendwo ein Fenster erzeugst, dann hast Du bei Dir immer mehrere Schritte beim Laden:
  • FXMLLoader erzeugen
  • fxml laden
  • Controller geben lassen.

Da würdest Du halt dann noch im Controller eine Methode haben setModel(Model) oder so in dem DU das model setzt.
Zusätzlich kannst Du dann noch ein sogenanntes Binding zu einem Control machen. Du kannst also etwas sagen wie:
  • Wenn sich das Eine ändert, dann soll sich auch das Andere ändern (Dann gehen Änderungen nur in eine Richtung)
  • Änderung in beide Richtungen: Egal was sich ändert: Es soll sich auch der andere Wert ändern.

Wenn Du jetzt zwei Fenster hast, die beide den Vorname anzeigen: Dann müssen sich diese Fenster nicht kennen. Sie arbeiten beide einfach auf dem gleichen Model und haben dann z.B. ein Bidirektionales Binding.

Wenn Du dann den Wert im Textfeld des ersten Fensters änderst, dann:
  • ändert sich auch der Wert im Model
  • Und dann ändert sich auch der Wert im zweiten Textfenster.

Anders herum natürlich auch und wenn Du den Wert direkt im Model setzt, dann ändert sich automatisch der Wert in den beiden Textfeldern.

So reduziert sich die Komplexität massiv und Deine Fenster müssen sich nicht untereinander kennen.

(Die Bindings finden zwischen Properties statt. So hat ein Control sehr viele Properties, die man binden kann. Und eine Property ist z.B. das textProperty, welches hier benutzt würde.)
 

Juelin

Bekanntes Mitglied
Hallo Konrad,
danke für deine Antwort.
Aber so war es nicht gemeint.
Ich möchte nicht von einem anderen Fenster aus auf Objekt im andernen fenster zugreifen,
sondern ich habe eine eigene class (File) mit der ich auf Objekte (Label, Textfield usw) im Controllerprogramm zugriefen möchte.
Beispiel:
in meinem Program VitalInsertController.java
@FXML
private Label anzeige15;
@FXML
private TextField eingabe21;

Nun möchte ich aus den Routinen im FensterFelder.java (Standard-Routinen)
z. B. den Text inder anzeige15 ändern also
VitalInsertController.anzeige15.setText("ABC");

Das geht nicht, weill ich im VitalInsertController das Label anzeige15 gar nicht angezeigt bekomme.
Auch in f2VarRout ist anzeige 15 nicht drin
f2VarRout kommt aus dem Programm VtalController.jan bei button1Clicked (f2VarRout = fxmlLoader.getController();).
Und auch private Label anzeige15; auf public Label anzeige15; setzen geht nicht (mekert an muss auch static sein)
Und wenn ich private Label anzeige15; auf static public Label anzeige15; setze läuft der Label im Programm VitalInsertController nicht mehr richtig.

Gibt es da eine Möglichkeit?

Danke und Gruß
Jürgen
 

KonradN

Super-Moderator
Mitarbeiter
Das ist DeinMissverständnis. Du hast nur ein einziges Programm. Du hast ein Projekt und das baut genau ein einziges Programm. Und du startest dann dieses eine Programm. In dem Projekt hast Du dann diverse Dateien. Sowohl Java Klassen als auch Ressourcen (z.B. fxml Dateien).

Und in diesem einen Programm öffnest Du dann neue Fenster.... Und im Rahmen dessen lädst Du eine fxml Ressource im Rahmen dessen dann eine Controller Instanz (z.B. von deiner VitalInsertController Klasse) erstellt wird.

Du bist aber in einem Programm. Daher konntest Du auch auf die ganzen public static Variablen zugreifen, die Du so alles hast (oder hattest - ich bin nicht sicher, ob Du die Hinweise bezüglich dieser Variablen umgesetzt hast).

Du kannst das auch gerne prüfen: Starte die Anwendung und schau im Taskmanager nach: Öffnet sich ein weiterer Prozess, wenn Du z.B. das Insert Fenster öffnest? Nein, wie auch? Du startest ja keinen neuen Prozess (und damit wird kein neues Programm gestartet).

Hier ist also wichtig, dass Du die Begriffe richtig verwendest.
 

Juelin

Bekanntes Mitglied
Ok Konrad,
habe es schon heraus gefunden.
Hatte irgendwie noch was anderes im Kopf, da ich es mal mit Tableview probiert hatte.
Alles klar.
Danke
 

KonradN

Super-Moderator
Mitarbeiter
Und wie dann mit dem Binding vom Code her aussehen könnte, zeigt dieses Beispiel:
Java:
package de.kneitzel;

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class BindingExampleApp extends Application {

    StringProperty stringProperty = new SimpleStringProperty();

    public static void createScene(Stage stage, String title, StringProperty stringProperty) {
        TextField textField = new TextField();
        Scene scene = new Scene(new BorderPane(textField), 300, 400);

        textField.textProperty().bindBidirectional(stringProperty);
        stage.setTitle(title);
        stage.setScene(scene);
        stage.show();
    }
    
    @Override
    public void start(Stage primaryStage) {
        createScene(primaryStage, "Erstes Fenster", stringProperty);
        Stage stage = new Stage();
        createScene(stage, "Zweites Fenster", stringProperty);
    }

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

Hier hast Du die Werte der zwei TextFields immer auf dem Wert der StringProperty.

Das kann man jetzt noch weiter aufteilen:
  • Die StringProperty gehört in eine eigene Klasse und bildet dann mit das Model (oder ViewModel im MVVM Pattern).
  • Das Binding gehört dann in eine Methode setModel die dann in etwa sowas macht:
Java:
    private Model model;
    
    @FXML
    TextField vornameField = new TextField();
    
    public void setModel(Model model) {
        this.model = model;
        vornameField.textProperty().bindBidirectional(model.getVornameProperty());
        // Weitere Bindings ...
        
        // Oder wenn Du kein Control hast, dann kannst Du bei Änderungen auch eigene Dinge machen:
        model.getVornameProperty().addListener((observable, oldValue, newValue) -> {
            System.out.println("Vorname changed: " + newValue);
        });
    }

Damit haben deine Controller keine Abhängigkeiten untereinander - das macht es einfacherm was Änderungen angeht.
Statt dessen hast Du ein (View)Model und die Controller haben nur eine Abhängigkeit zu eben diesem.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
L JavaFX Zugriff auf HostServices im FXML Controller AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
J JavaFX Zugriff auf Child AWT, Swing, JavaFX & SWT 4
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2
D JavaFX Zugriff auf Controller erlangen AWT, Swing, JavaFX & SWT 4
L Zugriff auf JavaFX Controls AWT, Swing, JavaFX & SWT 3
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
H SWT NullPointerException bei Zugriff auf Variablen des Hauptfensters AWT, Swing, JavaFX & SWT 6
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
B Zugriff auf JFrame obwohl die Klasse abgeleitet ist AWT, Swing, JavaFX & SWT 3
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
A Swing Zugriff auf JButton AWT, Swing, JavaFX & SWT 2
M Zugriff auf Variablen eines Objektes ohne sie auf static zu setzen AWT, Swing, JavaFX & SWT 9
I Swing Zugriff auf ein Objekt AWT, Swing, JavaFX & SWT 2
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTree mit eigenen Knoten - Zugriff auf Daten AWT, Swing, JavaFX & SWT 6
N zugriff auf frame AWT, Swing, JavaFX & SWT 5
N Swing Zugriff JButton auf JTree AWT, Swing, JavaFX & SWT 4
D Zugriff auf Instanz der GUI AWT, Swing, JavaFX & SWT 3
E Swing DB Zugriff mit JProgressBar?! AWT, Swing, JavaFX & SWT 8
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
H Zugriff JPanel AWT, Swing, JavaFX & SWT 3
D Swing Storage von / Zugriff auf und durch Actions AWT, Swing, JavaFX & SWT 5
S this-Zugriff auf Container höherer Ebene AWT, Swing, JavaFX & SWT 2
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
E Swing Zugriff auf Attribute eines JFrames über einen JDialog AWT, Swing, JavaFX & SWT 2
J Zugriff auf HtmlPanel sperren AWT, Swing, JavaFX & SWT 3
D JTree - Zugriff auf Nodes mit Object AWT, Swing, JavaFX & SWT 6
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
O Zugriff auf PreferenceStore aus der Business-Logik-Schicht? AWT, Swing, JavaFX & SWT 11
S NumberFormatException beim Zugriff auf Leeres JTextField AWT, Swing, JavaFX & SWT 8
S Zugriff auf statische Var in MouseEvent -> Warnung AWT, Swing, JavaFX & SWT 6
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
S Zugriff auf Elemente funktioniert mit SWING nicht mehr AWT, Swing, JavaFX & SWT 5
X Zugriff auf "Oberparents" ? AWT, Swing, JavaFX & SWT 4
J JTextArea wird nicht aktualisiert bei Zugriff von außerhalb AWT, Swing, JavaFX & SWT 2
O DB-Zugriff + wie darstellen? AWT, Swing, JavaFX & SWT 6
F Problem bei Zugriff auf ComboBox Item AWT, Swing, JavaFX & SWT 4
G Zugriff auf JTextField AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
J Zugriff auf letzte Klasse AWT, Swing, JavaFX & SWT 4
M Zugriff auf Methoden aus einem ActionListener AWT, Swing, JavaFX & SWT 2
F Zugriff auf Oberfläche bzw Trennung GUI / Logik AWT, Swing, JavaFX & SWT 3
I selectedText: Wie bekomme ich Zugriff auf den Text? AWT, Swing, JavaFX & SWT 4
G Zugriff auf Bilder verweigern AWT, Swing, JavaFX & SWT 7
H Zugriff auf die Farbwerte eines Bildes AWT, Swing, JavaFX & SWT 6
G Zugriff auf TextField geht nicht AWT, Swing, JavaFX & SWT 5
G zugriff auf benutzeroberflächenelemente AWT, Swing, JavaFX & SWT 4
V Zugriff auf Components aus einem ActionListener AWT, Swing, JavaFX & SWT 3
M ActionListener-Zugriff durch mehrere Frames AWT, Swing, JavaFX & SWT 5
M Zugriff auf ComboBox! AWT, Swing, JavaFX & SWT 17
G Excel-Zugriff über POI: wohin mit dem Package? AWT, Swing, JavaFX & SWT 4
B Zugriff von Toolbar auf zugehörigen Frame AWT, Swing, JavaFX & SWT 6
O JTabbedPane - Zugriff auf die Elemente eines Tabs AWT, Swing, JavaFX & SWT 4
O JFileChooser - Zugriff auf Dateiname-Feld und Save-Button? AWT, Swing, JavaFX & SWT 6
E Zugriff auf JTextField nach Buttonklick AWT, Swing, JavaFX & SWT 6
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben