JTextfield Auswertung mit FocusListener

superping

Aktives Mitglied
Hallo zusammen!

Problem: ich möchte, dass ein fokusiertes Textfeld den Rand (Border) ändert. Das Textfeld befindet sich in einer externen Klasse.

Java:
public class Firmendaten {

public static JTextfield textfeld_1 = new JTextField();
textfeld_1.setName("textfeld_1");

}

Mein Ansatz:
Java:
Firmendaten.textfeld_1.addFocusListener(focus);

FocusListener focus = new FocusListener () //
     {         
               public void focusGained(FocusEvent e)
               {
                   String str = new String(e.getComponent().getName());
                   System.out.println(str);
               }
               
               public void focusLost(FocusEvent e)
               {
                   System.out.println("de-selected");
               }
     };

Die Ausgabe"textfeld_1" ist richtig.

Ich möchte vermeiden jedes Textfeld per "if Abfrage" abzufragen da es ca. 20 sind.

Hätte das am liebsten so:

Java:
Firmendaten.{hier irgendwie den Namen aus dem String"str" reinhämmern}.setBorder(border);

Hoffe auf eure Hilfe!
 
Die TextFields nicht in einer Liste zu haben ist vermutlich schon falsch.

http://www.java-forum.org/top-fragen/62032-fragen-variablennamen.html

Aber FALLS Kevin94's Vorschlag nicht reicht: Eine Möglichkeit gibt es, in Anlehung an http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/49255-componenten-listener.html , nämlich anonyme Listener:
Java:
JTextField tf0 = ...
JTextField tf1 = ...

addBorderFocusListener(tf0);
addBorderFocusListener(tf1);

// Wobei
private static void addBorderFocusListener(final JTextField tf)
{
     FocusListener focus = new FocusListener () 
     {         
               public void focusGained(FocusEvent e)
               {
                   tf.setBorder(...);
               }
               
               public void focusLost(FocusEvent e)
               {
                   tf.setBorder(...);
               }
     };
     tf.addFocusListener(focus);
}
 
Das mit der Liste (bzw. einem Array) macht wohl Sinn... Dachte ich käme da irgendwie drumherum.

Wie caste ich das FocusEvent auf eine JComponent?
 
Nicht das FocusEvent,
Code:
e.getComponent()
hat als Returntype nur Component, setBorder ist aber in JComponent definiert. Da du diesen FocusListener nur bei JComponents anhängst, kannst du einfach casten:
Java:
((JComponent)e.getComponent()).setBorder(border);
 

Zurück
Oben