2

Tab を押すたびに JTextPane にスペースを挿入させたい。現在、タブ文字 (ASCII 9) を挿入します。

JTextPane のタブ ポリシーをカスタマイズする方法はありますか (「タブ キー」イベントをキャッチし、自分でスペースを挿入する以外に)?

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 をサブクラス化し、挿入をオーバーライドして、挿入された要素のタブをスペースに置き換えることができます。次に、setStyledDocument() を使用してサブクラスを JTextPane にインストールします。ただし、これは重要なイベントをキャッチするよりも面倒かもしれません。

于 2008-12-12T19:50:24.690 に答える