splitpane - Wechseln auf anderen Split erkennen

J

Joob

Bekanntes Mitglied
Ich habe eine Splitpane in dem mehrere Anchorpanes sind.

Ich möchte nun erkennen wenn ein Anchorpane verlassen wird.
Ich habe bereits einen FocusListener auf das Anchorpane gelegt, aber der löst nicht aus.

Hat jemand eine Idee wie ich das anfassen soll.
Muss ich das im Splittpane erkennen und dann den Controller des Anchorpanes ansprechen ?
Das wäre nicht so schön, denn es geht darum nach dem Focusverlust im Anchorpane ggf. zu speichern.

Der Focuslistener ist standard, funktionier bei nodes ja auch gut, aber bei Containern scheint das nicht der richtige Weg zu sein.

Java:
        anchorwordadapter.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
            focusState(newValue);
        });
 
L

lam_tr

Top Contributor
Ich habe eine Splitpane in dem mehrere Anchorpanes sind.

Ich möchte nun erkennen wenn ein Anchorpane verlassen wird.
Ich habe bereits einen FocusListener auf das Anchorpane gelegt, aber der löst nicht aus.

Hat jemand eine Idee wie ich das anfassen soll.
Muss ich das im Splittpane erkennen und dann den Controller des Anchorpanes ansprechen ?
Das wäre nicht so schön, denn es geht darum nach dem Focusverlust im Anchorpane ggf. zu speichern.

Der Focuslistener ist standard, funktionier bei nodes ja auch gut, aber bei Containern scheint das nicht der richtige Weg zu sein.

Java:
        anchorwordadapter.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
            focusState(newValue);
        });
Ich habs grad selbst getestet, aus irgendeinem Grund geht es tatsächlich nicht. Kannst du eventuell sagen was du vor hast? Willst du wirklich beim verlassen der AnchorPane ein Event abgefeuert haben? Oder willst du beim Verlassen des MouseCursors ein Event haben? Vielleicht können wir das auch anders vorgehen.
 
J

Joob

Bekanntes Mitglied
Ich habe in jedem Split einen Anchorpane.
Darin wird ein Datensatz dargestellt.
Ich würde gerne feststellen wann der AnchorPane verlassen wird um wenn es Änderungen am Datensatz gibt, diesen zu speichern.

Wenn das klappen würde könnte ich alle Funktionalität in dem Controller belassen und hätte einen übersichtlichen Controller.

Ich habe das Gefühl das das Problem mit FocusTransversal zu lösen ist, aber meine Versuche haben zu nichts geführt.
 
L

lam_tr

Top Contributor
Ich habe in jedem Split einen Anchorpane.
Darin wird ein Datensatz dargestellt.
Ich würde gerne feststellen wann der AnchorPane verlassen wird um wenn es Änderungen am Datensatz gibt, diesen zu speichern.

Wenn das klappen würde könnte ich alle Funktionalität in dem Controller belassen und hätte einen übersichtlichen Controller.

Ich habe das Gefühl das das Problem mit FocusTransversal zu lösen ist, aber meine Versuche haben zu nichts geführt.
Das heißt wenn du mit dem Mousezeiger weg bist, kannst du auch überprüfen ob die Daten angepasst wurden oder?
 
dzim

dzim

Top Contributor
Ein einfacher MouseListener auf Enter- und Exit-Events auf den beiden Panes, sollte das lösen können, oder?
 
J

Joob

Bekanntes Mitglied
Ich probier das mal aus und melde mich.
Ich hatte jetzt die dem SplitPane zugrunde liegende ObservalList im Auge.
 
kneitzel

kneitzel

Top Contributor
Also ich halte paar Ideen für problematisch:
Nur weil die Maus das Fenster verlässt muss der Focus sich nicht verändert haben. Jemand erfasst Daten mit der Tastatur, kommt gegen die Maus und der Mauszeiger verlässt das Fenster oder die Anchor Pane ...

