Texteingabe abfangen

Status
Nicht offen für weitere Antworten.

Ravendark

Aktives Mitglied
Ich habe ein JTextField t und möchte die Texteingaben darauf abfangen,
habe es so probiert:
Code:
public class Test extends JFrame
{
  private JTextField t = new JTextField();
  // [...]

  private class EingabeAbfangen implements InputMethodListener
  {
    public void caretPositionChanged(InputMethodEvent e) { }
    
    public void inputMethodTextChanged(InputMethodEvent e)
    {
      System.out.println("funktioniert");  // zu dieser Ausgabe kommt es nicht
    }
  }
  // [...]
  t.addInputMethodListener(new EingabeAbfangen());
}

Wie gesagt, kommt es zu der Ausgabe "funktioniert" nicht. Irgendeinen Denkfehler hab ich...
Vielleicht gibt es noch einen ganz anderen Weg die Eingabe auf das JTextField abzufangen?

Mfg
Ravendark
 
Ich hab das ganze immer mit DocumentFilter gelöst:

Hier der Part in der GUI:
Code:
//zuerst ein Regexp-Pattern mit den Zeichen die erlaubt sind
String pattern_txt_port = "^[0-9]*$";

//jetzt das Textfeld
txt_input = new JTextField();

//und nun der Filter
((AbstractDocument)txt_input.getDocument()).setDocumentFilter(new TextSignFilter(pattern_txt_port));

Hier Klasse TextSignFilter im Hintergrund (weil man die eh 100mal wiederbenutzt: ausgelagert):
Code:
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

/**
 * This Filter filters in realtime given signs from textfield 
 */
public class TextSignFilter extends DocumentFilter
{
    String pattern;    
        
    /**
     * Creates a new Filter with given regular expression pattern 
     * @param pattern Regular Expression pattern
     */
    public TextSignFilter(String pattern)
    {
        this.pattern = pattern;
    }
    

    /* (non-Javadoc)
     * @see javax.swing.text.DocumentFilter#insertString(javax.swing.text.DocumentFilter.FilterBypass, int, java.lang.String, javax.swing.text.AttributeSet)
     */
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr) throws BadLocationException 
    { 
        replace(fb, offset, 0, str, attr); 
    }    

    /* (non-Javadoc)
     * @see javax.swing.text.DocumentFilter#replace(javax.swing.text.DocumentFilter.FilterBypass, int, int, java.lang.String, javax.swing.text.AttributeSet)
     */
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException 
    {
        String textInDocument = fb.getDocument().getText(0, fb.getDocument().getLength());
        String testString = textInDocument + str;
        
        if (testString.matches(pattern)) 
        {            
            fb.replace(offset, length, str, attrs);
        }
        else 
        {
            throw new BadLocationException("New characters exceeds max size of document", offset);
        }
    }
}
Klappt bei mir immer wunderbar...
 

Ravendark

Aktives Mitglied
@Netscanner Waldi:
Thx, funktioniert sehr gut, habe aber noch Fragen zwei Fragen:

Was kann ich mir unter einem Document vorstellen? ( (AbstractDocument)txt_input.getDocument() irritiert mich ein bisschen.)

Wird die Methode insertString(...) von der JVM selbstständig aufgerufen und mit Argumenten gefüllt wenn im TextField was geändert wird? (So wie bei vielen Win-API Funktionen.)


Mfg
Ravendark
 
@Ravendark
Document ist eigentlich dafür gedacht, Texteditoren oä. zu schreiben, wie HTML-Editor oder RTF etc.
Die JVM ruft die insertString(...)-Methode selbstständig auf, direkt und noch bevor Zeichen an die GUI ausgegeben werden.

