# Abfrage ob eine bstimmte Komponente den Focus hat



## orbi (31. Aug 2005)

Hoi Leute,
mal wieder meine wenigkeit. Mein Problem ist folgendes , ich will das eine durch einen klick auf einen Button ausgelöste  funktion nur abläuft wenn eine andere Komponente (JTextField) den Focus nicht hat. Ich dachte eigentlich das kann ich mit :

if(f.txtAnsichtIdent.hasFocus())

überprüfen , aber irgendwie will das bei mir nicht. Diese Bedingung müsste doch eigentlich erfüllt sein bzw wenn der focus auf dem entsprechenden Textfeld liegt müsste ich doch rein theoretisch   true zurückbekommen und damit die ausführung des nach der bedingung folgenden codes erreichen oder liege ich da falsch ?

währe dankbar für nen Tip....

thx schonmal

orbi


----------



## m@nu (31. Aug 2005)

hehe, funktionieren tut das schon... aber in dem moment, wo du auf deinen button klickst, erhält dein button den fokus...
eine möglichkeit wäre vielleicht, per _setFocusable_ deinen button vom fokus auszuschliessen (keine ahnung ob das funktioniert)

<edit>
über einen _FocusListener_ für deinen button könntest du aber auch ermitteln, welche component zuletzt vor dem button den fokus hatte. wenn du die referenz geschickt speicherst, kannst du im _actionPerformed_ entsprechend reagieren.
</edit>


----------



## orbi (31. Aug 2005)

nun kannst mir ja evtl auch noch nen tip geben wie ich schell und unkompliziert den fousListener an den Button anbinde bzw wie ich dann rausbekomme ob ide komponente die vorher den focus hatte das entsprechende textfield war, FOCUS_LOST heist die methode das hab ich schon gesehen aber wie habe ich die zu verwenden?

danke für die echt schnelle hilfe nebenbei.....

MFG
orbi


----------



## m@nu (31. Aug 2005)

```
public class MeinFrame extends JFrame {
  // dein code ...

  /**
   * FocusListener welcher in einem ButtonActionListener die Referenz zur zuletzt
   * "fokusierten" Component ablegt.
   */
  private class ButtonFocusListener implements FocusListener {
    private ButtonActionListener buttonActionListener;

    public ButtonFocusListener(ButtonActionListener buttonActionListener) {
      this.buttonActionListener = buttonActionListener;
    }
    
    public void focusGained(FocusEvent fe) {
      this.buttonActionListener.setLastFocusedComponent(fe.getOppositeComponent());
    }
  }

  /**
   * ActionListener welcher eine Referenz auf die zuletzt gewählte Component
   * speichern kann. (Zusammen mit dem entsprechenden FocusListener verwenden!)
   */
  private class ButtonActionListener implements ActionListener {
    private Component lastFocusedComponent;
  
    public void actionPerformed(ActionEvent ae) {
      if(this.lastComponent != null && this.lastComponent.equals(txtAnsichtIdent)) {
        // das tun was du willst ;)
      }
    }

    public void setLastFocusedComponent(Component newLastFocusedComponent) {
      this.lastFocusedComponent = newLastFocusedComponent;
    }
  }
}
```

zuweisen kannst du das ganze dann so:

```
ButtonActionListener buttonActionListener = new ButtonActionListener();
button.addActionListener(buttonActionListener);
button.addFocusListener(new ButtonFocusListener(buttonActionListener));
```

natürlich könnte man das handling für die referenz-speicherung auch anders gestalten... das hier ist eine möglichkeit 

kein problem  bin auch froh wenn ich schnell hilfe bekomme 

gruss
m@nu


----------



## orbi (2. Sep 2005)

danke schonmal für deine Mühe ich werde mal versuchen es in meine Anwendung einzubauen....

mfg
orbi[/b]


----------

