TITLE:JTextAreaの一部を編集不可にする

Posted by terai at 2010-02-22

JTextAreaの一部を編集不可にする

JTextAreaの一部の行を編集不可になるよう設定します。

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

class NonEditableLineDocumentFilter extends DocumentFilter {
  @Override
  public void insertString(DocumentFilter.FilterBypass fb, int offset,
        String string, AttributeSet attr) throws BadLocationException {
    if(string == null) {
      return;
    }else{
      replace(fb, offset, 0, string, attr);
    }
  }
  @Override
  public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
                                               throws BadLocationException {
    replace(fb, offset, length, "", null);
  }
  @Override
  public void replace(DocumentFilter.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);
  }
}

解説

上記のサンプルでは、DocumentFilterを使って、JTextAreaの一行目と二行目で追加、削除などの編集ができないようになっています。

((AbstractDocument)textArea.getDocument()).setDocumentFilter(new NonEditableLineDocumentFilter());

参考リンク

コメント