Es gibt wohl unter Linux so eine Einstellung, dass der Focus automatisch der Maus folgt, aber in der Praxis ist dem ja in der Regel nicht so. Und vor allem: die Maus ist weg aber der User ändert weiter ...

Wenn das mit dem Focus Verlust nicht klappt, dann wäre meine Idee eine Prüfung des Focus Eingangs. Dann gibt es eine kleine Instanz eines FocusWächters dem man den Wechsel des Focus mitteilen kann, der also die Events bekommt. Elemente können zu einer Gruppe hinzu gefügt werden. Und bei jedem Wechsel kann dann eine Aktion ausgelöst werden, wenn eine Gruppe den Focus verliert.

Konnte ich die Idee halbwegs rüber bringen? Die Lösung basiert also auf dem bekommen des Focus bei anderen Controls.

Damit liegt die Steuerung rein in der App. Der Focus in der App ist entscheidend und der Benutzer kann z.B. Daten aus einer anderen Applikation holen. Einzugebende Daten kommen per Email und der Benutzer wechselt immer hin und her z.B. für Copy and Paste.

Und die Lösung baut keine Abhängigkeit zwischen den Komponenten ein. Die einzelnen Inhalte müssen sich nicht kennen. Sie müssen halt nur diesen FocusWächter kennen und bedienen.
 
J

Joob

Bekanntes Mitglied
Die Sache mit dem Mauszeiger ist hier nicht hilfreich, denn ich kann auch mit der Tabtaste über die Felder gehen.
Dann bekommt der Mauszeiger das nicht mit.

Auch deine Idee hinsichtlich des getFocus ist nicht komplett hilfreich, denn beim letzten Verlassen wird dieser ja nicht ausgelöst.

Ich versuche nun den gesamten Sperr- und Speichermechanismus im Lade und Entladevorgang unterzubringen. Ich wollte heute anfangen bin mal gespannt was da wieder für Probleme auftauchen.
 
L

lam_tr

Top Contributor
Die Sache mit dem Mauszeiger ist hier nicht hilfreich, denn ich kann auch mit der Tabtaste über die Felder gehen.
Dann bekommt der Mauszeiger das nicht mit.

Auch deine Idee hinsichtlich des getFocus ist nicht komplett hilfreich, denn beim letzten Verlassen wird dieser ja nicht ausgelöst.

Ich versuche nun den gesamten Sperr- und Speichermechanismus im Lade und Entladevorgang unterzubringen. Ich wollte heute anfangen bin mal gespannt was da wieder für Probleme auftauchen.
Wie navigierst du über Tab von einem Pane zum Anderen? Oder ist das jetzt eine Idee die noch Entwickelt wird?
 
kneitzel

kneitzel

Top Contributor
Auch deine Idee hinsichtlich des getFocus ist nicht komplett hilfreich, denn beim letzten Verlassen wird dieser ja nicht ausgelöst.
Also ich habe das etwas mehr getestet und generell scheint das aber durchaus zu funktionieren.

Aber das ist zu kompliziert gedacht. Wenn Du bei den Controls statisch bist, dann reicht evtl. schon sowas in der Art aus:
Java:
package helloworld;

import javafx.scene.Node;
import javafx.scene.Parent;

import java.util.HashSet;
import java.util.Set;

public class FocusChecker {
    boolean inside = false;

    Set<Node> nodes = new HashSet<>();
    public FocusChecker(final Node parent) {
        addNodes(parent);
    }

    protected void addNodes(final Node node) {
        nodes.add(node);
        node.focusedProperty().addListener((observable, left, joined) -> {
            if (inside && left) {
                inside = false;
            } else if (!inside && joined) {
                inside = true;
            }
            System.out.println("inside: " + inside);
        });

        if (node instanceof Parent) {
            Parent parent = (Parent) node;
            parent.getChildrenUnmodifiable().forEach(this::addNodes);
        }
    }
}

