Woran erkenne eine FOCUS_GAINED bei einem anderen FOCUS_LOST

Status
Nicht offen für weitere Antworten.

CelikBlek

Bekanntes Mitglied
hallo,

hört sich komisch an ich weiss :)
die fage ist:
- ich habe mehrere pnels. panel1 & panel2 usw.
- alle haben focusListener

frage woran erkenne ich bei FOCUS_LOST von panel1, wessen FOCUS_GAINED aufgerufen wird??? also gibt es eine methode wie
Code:
        if (fe.getID() == FocusEvent.FOCUS_LOST)
        {
            fe.gib_mir_den_focus_weggenommen_hat()
        }
das muss bei LOST passieren !!! also darf ich nicht an GAINED von dem neues focusbesitzer ran.

danke im voraus[/code]
 

Griffin

Bekanntes Mitglied
Du könntest doch alle Panels abfragen, wer den Focus hat!

Code:
// API sagt das hasFocus() obsolete ist, deshalb isFocusOwner verwenden

if (Panel1.isFocusOwner()) return Panel1;
else if (Panel2.isFocusOwner()) return Panel2;
...
 

CelikBlek

Bekanntes Mitglied
Griffin hat gesagt.:
Du könntest doch alle Panels abfragen, wer den Focus hat!

Code:
// API sagt das hasFocus() obsolete ist, deshalb isFocusOwner verwenden

if (Panel1.isFocusOwner()) return Panel1;
else if (Panel2.isFocusOwner()) return Panel2;
...

geht das denn schon? hat er zu dem zeitpunkt bereits den focus? wie wäre denn die reihenfolge nur zum verständnis?

1. panel1 hat focus (gained)
2. panel2 wird geklickt
3. panel1 verliert focus(lost) --> in diese methode muss ich was tun.
4. panel2 bekommt focus (gained)

dadurch will ich ermitteln ob es aktualisiert werden muss oder nicht.

danke
 

Griffin

Bekanntes Mitglied
Ich hab das gerade ausprobiert:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JFrame {
	
	public Test() {
		final JTextField tf1 = new JTextField(5);
		final JTextField tf2 = new JTextField(5);
		tf1.addFocusListener(new FocusAdapter () {
			public void focusLost() {
				tf1.setText("a" + tf2.isFocusOwner());
			}	
		});
		tf2.addFocusListener(new FocusAdapter () {
			public void focusLost() {
				tf2.setText("a" + tf1.isFocusOwner());
			}	
		});
		this.getContentPane().add(tf1,BorderLayout.NORTH);
		this.getContentPane().add(tf2,BorderLayout.SOUTH);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.pack();
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		new Test();
	}
}

Funktioniert wirklich nicht. Die Reihenfolge der Ereignisse hab ich leider nicht beachtet.
 
G

Guest

Gast
Vielleicht bringt Dich das hier auf paar Ideen.
Code:
  java.awt.DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener( 
      "permanentFocusOwner", 
      new java.beans.PropertyChangeListener() 
      { 
        Color oldColor = null;
        Component oldComponent = null;

        public void propertyChange(java.beans.PropertyChangeEvent e) 
        { 
          Component componentWithFocus = (Component)e.getNewValue(); 
          if(componentWithFocus!=null)
          {
            System.out.println("Focus owner: " + componentWithFocus.getClass().getName());
            if(oldComponent!=null && oldColor!=null)
              oldComponent.setBackground(oldColor);
            oldComponent = componentWithFocus;
            oldColor = componentWithFocus.getBackground();
            componentWithFocus.setBackground(java.awt.Color.PINK);
          }
        } 
      } 
    );

Schau Dir insbesondere die Beschreibung zu KeyboardFocusManager.addPropertyChangeListener(...),
um evtl. auf andere Properties zu lauschen.
 

CelikBlek

Bekanntes Mitglied
hmm...
problem ist diese:

stell dir vor es wäre ein fenster unten :)

links_o_panel(JTree)__________rechts_o_panel (hat ein JList)

__________________________rechts_u_panel (mehrere textfields)

