Настройка политики вкладок в JTextPane Swing - PullRequest
1 голос
/ 12 декабря 2008

Я хочу, чтобы мой JTextPane вставлял пробелы всякий раз, когда я нажимаю клавишу Tab. В настоящее время вставляется символ табуляции (ASCII 9).

Есть ли способ настроить политику вкладок JTextPane (кроме перехвата событий "клавиша табуляции" и вставки пробелов сам по себе, кажется)?

Ответы [ 3 ]

5 голосов
/ 12 декабря 2008

Вы можете установить javax.swing.text.Document на вашем 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.

Приветствие Кай

0 голосов
/ 12 декабря 2008

Вы можете попробовать подклассифицировать DefaultStyledDocument и переопределить вставку, чтобы заменить любые вкладки во вставленных элементах пробелами. Затем установите свой подкласс в JTextPane с помощью setStyledDocument (). Это может быть больше проблем, чем перехват ключевых событий.

0 голосов
/ 12 декабря 2008

Насколько я знаю, вам придется ловить ключевые события, как вы говорите. В зависимости от использования вам также может потребоваться подождать, пока входные данные не будут отправлены, и изменить вкладки на пробелы в это время.

...