每当我按Tab键时,我希望我的JTextPane插入空格。目前它插入制表符(ASCII 9)。
是否有自定义JTextPane的选项卡策略(除了捕获“tab-key”事件并自己插入空格之外)?
答案 0 :(得分:5)
您可以在JTextPane上设置javax.swing.text.Document。以下示例将让您了解我的意思:)
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);
}
}
}
定义DefaultStyleDocument来完成工作。然后将Document设置为JTextPane。
干杯 启
答案 1 :(得分:0)
据我所知,正如你所说,你必须抓住关键事件。根据使用情况,您可能还会等到提交输入,然后将标签更改为空格。
答案 2 :(得分:0)
您可以尝试对DefaultStyledDocument进行子类化并覆盖insert以使用空格替换插入元素中的任何选项卡。然后使用setStyledDocument()在JTextPane中安装子类。这可能比捕捉关键事件更麻烦。