I want my JTextPane to insert spaces whenever I press Tab. Currently it inserts the tab character (ASCII 9).
Is there anyway to customize the tab policy of JTextPane (o
You could try sub-classing DefaultStyledDocument and overriding insert to replace any tabs in the inserted elements with spaces. Then install your sub-class in JTextPane with setStyledDocument(). This may be more trouble than catching key events though.
As far as I know, you'd have to catch key events, as you say. Depending on usage, you might also get away with waiting until the input is submitted, and changing tabs to spaces at that time.
You can set a javax.swing.text.Document on your JTextPane. The following example will give you an idea of what I mean :)
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
public class Tester {
public static void main(String[] args) {
JTextPane textpane = new JTextPane();
textpane.setDocument(new TabDocument());
JFrame frame = new JFrame();
frame.getContentPane().add(textpane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(200, 200));
frame.setVisible(true);
}
static class TabDocument extends DefaultStyledDocument {
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
str = str.replaceAll("\t", " ");
super.insertString(offs, str, a);
}
}
}
Define a DefaultStyleDocument to do the work. Then set the Document to your JTextPane.
Cheers Kai