Bạn không cần phải tạo thành phần của riêng mình.
Điều này có thể được thực hiện (như tôi đã làm) bằng cách sử dụng tùy chỉnh DocumentFilter.
Bạn có thể tải tài liệu từ textPane.getDocument()
và đặt bộ lọc trên đó bằng document.setFilter()
. Trong bộ lọc, bạn có thể kiểm tra vị trí nhắc và chỉ cho phép sửa đổi nếu vị trí sau dấu nhắc.
Ví dụ:
private class Filter extends DocumentFilter {
public void insertString(final FilterBypass fb, final int offset, final String string, final AttributeSet attr)
throws BadLocationException {
if (offset >= promptPosition) {
super.insertString(fb, offset, string, attr);
}
}
public void remove(final FilterBypass fb, final int offset, final int length) throws BadLocationException {
if (offset >= promptPosition) {
super.remove(fb, offset, length);
}
}
public void replace(final FilterBypass fb, final int offset, final int length, final String text, final AttributeSet attrs)
throws BadLocationException {
if (offset >= promptPosition) {
super.replace(fb, offset, length, text, attrs);
}
}
}
Tuy nhiên, điều này ngăn cản bạn từ trình chèn nội dung vào đầu ra (noneditable) phần của nhà ga. Thay vào đó, những gì bạn có thể làm là cờ vượt qua trên bộ lọc mà bạn đặt khi bạn sắp thêm đầu ra hoặc (những gì tôi đã làm) đặt bộ lọc tài liệu thành null trước khi thêm đầu ra rồi đặt lại khi bạn ' làm lại.
Nguồn
2012-04-05 14:59:35
((AbstractDocument) jta.getDocument()). SetDocumentFilter (dfilter); –