Das kannst Du einfach für eine pane initialisieren. Bei dem inside umsetzen muss natürlich noch weitere Funktionalität folgen, denn das Problem ist, dass er bei jedem Wechsel inside einmal auf false und wieder auf true setzt. Daher bauen wir einen Timer ein, der erst nach paar ms auslöst - dann haben wir entweder schon wieder das Join Event vom anderen Control bekommen oder der FOcus ist wirklich weg.

Ansteuerung des Timers:
- Bei jedem Durchlauf dieses ChangeListeners wird der Timer, so er gestartet wurde, gestoppt.
- Beim Umsetzen von inside auf false wird dieser gestartet Einmalige Ausführung nach x ms.)
- Der Timer führt dann ein Runnable aus, das der Instanz natürlich noch mit übergeben werden muss. Das könnte dann Dein Speichern sein. Das gehört aber nicht in so eine Klasse.


Was man noch schauen kann, ob man den Parent Element noch einen EventListener unterschieben kann bezüglich Hinzufügen / Entfernen von Children. So dies möglich ist, dann könnte man das sogar universell als FocusListenerControl bauen, das man nur einem Parent zuordnen muss. Beim Zuzordnen setzt er die entsprechenden Listeners und wäre dann immer up to date und könnte Events für Focus kommt in den Parent und Parent verliert Focus generieren... Vielleicht baue ich später noch einmal etwas mehr daran rum, aber mir ging es erst einmal um eine Art Proof Of Concept und das funktioniert vom Prinzip her schon ...
 
kneitzel

kneitzel

Top Contributor
Wenn ich sowas bauen würde - wie sollte es denn dann aussehen?
Eigentlich wäre es doch gut, wenn man ein FocusAwarePane hat. Aber da hätte man dann halt dieses Pane und dann dadrin in der Regel ein weiteres Pane. Aber das dürfte ja vom Aufbau her nichts machen.

Das ist vom Konzept her besser als die Idee eines Controls, welches den übergeordneten Parent focus aware macht, oder?

Was die Veränderung der Hierarchie angeht (Ein offener Punkt vom letzten Post) sollte dies ja kein Thema sein, da ein Parent seine Children ja in Observable Lists hat. Änderungen sollte man darüber also mitbekommen können.
 
J

Joob

Bekanntes Mitglied
Hallo,

das mit der Pane hatte ich gestern auch probiert, damit bin ich aber nicht weitergekommen.

Ich habs aber jetzt.
Ich führe eine Miniliste mit den Controllern beim Initialisieren von Splitpane.

Bei erneutem initialisieren gehe ich die Liste durch und mache alle unlocks und safes.
Dann Liste leeren und beim Initialisieren füllen.

Wenn das Fenster unerwartet verlassen wird, noch ein bearbeiten im onRequest.

