Frage

ich würde gerne wissen, wie ein DocumentListener / Document in Java verwenden, um den Benutzer zu löschen einen bestimmten Teil des Textes in einem JTextField, wie auf der Windows-Eingabeaufforderung oder Unix-Terminal zu verhindern .. sie zeigen das aktuelle Arbeitsverzeichnis und Sie können über die nicht löschen> oder $

Kann mir jemand helfen? Dank

War es hilfreich?

Lösung

Das Problem bei der Verwendung Zugabe auf einem DocumentListener ist, dass Sie nicht den Teil tack zurück können, die aus dem Hörer gelöscht oder bearbeitet wurden, sonst werden Sie eine Ausnahme erhalten, dass Sie versuchen, um den Inhalt zu ändern, wenn Sie die Meldung haben. Der einfachste Weg, ich weiß, ist ein Document Unterklasse, überschreibt Entfernen auf Document und stellen Sie das Textfeld, das Dokument zu verwenden, wie in meinem Beispiel unten:

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;

public class Application {

    private static final String PREFIX = "Your Input>";

    private static final int prefixLength = PREFIX.length();

    /**
     * @param args
     */
    public static void main(String[] args) {
        JFrame rootFrame = new JFrame();
        JTextField textField = new JTextField(new PromptDocument(), PREFIX, 20);

        rootFrame.add(textField);
        rootFrame.pack();
        rootFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rootFrame.setVisible(true);
    }

    private static class PromptDocument extends DefaultStyledDocument {

        private static final long serialVersionUID = 1L;

        @Override
        public void remove(int offs, int len) throws BadLocationException {
            if (offs > prefixLength - 1) {
                int buffer = offs - prefixLength;
                if (buffer < 0) {
                    len = buffer;
                }
                super.remove(offs, len);    
            }
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top