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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с JTextPane, ... 
V
    Опции темы
Jilian
Дата 17.5.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня возникла такая проблема. У меня есть главный Frame, в нем находится 
JTextPane. Так же у меня вызывается второй Frame, в котором содержиться
JComboBox с шрифтами. Хочу, чтоб при выборе элемента в combo, тут же 
менялся шрифт выделенной подстроки в TextPane. В данной релизации - 
TextPane просто ощищается. Подскажите, пожалуйста, в чем дело.
Это описание фрейма с combo
Код

                           JFrame fr = new JFrame("Fonts");
            fr.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            fr.setSize(300, 150);

            Container contentPane = fr.getContentPane();
            contentPane.setLayout(null);
            String[] fonts;
            GraphicsEnvironment ge = GraphicsEnvironment
                    .getLocalGraphicsEnvironment();
            fonts = ge.getAvailableFontFamilyNames();

            JComboBox combo = new JComboBox();
            for (int i = 0; i < fonts.length; i++)
                combo.addItem(fonts[i]);
            combo.setBounds(0, 0, 100, 30);

            contentPane.add(combo);
            combo.addItemListener(this);
            fr.setVisible(true);



А это непосредственно обработка выбора шрифта
Код

public void itemStateChanged(ItemEvent e) {
        String St = (String) e.getItem();
        DefaultStyledDocument dsd = new DefaultStyledDocument();
        tp.setDocument(dsd);
        SimpleAttributeSet sas1 = new SimpleAttributeSet();
        StyleConstants.setFontFamily(sas1, St);
        dsd.setCharacterAttributes(tp.getSelectionStart(),
                tp.getSelectionEnd(), sas1, false);
    };

    private JTextPane tp;

 
PM MAIL   Вверх
LSD
Дата 17.5.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Ну конечно, обнуляется. Ты же в 4-ой строке создаешь новый DefaultStyledDocument, а затем устанавливаешь для него атрибуты. Тебе надо получить у JTextPane его документ, и уже для него устанавливать атрибуты.
Код
DefaultStyledDocument dsd = (DefaultStyledDocument) tp.getDocument();
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Jilian
Дата 17.5.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, спасибо, но исправив эту строчку, получается измениение шрифта от начала выделения и до конца строки. В чем тут дело?

Добавлено @ 21:12 
Код

    public void itemStateChanged(ItemEvent e) {
        String St = (String) e.getItem();
        DefaultStyledDocument dsd = (DefaultStyledDocument) tp.getDocument();
        tp.setDocument(dsd);
        SimpleAttributeSet sas1 = new SimpleAttributeSet();
        StyleConstants.setFontFamily(sas1, St);
[B]        dsd.setCharacterAttributes(tp.getSelectionStart(),
                tp.getSelectionEnd(), sas1, false);[/B]
    };

 Ведь по идее должен изменять только выделенный фрагмент? Или я не права? 
PM MAIL   Вверх
LSD
Дата 17.5.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Потому что, метод setCharacterAttributes() принимает в качестве параметров, начало фрагмента и его длинну, а не конец. Т.е. надо писать:
Код
dsd.setCharacterAttributes(textPane.getSelectionStart(), textPane.getSelectionEnd() - textPane.getSelectionStart(), sas1, false);
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Jilian
Дата 17.5.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



to LSD
Большое спасибо!!! 

Теперь моя прога окончательно готова, недельный труд... Пойду сдавать преподу! 
PM MAIL   Вверх
LSD
Дата 17.5.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Пожалуйста и удачно сдать smile  


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Jilian
Дата 17.5.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 Спасибо! Такой отличный форум - сразу получаю ответ на свой вопрос. 
 Всем, кто мне помогал, спасибочки большое. 
PM MAIL   Вверх
LSD
Дата 17.5.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Заходи почаще, у нас можно и на отвлеченные темы пообщаться. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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