Scheint zu funktionieren und ist auch übersichtlich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
L JavaFX Splitpane css stylen AWT, Swing, JavaFX & SWT 18
J SplitPane Aussehen des Divider verändern AWT, Swing, JavaFX & SWT 7
J Swing Pane im SplitPane automatische Größe aktivieren AWT, Swing, JavaFX & SWT 0
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
T Problem mit SplitPane AWT, Swing, JavaFX & SWT 6
R SplitPane vordefinieren AWT, Swing, JavaFX & SWT 10
E Größenänderung von nur EINER Seite einer SplitPane AWT, Swing, JavaFX & SWT 2
G Suche 2 Componenten: Splitpane ausblenden / Stecknadel AWT, Swing, JavaFX & SWT 2
G Im SplitPane zeichnen AWT, Swing, JavaFX & SWT 6
S Splitpane - Divider fix? AWT, Swing, JavaFX & SWT 2
K Probleme mit SplitPane AWT, Swing, JavaFX & SWT 2
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
M JavaFX JRXML Content wechseln AWT, Swing, JavaFX & SWT 3
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
P Swing Panels Wechseln AWT, Swing, JavaFX & SWT 9
G Menübar anklicken und Inhalt entsprechend wechseln AWT, Swing, JavaFX & SWT 4
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
D Zwischen Null-Layouts wechseln AWT, Swing, JavaFX & SWT 2
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
J Fensterinhalt bei Klick auf Menüitem wechseln AWT, Swing, JavaFX & SWT 1
T Tab per Code wechseln? AWT, Swing, JavaFX & SWT 3
A BorderLayout "Center" Inhalt wechseln AWT, Swing, JavaFX & SWT 1
L JavaFX Scene wechseln unter FX AWT, Swing, JavaFX & SWT 2
V RadioButton aktivieren/deaktivieren; Zustand abfragen und wechseln AWT, Swing, JavaFX & SWT 2
E JavaFX fxml files wechseln AWT, Swing, JavaFX & SWT 4
S Swing, Button benutzen zum Hintergrund wechseln AWT, Swing, JavaFX & SWT 3
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
bluerob JComponenten verschieben sich bei Fenster wechseln AWT, Swing, JavaFX & SWT 3
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
S Swing JTabbedPane: Nur nach ButtonClick und nicht nach Click auf Tab ins nächste Tab wechseln AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
M SWT Images bei Toggle Button wechseln AWT, Swing, JavaFX & SWT 3
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
B Swing Locale wechseln, nachdem UIManager schon initialisiert ist AWT, Swing, JavaFX & SWT 5
B Panels wechseln auf Knopfdruck AWT, Swing, JavaFX & SWT 17
G FullScreen JFrames wechseln AWT, Swing, JavaFX & SWT 2
E tabpane wechseln mit Button AWT, Swing, JavaFX & SWT 3
F Mit TAB JTextPane wechseln AWT, Swing, JavaFX & SWT 5
D Swing JPanel Hintergundsbild öfters wechseln. AWT, Swing, JavaFX & SWT 3
J LayoutManager Layout über JRadiobutton Wechseln AWT, Swing, JavaFX & SWT 6
J Ansicht wechseln zw. Spielfeld und Optionen AWT, Swing, JavaFX & SWT 3
D Farbe bei einem JButton wechseln AWT, Swing, JavaFX & SWT 4
D Mit der Maus in verschiedene Modi wechseln AWT, Swing, JavaFX & SWT 15
O Zwischen mehreren Bildern wechseln AWT, Swing, JavaFX & SWT 6
G Swing ->mainpanel wechseln bei Klick auf MenuItem (NetB.6 AWT, Swing, JavaFX & SWT 3
S GUI, dynamisches Wechseln von JPanels in einem JFrame AWT, Swing, JavaFX & SWT 2
Kirua Problem: Farbe Dinamic zu wechseln AWT, Swing, JavaFX & SWT 9
G Zwischen Panels in einem JFrame wechseln AWT, Swing, JavaFX & SWT 4
M Fenster wechseln bzw. ein/ausblenden AWT, Swing, JavaFX & SWT 2
P in JFrame zwischen verschiedenen JPanels wechseln AWT, Swing, JavaFX & SWT 7
G GUI - Inhalte wechseln (Eingabe-Assistenten programmieren) AWT, Swing, JavaFX & SWT 2
A SWT ViewPart wechseln AWT, Swing, JavaFX & SWT 2
N JavaFX applikation auf anderen Systemen zum laufen bringen AWT, Swing, JavaFX & SWT 7
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
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 Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
B Slider-Wert an anderen Slider übergeben AWT, Swing, JavaFX & SWT 5
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
I JavaFX-Scene-Überlagerung/Wechsel mit pausieren der anderen Scene AWT, Swing, JavaFX & SWT 0
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
B Swing GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 4
N was kann bzw was ist neu an JavaFx was die anderen nicht können AWT, Swing, JavaFX & SWT 2
D [Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox AWT, Swing, JavaFX & SWT 3
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
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
K Array von einer Action zur anderen bringen AWT, Swing, JavaFX & SWT 7
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Anzeige


Oben