Установка политики вкладок в Swing JTextPane

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
2 668
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Ответ принят как подходящий

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

Ваше здоровье Кай

Другие вопросы по теме