wenn focus rechts_o_panel ist, dann werden rechts_u_panel mit den werten aus jlist gefüllt und können verarbeitet werden.
sobald man in textfield klickt erhält es den focus und ist verarbeitbar. nach der verarbeitung kann man wieder klicken in
1. jlist : dann passiert nichts weiter(zumindest nichts wichtiges)
2. irgendein anderes jtextfield: dann werden rechts_o_panel die möglichkeiten angezeigt (als jlist)
3. tree: komplette übersicht von den gewählten komponenten
so das problem dabei ist: bei 1 und zwei soll nicht aktualisiert werden. nur bei klick in jtree. dafür muss ich wissen was als nächstes angeklickt wird.
hoffe das ich dir ein überblick geben konnte

Die Architektur ist ziemlich komplex. so ~ 1000 klassen, daher kann ich nicht ohne weiteres viel verändern
 

Griffin

Bekanntes Mitglied
Kannst du denn nicht einfach beim dem Panel, dass den Focus bekommt abfragen wer den Focus vorher hatte:
Code:
//im ersten Panel:
public void focusLost(FocusEvent e) {
   String hatteFocus = e.getSource();
}
...
//im nächsten Panel
public void focusGained(FocusEvent e) {
  pruefeVerhaeltnis(hatteFocus, e.getSource());
}

//in der Methode wird alles Ueberprueft:
private void pruefeVerhaeltnis(String hatteFocus, String neuerFocus) {
   if (hatteFocus.equals(einTextFeld) && neuerFocus.equals(JTree)) {
   //dann tu das!
   }
}

Ich hab das mal schnell aufgeschrieben, weiss also nicht in wie weit das geht.
 

CelikBlek

