Как создать простой класс Paragraph

Я пытался создать класс, который может делать следующее:

• Установить: Шрифт, Выравнивание (по левому краю, по центру, по правому краю, по ширине).
• Эффективный способ append добавления текста в документ.
Текст не нужно выбирать или редактировать. Я должен иметь возможность переопределить рисование/рендеринг текста.

Я считаю, что классы JDK JTextComponent трудно использовать эффективно, так как это то, что у меня есть до сих пор, но это далеко не то, чего я пытаюсь достичь:

public class Paragraph extends JTextPane{

    public Paragraph(){
        this.setFont(Fonts.PARAGRAPH);
        this.setOpaque(false);
    }

   // ridiculously slow
   public void append(String s) {
     SimpleAttributeSet def = new SimpleAttributeSet();
     StyleConstants.setForeground(def, Colors.PARAGRAPH);
     Document d = getDocument();
     try {
       d.insertString(d.getLength(), s, def);
     } catch (BadLocationException ble) {
   }
 }  
}



Вопрос. Существуют ли какие-либо библиотеки, которые могли бы сэкономить мне время на повторное изобретение колеса?
Если нет, как я могу расширить реализации JDK? Спасибо


person rtheunissen    schedule 13.02.2012    source источник
comment
сэкономить мне время на изобретение велосипеда? просто: не надо ;-) Какую проблему, по вашему мнению, нужно решить? Что вы подразумеваете под эффективным?   -  person kleopatra    schedule 13.02.2012
comment
забыл: никогда подкласс для простой конфигурации   -  person kleopatra    schedule 13.02.2012
comment
@kleopatra, не могли бы вы объяснить свой второй комментарий немного подробнее, пожалуйста?   -  person rtheunissen    schedule 13.02.2012
comment
@kleopatra Обратите внимание, что комментарии можно редактировать в течение 5 минут. (это было всего 3 минуты, судя по всему).   -  person Andrew Thompson    schedule 13.02.2012
comment
@AndrewThompson да, я знаю, но меня раздражает то, что после ввода и попытки фиксации мне говорят, извини, девочка, твои пять минут закончились, набери еще раз :-)   -  person kleopatra    schedule 13.02.2012
comment
не знаю, что там можно было бы объяснить - это основное ОО :-)   -  person kleopatra    schedule 13.02.2012
comment
@kleopatra Ну, очевидно, я знаю, что означает подкласс, но что вы подразумеваете под простой конфигурацией и, что более важно, почему нет?   -  person rtheunissen    schedule 13.02.2012
comment
без обид - но простая конфигурация, и, что более важно, почему бы и нет если вы не знаете, почему вы не должны создавать подклассы, когда вы можете достичь того же без создания подклассов ... вы не слишком много знаете об ОО ;-) Я бы посоветовал вам почитать какой-нибудь учебник - это объяснит основы намного лучше, чем я мог бы в 300+ символов   -  person kleopatra    schedule 14.02.2012
comment
@kleopatra, так вы говорите, что если я хочу создать большое количество Paragraphs, используя их в нескольких классах, мне придется каждый раз устанавливать непрозрачность, атрибуты, шрифт, передний план и т. д. для JTextPane? Где в этом смысл? Подклассы — это неплохо с точки зрения абстракции. Имеет смысл для меня.   -  person rtheunissen    schedule 14.02.2012
comment
очевидно, вы можете придерживаться всего, что имеет для вас смысл, будь то ошибка или нет ;-)   -  person kleopatra    schedule 14.02.2012
comment
Вы не можете утверждать, что предпочтение является ошибкой, не объясняя, почему это плохая идея.   -  person rtheunissen    schedule 14.02.2012


Ответы (1)


Ваш документ должен быть экземпляром StyledDocument. Затем просто используйте метод setParagraphAttributes() экземпляра документа.

Для нескольких добавлений используйте отдельный документ (не установленный для экземпляра JTextPane.

Используйте комплект для создания нового пустого экземпляра документа. Вызовите все свои добавления, а затем установитеDocument(theDocInstance) в JTextPane.

person StanislavL    schedule 13.02.2012
comment
Звучит интересно, попробую. - person rtheunissen; 13.02.2012
comment
Хорошо, это красиво и быстро, хотя я не знаю, как теперь установить Font? Хотя я мог бы посмотреть. Спасибо. - person rtheunissen; 13.02.2012
comment
Вы вставляете String с атрибутами, как и раньше. После вставки строки вы применяете атрибуты абзаца к вставленному фрагменту с помощью метода setParagraphAttributes(). - person StanislavL; 13.02.2012
comment
Но нет ли setFont в SimpleAttributeSet? - person rtheunissen; 13.02.2012
comment
См. StyleConstants.setFontFamily() - person StanislavL; 13.02.2012
comment
См. ответ camickr: stackoverflow.com/questions/7800683/ - person rtheunissen; 14.02.2012
comment
См. также ссылку: javatechniques.com/blog/setting-jtextpane-font-and -цвет - person rtheunissen; 14.02.2012