Der obere Quelltext ist nur ne Abkürzung für
Code:
AbstractDocument abstractDocument = (AbstractDocument) txt_input.getDocument();
abstractDocument.setDocumentFilter(...);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Sin137 Automatischer Vervollständigung einer Texteingabe AWT, Swing, JavaFX & SWT 10
B Swing Autokorrektur der Texteingabe AWT, Swing, JavaFX & SWT 6
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
I Texteingabe des Benutzers in der GUI verwenden AWT, Swing, JavaFX & SWT 5
K Syntaxhighlight während der Texteingabe AWT, Swing, JavaFX & SWT 11
T ScrollEvent richtig(er) abfangen? AWT, Swing, JavaFX & SWT 0
A JOptionPane OK ohne Eingabe abfangen AWT, Swing, JavaFX & SWT 10
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
D Swing Events vom JLayer abfangen AWT, Swing, JavaFX & SWT 2
E Outlook Email Senden-Button abfangen AWT, Swing, JavaFX & SWT 5
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
T Swing JTextPane Tastatureingabe abfangen AWT, Swing, JavaFX & SWT 4
M JFileChooser Abfangen des DateiTypen möglich?? AWT, Swing, JavaFX & SWT 5
S Swing JTable - Editierung von Zellen abfangen AWT, Swing, JavaFX & SWT 3
P Action Event abfangen etwas anders? AWT, Swing, JavaFX & SWT 2
M JOptionPane.showInputDialog abbrechen abfangen? AWT, Swing, JavaFX & SWT 2
P Swing Tastaturereignisse auf gesamten Frame Abfangen AWT, Swing, JavaFX & SWT 13
sylo STRG + TAB KeyEvent abfangen AWT, Swing, JavaFX & SWT 6
M JTextField Tastendruck Abfangen AWT, Swing, JavaFX & SWT 3
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
C JTable: Alle selektierten Zellen abfangen AWT, Swing, JavaFX & SWT 13
J JPanel.addKeyListener() - JEDEN Tastendruck im Panel abfangen AWT, Swing, JavaFX & SWT 2
J AWT Abfangen der Rohdaten die PrinterJob zum Drucker sendet AWT, Swing, JavaFX & SWT 2
P Leere Textfelder abfangen AWT, Swing, JavaFX & SWT 4
F MouseEvent bei PopupMenu abfangen AWT, Swing, JavaFX & SWT 2
K Tastatureingaben abfangen AWT, Swing, JavaFX & SWT 25
H Ich kann MouseDragged nicht abfangen AWT, Swing, JavaFX & SWT 3
G Swing Fortschrittsbalken im Fenster: Menü deaktivieren / abfangen? AWT, Swing, JavaFX & SWT 27
pinerski Swing JList Tastatureingaben abfangen AWT, Swing, JavaFX & SWT 2
M Doppelklick auf Component abfangen AWT, Swing, JavaFX & SWT 5
E Swing Wechsel in JCheckBox abfangen AWT, Swing, JavaFX & SWT 10
R ALt+CTRL down, wie abfangen? AWT, Swing, JavaFX & SWT 2
R Checkboxen - Event mit Controller abfangen AWT, Swing, JavaFX & SWT 7
K Alle Events abfangen mit GlassPane AWT, Swing, JavaFX & SWT 7
E MouseEvent von Kindelementen abfangen AWT, Swing, JavaFX & SWT 2
P SWT: KeyEvents abfangen, wenn Programm minimiert ist? AWT, Swing, JavaFX & SWT 5
K JTable und auf den Tabellenkopf-Click-Event abfangen AWT, Swing, JavaFX & SWT 2
M Globale Events in Windows abfangen AWT, Swing, JavaFX & SWT 2
S Events abfangen, nicht durchlassen AWT, Swing, JavaFX & SWT 2
G Zwischenablage abfangen AWT, Swing, JavaFX & SWT 4
M JTable alte Daten vor Änderung abfangen AWT, Swing, JavaFX & SWT 11
D Wie Taste "ENTER" bei PlainDocument abfangen? AWT, Swing, JavaFX & SWT 2
P SWT Fenster schließen abfangen AWT, Swing, JavaFX & SWT 4
S Minimieren abfangen AWT, Swing, JavaFX & SWT 2
A Tasten abfangen AWT, Swing, JavaFX & SWT 9
M Tastendruck abfangen AWT, Swing, JavaFX & SWT 8
S "Enter" in JTextField abfangen AWT, Swing, JavaFX & SWT 7
B Tastatureingabe in JComboBox abfangen. AWT, Swing, JavaFX & SWT 6
K JFrame setDefaultCloseOperation: Wie abfangen? AWT, Swing, JavaFX & SWT 2
G Ein klick auf JPanel abfangen und verarbeiten? AWT, Swing, JavaFX & SWT 3
J Keyevents abfangen in einer JTable AWT, Swing, JavaFX & SWT 2
F Habe Problem mit dem Abfangen einer Exception AWT, Swing, JavaFX & SWT 10
S Events bei 2 gleichen Jtree abfangen AWT, Swing, JavaFX & SWT 3
M Ereignis der JList abfangen AWT, Swing, JavaFX & SWT 2
O Exception abfangen AWT, Swing, JavaFX & SWT 19
K MouseEvents vor den Components abfangen? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben