2

我希望我的 JTextPane 在按 Tab 时插入空格。目前它插入制表符(ASCII 9)。

是否有自定义 JTextPane 的选项卡策略(除了捕获“tab-key”事件并自己插入空格之外)?

4

3 回答 3

6

您可以在 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。

干杯凯

于 2008-12-12T20:02:07.160 回答
0

据我所知,正如你所说,你必须抓住关键事件。根据使用情况,您也可以等到输入提交,然后将制表符更改为空格。

于 2008-12-12T19:26:08.123 回答
0

您可以尝试对 DefaultStyledDocument 进行子类化并覆盖 insert 以用空格替换插入元素中的任何选项卡。然后使用 setStyledDocument() 在 JTextPane 中安装您的子类。不过,这可能比捕捉关键事件更麻烦。

于 2008-12-12T19:50:24.690 回答