당신은 length
을 통과 오프셋 0 (문서의 시작 부분)로 설정 사용하고, 문서의 길이를 사용할 수 있으며 장착 할 텍스트는 아무것도 ""
@Override
public void replace(FilterBypass fb, int offset, int length, String str, AttributeSet attr)
throws BadLocationException {
if ("b".equalsIgnoreCase(str)) {
super.replace(fb, 0, fb.getDocument().getLength(), "", attr);
return;
} else {
super.replace(fb, offset,length, str, attr);
}
}
없다
완벽한 예
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.DocumentFilter.FilterBypass;
public class TestBFilter {
public TestBFilter() {
JTextArea field = createTextArea();
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
frame.add(new JScrollPane(field));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JTextArea createTextArea() {
JTextArea field = new JTextArea(10, 20);
field.setLineWrap(true);
field.setWrapStyleWord(true);
((AbstractDocument) field.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void replace(FilterBypass fb, int offset, int length, String str, AttributeSet attr)
throws BadLocationException {
if ("b".equalsIgnoreCase(str)) {
super.replace(fb, 0, fb.getDocument().getLength(), "", attr);
return;
} else {
super.replace(fb, offset, length, str, attr);
}
}
});
return field;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestBFilter();
}
});
}
}
수정
그냥 문서의 첫 글자를 얻고, 그와 텍스트를 대체 "그러나이 테스트와 b를 누르면 첫 번째 문자를 포함하여 삭제하는 전체 텍스트를 만든다" 당신이 첫 글자를 남기고 싶다면.
if ("b".equalsIgnoreCase(str)) {
String text = fb.getDocument().getText(0, 1);
super.replace(fb, 0, fb.getDocument().getLength(), text, attr);
} else {
super.replace(fb, offset, length, str, attr);
}
답장을 보내 주셔서 감사합니다. 그러나 이것을 테스트하고 b를 누르면 첫 글자 D를 포함하여 전체 텍스트가 지워집니다. –
if 문에'&& fb.getDocument(). getLength()> 0 '을 그냥 추가하십시오. 나는 당신의 질문의 그 부분을 잡지 않았다 :) –
잠깐, 그래서 b를 누르면, 첫 번째 글자를 제외하고 모두 삭제되기를 원합니까? 아니면 b가 첫 글자라면 괜찮습니까? –