Bekanntes Mitglied
dann ist es bereits zu spät :(
es muss beim verlassen vom ersten schon passieren.
mein vorgänger hat es so implemetiert, dass es anderes rum nicht möglich ist. hat mehr vorteile als nachteile(eigentlich) sowie es implementiert ist.
die inhalte von den txtFields sind immer unterschiedlich. die inhalte sind in unterschiedlichen klassen definiert(datum, katalogwerte, freitext usw.) auf jeden muss unterschiedlich reagiert werden. daher dieser spagat
 
G

Guest

Gast
Anhand welcher Kriterien erkennst Du, was bei Focuswechsel von einer Komponente
zur anderen in dem JList angezeigt werden soll.
Haben die Komponenten irgendeinen Namen oder ist es Typ-abhängig, was angezeigt wird?
(siehe Component.setName(...))
 

CelikBlek

Bekanntes Mitglied
also jlist sind irgendwelche werte aus der datenbank.
versuche mal den ablauf zu beschreiben:

1. programmstart
2. jede menge zeugs initialisieren db, server, cache, kataloge usw.
3. so dann klickt man sich durch bis zur besagten stelle.
das sieht so aus:
- links: tree mit Unterordner
- rechtsOben: Ist übersichtstabelle
- rechtsunten: eingabe bzw. betrachtung
4. so jetzt sucht man was aus(aus tree) und klickt auf bearbeiten, dann ändert sich rechtsunten
von betrachtung zur eingabemaske. der hat mit viele textfields(inhalt wie oben beschrieben aus anderen klassen)
5. wenn man in einen txtfield klickt wird in der übersichtstabelle die möglichen auswahlmäglichkeiten angezeigt(JList)
6. nachdem man was in txtfield ändert und auf was anderes klickt soll es unterschiedlich reagieren.

alles hat einen namen, aber die aufrufe sind nicht so leicht wegen kohoränz. daher wäre eine antwort auf meine ausgangsfrage eigentlich optimal. wenn der fokus weiss, wo er als nächstes hingeht, kann ich das problem leicht lösen.
 
G

Guest

Gast
Ah, jetzt habe ich es geschnallt. ;)
Frage die Komponente, die dabei ist den Focus zu kriegen,
mit FocusEvent.getOppositeComponent() ab.
Code:
...
public void focusLost(FocusEvent e) {
  // Wenn kein temporärer Focuswechsel wegen einem unbekannten GUI-Woodoo-Trick
  if(!e.isTemporary()) {
    Component das_Ding_welches_den_Focus_kriegt = e.getOppositeComponent();
    ...
  }
}
...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A 2 Verschachtelte Schleifen sollen eine Auswirkung von -7 pro Durchgang haben AWT, Swing, JavaFX & SWT 6
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
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
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
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
G Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
mrbody234 ArrayList<Message> in eine TableView visualisieren AWT, Swing, JavaFX & SWT 2
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
Lukas2904 Wie speicher ich eine Einstellung? AWT, Swing, JavaFX & SWT 1
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Zwei JTables auf eine A4-Seite mit einstellbaren Rändern AWT, Swing, JavaFX & SWT 9
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
F Variablen an eine Form binden? AWT, Swing, JavaFX & SWT 2
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
W JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
Informatiknoob AWT Zahlenraten (eine Zahl zwischen 1 und 10) AWT, Swing, JavaFX & SWT 1
A eine Fehler AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J JavaFX Die Webview stellt eine Webseite nicht dar AWT, Swing, JavaFX & SWT 0
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
Thallius Swing JDatePicker oder Sucht jemand eine Aufgabe? AWT, Swing, JavaFX & SWT 0
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
A JFace Wizard: Ist es möglich eine Page zu löschen? AWT, Swing, JavaFX & SWT 2
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
M Combo Box auswahl in eine Datenbank speichern AWT, Swing, JavaFX & SWT 1
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
D AWT Das ganze GUI in eine Klasse? AWT, Swing, JavaFX & SWT 1
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
U LookAndFeel für eine Komponente AWT, Swing, JavaFX & SWT 2
E Mit Netbeans von einer Form auf eine Komponente einer anderen Form zugreifen AWT, Swing, JavaFX & SWT 2
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
M Über eine JMenuBar überprüfen ob ein JCheckBoxMenuItem selectiert ist. AWT, Swing, JavaFX & SWT 4
M Wie kann ich eine an Apple Automator angelehnte GUI erstellen? AWT, Swing, JavaFX & SWT 1
A JavaFX Eine Task mit einer ProgressBar verbinden AWT, Swing, JavaFX & SWT 0
S JavaFX Canvas - nur eine Figur auf der Zeichenfläche färben? AWT, Swing, JavaFX & SWT 1
S Swing Mit einem Link eine Methode aufrufen AWT, Swing, JavaFX & SWT 2
C Swing Durch Inhaltsänderung eines JTextfields eine Funktion aufrufen AWT, Swing, JavaFX & SWT 5
G 2D-Slider bzw. eine graphische Auswahlkomponente die sich so verhält AWT, Swing, JavaFX & SWT 6
H Lust auf eine Open-Source Lösung für universelle Java Client-Technologie? AWT, Swing, JavaFX & SWT 11
T Aus JAVA.Jar GUI eine Flash-Datei machen AWT, Swing, JavaFX & SWT 3
S 5 Playlisten eine Skip() AWT, Swing, JavaFX & SWT 4
M SWT Browser nur eine Seite erlauben AWT, Swing, JavaFX & SWT 3
G Daten in eine JTable schreiben AWT, Swing, JavaFX & SWT 3
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
I Anhand ButtonGroup eine Auswahl treffen AWT, Swing, JavaFX & SWT 2
B Nach dem Öffnen des Dialogs eine Aktion ausführen. AWT, Swing, JavaFX & SWT 6
W Funktion aus einer Java Datei in eine andere einbauen AWT, Swing, JavaFX & SWT 25
A Swing Text auf eine Seite an beliebigen Orten schreiben AWT, Swing, JavaFX & SWT 6
G Swing Value von einer JScrollBar auf eine andere übertragen AWT, Swing, JavaFX & SWT 2
Rudolf Swing Wie testet man am besten eine GUI? AWT, Swing, JavaFX & SWT 3
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
F GroupableTableHeader zeigt nur eine Zeile AWT, Swing, JavaFX & SWT 4
N Swing Optimale Höhe eine JTextPanes bei festgelegter Breite bestimmen AWT, Swing, JavaFX & SWT 23
R Swing Mit Swing eine throws Exception Methode öffnen AWT, Swing, JavaFX & SWT 3
M Eine Kugel nach rechts bewegen AWT, Swing, JavaFX & SWT 5
C Swing NullPointerException beim Hinzufügen von Checkboxes in eine ArrayList AWT, Swing, JavaFX & SWT 5
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
M Auf einem Bild eine Markierung aufziehen AWT, Swing, JavaFX & SWT 3
R Eine Instanz von JPanel mehrfach hinzufügen AWT, Swing, JavaFX & SWT 2
B eine .jar erzeugen AWT, Swing, JavaFX & SWT 4
M In JField eine Kommazahl darstellen java.lang.NumberFormatException AWT, Swing, JavaFX & SWT 4
N Button on click eine andere Klasse aufrufen... AWT, Swing, JavaFX & SWT 2
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
M Ein Tab eine JTabbedPane durch Button Druck öffen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben