Non è necessario creare il proprio componente.
Questo può essere fatto (come in Ho fatto) utilizzando un numero personalizzato DocumentFilter.
È possibile ottenere il documento da textPane.getDocument()
e impostare un filtro su di esso da document.setFilter()
. All'interno del filtro, è possibile controllare la posizione del prompt e consentire modifiche solo se la posizione è successiva al prompt.
Ad esempio:
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);
}
}
}
Tuttavia, questo si impedisce di programmazione inserendo contenuti nella sezione di uscita (non modificabile) del terminale. Quello che puoi fare è invece un flag di passthrough sul filtro che imposti quando stai per aggiungere l'output, o (cosa ho fatto) imposta il filtro del documento su null prima di accodare l'output, e quindi resettarlo quando tu fatto.
fonte
2012-04-05 14:59:35
((AbstractDocument) jta.getDocument()). SetDocumentFilter (dfilter); –