JTextField DocumentListener/DocumentEvent
-
21-09-2019 - |
質問
JavaでDocumentListener/DocumentEventを使用して、WindowsのコマンドプロンプトやUNIXのターミナルなど、JTextField内のテキストの特定の部分をユーザーが削除できないようにする方法を知りたいです。現在の作業ディレクトリが表示され、> または $ を超えて削除することはできません。
誰か私を助けてくれますか?ありがとう
解決
アドオンを使用する場合の問題 ドキュメントリスナー リスナー内から削除または編集された部分を元に戻すことはできません。そうしないと、通知を受け取ったときに内容を変更しようとしているという例外が発生します。私が知っている最も簡単な方法は、 書類, 、オーバーライド 取り除く で 書類 以下の例のように、ドキュメントを使用するようにテキスト フィールドを設定します。
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);
}
}
}
}
所属していません StackOverflow