代码之家  ›  专栏  ›  技术社区  ›  Itay Maman

在Swing的JTextPane中设置选项卡策略

  •  2
  • Itay Maman  · 技术社区  · 17 年前

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

    是否有任何方法可以自定义JTextPane的选项卡策略(除了捕获“选项卡键”事件并自己插入空格似乎是一种方法)?

    3 回复  |  直到 11 年前
        1
  •  5
  •   Kai Mechel    17 年前

    您可以设置javax.swing.text。JTextPane上的文档。下面的例子会让你明白我的意思:)

    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来完成这项工作。然后将该文档设置为JTextPane。

    干杯 开

        2
  •  0
  •   Paul Brinkley    17 年前

    据我所知,正如你所说,你必须抓住关键事件。根据使用情况,您还可以等待输入提交,然后将选项卡更改为空格。

        3
  •  0
  •   Dave Ray    17 年前

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