Hiho.
Mal eine Frage. Ich will reagieren wenn Nutzer etwas in einem Textfeld eingegeben hat (ein mal neu durchrechnen oder was auch immer).
Und dachte ich an folgendes:
Ich hänge einen ActionListener und einen FocusListener an. Im ActionListener mache ich einen focusTraversal() und im FocusListener bei focusLost meinen Berechnungsaufruf. ActionListener alleine reicht nicht, da dieser die Tab-Taste und Feldwechsel per Maus ignoriert.
Quasi als Mini-Beispiel:
Problem ist jetzt noch, dass er auch anfangen würde zu berechnen, wenn man einfach nur durch die Felder "durchklickt" bzw. mit Tab durchgeht.
Ich weiß, dass man mit einem DocumentListener rausbekommt, wenn an einem Textfeld direkt etwas geändert wurde. Problem ist hier nur, dass dieser auch aufgerufen wird, wenn ich per setText die Felder aktualisiere (Datensatzwechsel z.B.).
Hier könnte man natürlich einen DocumentListener schreiben, wo man einen Status setzt, ob er Events ausführen soll oder nicht, um dann die Berechnung nur bei manueller Eingabe anzuschmeißen, aber das klingt für mich ein bisschen nach "dirty hack".
Gibt es da sonst noch einen "eleganten" Weg, dass zu machen?
Danke.
Mal eine Frage. Ich will reagieren wenn Nutzer etwas in einem Textfeld eingegeben hat (ein mal neu durchrechnen oder was auch immer).
Und dachte ich an folgendes:
Ich hänge einen ActionListener und einen FocusListener an. Im ActionListener mache ich einen focusTraversal() und im FocusListener bei focusLost meinen Berechnungsaufruf. ActionListener alleine reicht nicht, da dieser die Tab-Taste und Feldwechsel per Maus ignoriert.
Quasi als Mini-Beispiel:
Code:
public class Main extends JFrame implements ActionListener, FocusListener {
private JTextField feld;
public Main() throws HeadlessException {
feld = new JTextField();
feld.addActionListener(this);
feld.addFocusListener(this);
this.add(feld,BorderLayout.NORTH);
JButton btn = new JButton("Klick mich");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
feld.setText("Hallo");
}
});
this.add(btn,BorderLayout.SOUTH);
}
public static void main(String[] args) {
Main m = new Main();
m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
JTextField fld = (JTextField) e.getSource();
fld.transferFocus();
}
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
System.out.println("Focus lost - hier ansetzen");
}
}
Problem ist jetzt noch, dass er auch anfangen würde zu berechnen, wenn man einfach nur durch die Felder "durchklickt" bzw. mit Tab durchgeht.
Ich weiß, dass man mit einem DocumentListener rausbekommt, wenn an einem Textfeld direkt etwas geändert wurde. Problem ist hier nur, dass dieser auch aufgerufen wird, wenn ich per setText die Felder aktualisiere (Datensatzwechsel z.B.).
Hier könnte man natürlich einen DocumentListener schreiben, wo man einen Status setzt, ob er Events ausführen soll oder nicht, um dann die Berechnung nur bei manueller Eingabe anzuschmeißen, aber das klingt für mich ein bisschen nach "dirty hack".
Gibt es da sonst noch einen "eleganten" Weg, dass zu machen?
Danke.