JEdi​​torPane - 制作制表符空格

Cam*_*Cam 3 java tabs spaces jeditorpane

我想知道是否有一种方法可以将 jeditorpane 中的制表符转换为空格,就像您在 IDE 中工作时看到的那样。我不想设置选项卡大小。我已经可以轻松做到这一点了。

我想将制表符替换为空格中的等效项。例如,如果我的选项卡长度为 5 个空格,我希望所有选项卡在创建时立即替换为 5 个空格。

有任何想法吗?

cam*_*ckr 6

DocumentFilter在 中添加一个,AbstractDocument以便在将文本插入到 中时用空格替换制表符Document

请阅读 Swing 教程中有关文本组件功能的部分以获取更多信息。

简单的例子:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class TabToSpaceFilter extends DocumentFilter
{
    @Override
    public void insertString(FilterBypass fb, int offset, String text, AttributeSet attributes)
        throws BadLocationException
    {
        replace(fb, offset, 0, text, attributes);
    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attributes)
        throws BadLocationException
    {
        //  In case someone tries to clear the Document by using setText(null)

        if (text == null)
            text = "";

        super.replace(fb, offset, length, text.replace("\t", "    "), attributes);
    }

    private static void createAndShowGUI()
    {
        JTextArea textArea = new JTextArea(5, 20);
        AbstractDocument doc = (AbstractDocument) textArea.getDocument();
        doc.setDocumentFilter( new TabToSpaceFilter() );

        JFrame frame = new JFrame("Integer Filter");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout( new java.awt.GridBagLayout() );
        frame.add( new JScrollPane(textArea) );
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        EventQueue.invokeLater( () -> createAndShowGUI() );
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 您还可以设置自己的文档,将所有制表符转换为空格。请参阅http://java.sun.com/javase/6/docs/api/javax/swing/text/JTextComponent.html#setDocument%28javax.swing.text.Document%29 (2认同)