Как установить размер вкладки в JEditorPane?

Размер вкладки A JTextArea можно легко установить с помощью setTabSize(int).

Есть ли аналогичный способ сделать это с помощью JEditorPane?

Прямо сейчас текст с вкладками в моей панели выглядит так:

if (stuff){
            more stuff;
}

И я бы предпочел гораздо меньшую остановку табуляции:

if (stuff){
    more stuff;
}

Ответ 1

Поскольку JEditorPane предназначен для поддержки различных типов контента, он не предоставляет способ напрямую указать размер "табуляции", поскольку значение этого параметра должно определяться моделью контента. Однако, когда вы используете модель, которая является PlainDocument или одним из ее потомков, есть "tabSizeAttribute", который обеспечивает то, что вы ищете.

Пример:

JEditorPane pane = new JEditorPane(...);
...
Document doc = pane.getDocument();
if (doc instanceof PlainDocument) {
    doc.putProperty(PlainDocument.tabSizeAttribute, 8);
}
...

Из Javadoc:

/**
 * Name of the attribute that specifies the tab
 * size for tabs contained in the content.  The
 * type for the value is Integer.
 */
public static final String tabSizeAttribute = "tabSize";

Ответ 2

В случае, если кто-либо использует StyledDocument (ссылка на другой ответ умер)

Вы создаете TabSet, который представляет собой массив TabStops. В моем случае я только заботился о 1-й вкладке, и я хотел ее 20px слева, поэтому этот код работал у меня:

StyleContext sc = StyleContext.getDefaultStyleContext();
TabSet tabs = new TabSet(new TabStop[] { new TabStop(20) });
AttributeSet paraSet = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.TabSet, tabs);
pane.setParagraphAttributes(paraSet, false);

Ответ 3

Пришло время понять это. И решил использовать TabStop в TabSet, которые рассчитали ширину на основе размера шрифта. Это должно быть reset, когда изменяется размер шрифта (в методе paint() JEditPane).

Сложные вещи!: (