Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не устанавливаются стили в JTextPane, И ошибок вроде никаких не выдаёт 
V
    Опции темы
kaa
Дата 1.5.2008, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



Вобщем есть редактор:

Код

/**
 *Описываем класс редактора
 */
class Editor extends JTextPane{
    public Editor(){
        this.setSize(100, 100);
        this.setContentType("text/html");
        this.setEditorKit(new HTMLEditorKit());
    }
}


и есть листенер кнопок, по нажатии на одну из которых выставляется соответствующий стиль у выделенного текста:
Код

/**
 *Описываем класс-обработчик кнопок
 */
class ButtonClickHandler implements ActionListener{
    private MainPanel mainPanel;
    private Editor edit;
    /*private StyledDocument EditDoc;*/
    private HTMLDocument EditDoc;
    private int startSelect, endSelect, length;
    private Style bold, underline, red, italic;
    private String str, command;
    private ButtonWrapper sourceButton;
    
    /**
     *@param containerEdit.
     *объект-контейнер, содержащий редактор текста.
     */
    public ButtonClickHandler(MainPanel containerEdit){
        this.mainPanel = containerEdit;
        this.edit = containerEdit.getEdit();
       // this.edit = containerEdit.edit;
               
        this.EditDoc = (HTMLDocument)this.edit.getDocument();
        bold = this.EditDoc.addStyle("bold", null);
        underline = this.EditDoc.addStyle("underline", null);
        red = this.EditDoc.addStyle("red",null);
        italic = this.EditDoc.addStyle("italic",null);
        StyleConstants.setBold(bold, true);
        StyleConstants.setForeground(red, Color.RED);
        StyleConstants.setUnderline(underline, true);
        StyleConstants.setItalic(italic, true);      
    }
    
    public void actionPerformed(ActionEvent ae){
        
            this.mainPanel.label.setText(ae.getActionCommand());
            this.sourceButton = (ButtonWrapper)ae.getSource();
            this.command = sourceButton.getCommandString();
            this.startSelect = this.edit.getSelectionStart();
            /*this.mainPanel.label.setText(this.edit.getText());*/
            this.endSelect = this.edit.getSelectionEnd();
            this.length = this.endSelect-this.startSelect;
            /*this.mainPanel.label.setText(Integer.toString(this.length));*/
            if(length!=0){
                if(this.command=="underline"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, underline, false);
                }
                else if(command=="bold"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, bold, false);
                }
                else if(command=="red"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, red, false);
                }
                else if(command=="italic"){
                    this.EditDoc.setCharacterAttributes(this.startSelect, length, italic, false);
                }
        }
  
    }
}



Так вот, обработчик срабатывает, длину выделенного текста определяет, стили ПРИМЕНЯЕТ(выполняет соответствующую команду точно, бо проверял) но стиль выделенного фрагмента в редакторе не меняется, хоть упрись.

Подскажите пожалуйста, что я неправильно делаю?
PM MAIL   Вверх
kaa
Дата 2.5.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



Нашел возможную причину: вставил в обработчик код

Код

 try{
               this.mainPanel.label.setText(this.EditDoc.getText(0,3));
            }
            catch(BadLocationException e){
                this.mainPanel.label.setText(e.getMessage());
                e.printStackTrace();
            }


Так вот, он ВСЕГДА выдаёт ошибку типа invalid location - тоесть как бы неможет понять позицию. Может он так же неможет понять позицию и при присваении стилей?
PM MAIL   Вверх
kaa
Дата 2.5.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



В общем разобрался как сделать что мне надо.


Код

public void actionPerformed(ActionEvent ae){
        
            this.sourceButton = (ButtonWrapper)ae.getSource();
            this.command = sourceButton.getCommandString();
            this.startSelect = this.edit.getSelectionStart();
            this.endSelect = this.edit.getSelectionEnd();
            this.length = this.endSelect-this.startSelect;
            /*this.mainPanel.label.setText(Integer.toString(this.length));*/
            this.mainPanel.label.setText(this.edit.getText());
            if(length!=0){
                if(this.command=="underline"){
                    this.edit.setCharacterAttributes(this.underline, false);
                }
                else if(command=="bold"){
                    this.edit.setCharacterAttributes( this.bold, false);
                }
                else if(command=="red"){
                    this.edit.setCharacterAttributes(this.red, false);
                }
                else if(command=="italic"){
                    this.edit.setCharacterAttributes(this.italic, false);
                }
            }


Как видно из кода, если работать методами JTextPane, то всё получается.

!!!Стили надо присваивать только когда что-либо выделено в редакторе, в противном случае установленный стиль будет применяться к вновь вводимому тексту, маленькая деталька такая, ага..

Однако почему ничего не работает когда работаю напрямую с объектом документа, для меня так и осталось загадкой, особенно ошибка для getText().
Может быть кто нито из гуру прояснит ситуацию? Буду очень благодарен.

Это сообщение отредактировал(а) kaa - 2.5.2008, 15:27
PM MAIL   Вверх
dorogoyIV
Дата 3.5.2008, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(kaa @  2.5.2008,  15:18 Найти цитируемый пост)
Однако почему ничего не работает когда работаю напрямую с объектом документа, для меня так и осталось загадкой, особенно ошибка для getText().

ну так ты же из другого приложения текст берешь!!! JAVA об этом ничего не знает!!! выход такой: - при взятии текста сообщать об этом JAVe
PM MAIL   Вверх
kaa
Дата 3.5.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



dorogoyIV
Постойте, как это из другого приложения? Объект документа представляет документ объекта редактора, в котором я пытаюсь редактировать текст smile
PM MAIL   Вверх
IgorJ
Дата 3.5.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.5.2008

Репутация: нет
Всего: нет



мне кажется, Exception вылетает из- за того, что ты не оттуда текст читаешь.
тебе надо читать буфер, а ты читаешь документ.

PM MAIL   Вверх
kaa
Дата 9.5.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: 1
Всего: 2



IgorJ
Гм... А какой буфер? И где его взять?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0995 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.