2009-04-16 2 views
10

Размер вкладки A JTextArea можно легко установить, используя setTabSize(int).Как установить размер вкладки в JEditorPane?

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

Прямо сейчас, текст с вкладками в моей области выглядит следующим образом:

if (stuff){ 
      more stuff; 
} 

И я предпочел бы гораздо меньше табулятора:

if (stuff){ 
    more stuff; 
} 
+0

http://java-sl.com/tip_default_tabstop_size.html вы можете проверить это – StanislavL

ответ

13

Как 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"; 
+0

Спасибо, что не просто «как», а «почему» тоже! – jjnguy

+1

Для Styled EditorKit также возможно http: // java-sl.com/tip_default_tabstop_size.html – StanislavL

6

В случае, если кто использует в 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); 
2

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

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

+3

Это не ответ! – Vallentin

Смежные вопросы