Swing/NonEditableLine のバックアップ(No.10)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/NonEditableLine へ行く。
- 1 (2010-03-08 (月) 12:38:50)
- 2 (2010-03-08 (月) 13:43:45)
- 3 (2012-06-22 (金) 18:05:32)
- 4 (2012-12-24 (月) 00:49:28)
- 5 (2013-01-02 (水) 14:27:51)
- 6 (2013-12-24 (火) 20:19:05)
- 7 (2014-12-30 (火) 15:41:26)
- 8 (2015-01-25 (日) 18:33:41)
- 9 (2016-07-08 (金) 12:57:33)
- 10 (2017-09-26 (火) 11:02:51)
- 11 (2019-03-26 (火) 19:08:38)
- 12 (2021-01-07 (木) 16:49:10)
- 13 (2023-07-07 (金) 13:53:47)
- category: swing folder: NonEditableLine title: JTextAreaの一部を編集不可にする tags: [JTextArea, DocumentFilter, Highlighter] author: aterai pubdate: 2010-02-22T14:50:22+09:00 description: JTextAreaの一部の行を編集不可になるよう設定します。 image:
概要
JTextArea
の一部の行を編集不可になるよう設定します。
Screenshot
Advertisement
サンプルコード
class NonEditableLineDocumentFilter extends DocumentFilter {
@Override public void insertString(
FilterBypass fb, int offset, String string, AttributeSet attr)
throws BadLocationException {
if (Objects.nonNull(string)) {
replace(fb, offset, 0, string, attr);
}
}
@Override public void remove(
FilterBypass fb, int offset, int length)
throws BadLocationException {
replace(fb, offset, length, "", null);
}
@Override public void replace(
FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
Document doc = fb.getDocument();
if (doc.getDefaultRootElement().getElementIndex(offset) < 2) {
return;
}
fb.replace(offset, length, text, attrs);
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、DocumentFilter
を使って、JTextArea
の一行目と二行目で追加、削除などの編集ができないように設定しています。
((AbstractDocument) textArea.getDocument()).setDocumentFilter(new NonEditableLineDocumentFilter());
一行目と二行目の背景色は、編集不可のためのDocumentFilter
とは関係なく、Highlighter
を使って別途設定しています。
try {
Highlighter hilite = textArea.getHighlighter();
Document doc = textArea.getDocument();
Element root = doc.getDefaultRootElement();
for (int i = 0; i < 2; i++) {
Element elem = root.getElement(i);
hilite.addHighlight(elem.getStartOffset(),
elem.getEndOffset() - 1,
highlightPainter);
}
} catch (BadLocationException ble) {
ble.printStackTrace();
}