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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опять jTextPane и HTMLEditorKit, Атрибуты текста 
:(
    Опции темы
filipp76
  Дата 10.3.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Элементарная задача вроде но решения нету, вот таким кодом я делаю выделенный текст в jTextPane жирным
Код

SimpleAttributeSet sas = new SimpleAttributeSet();   
StyleConstants.setBold(sas, true);
jTextSend.setCharacterAttributes(sas, false);

Теперь вопрос, как произвести обратную операцию? О_О Тоесть вернуть текст в исходное состояние.


Это сообщение отредактировал(а) filipp76 - 11.3.2008, 09:16
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 10.3.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 smile 
Код

StyleConstants.setBold(sas, false);

PM MAIL   Вверх
filipp76
Дата 10.3.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Цитата(dorogoyIV @ 10.3.2008,  12:29)
smile 
Код

StyleConstants.setBold(sas, false);

Спасибо!! А как узнать или текст жирный? Тоесть я выделяю текст, нажимаю кнопку и если он не жирный делаю его жирным, если же наоборот то делаю его обычным.
На всякий случай весь код 
Код

  HTMLDocument doc = (HTMLDocument)jTextSend.getStyledDocument();  
  SimpleAttributeSet sas = new SimpleAttributeSet();   
  StyleConstants.setBold(sas, true);
  jTextSend.setCharacterAttributes(sas, false);
  HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
  try{
  htmlEditorKit.write(System.out, doc, 0, doc.getLength());
  }catch(Exception Ex){}

Код взят с форума.

Это сообщение отредактировал(а) filipp76 - 10.3.2008, 14:38
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 10.3.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(filipp76 @  10.3.2008,  14:24 Найти цитируемый пост)
 А как узнать или текст жирный?

это не обязательно вообще то
Код

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.text.*;

class MyTextPane extends JFrame
                 implements ActionListener
{
 JTextPane tp=new JTextPane();
 boolean bold=false;

 MyTextPane()
 {
  setBounds(100,100,400,300);

  add(tp);

  JButton jb=new JButton("button");
  jb.addActionListener(this);
  add(jb, "South");
 }

 public void actionPerformed(ActionEvent e)
 {
  if(bold)
    bold=!bold;
  else
    bold=!bold;

  SimpleAttributeSet sas=new SimpleAttributeSet();
  StyleConstants.setBold(sas, bold);
  tp.setCharacterAttributes(sas, false);
 }

 public static void main(String [] args)
 {
  JFrame f=new MyTextPane();
  f.setVisible(true);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}

а если все таки надо узнать жирный или нет
Код

  boolean isbold=StyleConstants.isBold(sas.copyAttributes());
  System.out.println(isbold);

PM MAIL   Вверх
filipp76
Дата 10.3.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Огромное тебе спасибо!
PM MAIL WWW ICQ   Вверх
filipp76
Дата 10.3.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Чтот не работает (, где может быть ошибка?
Код

private void setTextSendAttr(String AttrName){
 if(jTextSend.getSelectionStart()==0&jTextSend.getSelectionEnd()==0){
  return;   
 }else
 {
  HTMLDocument doc = (HTMLDocument)jTextSend.getStyledDocument();  
  SimpleAttributeSet sas = new SimpleAttributeSet(); 
  
 if(AttrName.matches("Bold")){ 
   if(StyleConstants.isBold(sas.copyAttributes())){
   StyleConstants.setBold(sas, false);
   }else{
    StyleConstants.setBold(sas, true);
   }
 }else{
  if(AttrName.matches("Italic")){ 
   if(StyleConstants.isItalic(sas.copyAttributes())){
   StyleConstants.setItalic(sas, false);
   }else{StyleConstants.setItalic(sas, true);}
  }else{
   if(AttrName.matches("UnderLine")){ 
    if(StyleConstants.isUnderline(sas.copyAttributes())){
    StyleConstants.setUnderline(sas, false);
    }else{StyleConstants.setUnderline(sas, true);}
   }   
  }   
 }
  
  jTextSend.setCharacterAttributes(sas, false);
  HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
  try{
  htmlEditorKit.write(System.out, doc, 0, doc.getLength());
  }catch(Exception Ex){}
 }     
}


Вот это постоянно возвращает false, даже когда выделенный текст жирный. 
Код

StyleConstants.isBold(sas.copyAttributes())
 
Переменную sas сделал полем, теперь вроде все нормально но через раз почему-то не срабатывает(( 

Это сообщение отредактировал(а) filipp76 - 10.3.2008, 16:13
PM MAIL WWW ICQ   Вверх
filipp76
Дата 10.3.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



( Перепробовал все что угодно ничего не получаеться, выше указаные примеры подходят если выделять и снимать выделение надо у одного слова, а вот если несколько начинаються проблемы. Как получить из jTextPane текущий SimpleAttributeSet? Или я чупуху несу, подскажите плз.
PM MAIL WWW ICQ   Вверх
filipp76
Дата 10.3.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



проблема решена
Код

StyleConstants.isBold(jTextSend.getCharacterAttributes())


Блин, и все равно работает как-то не стабильно (( пару раз подряд все работает отлично, потом пару раз не сработает.
Вот окончательный вариант:
Код

private void setTextSendAttr(String AttrName){
 if(jTextSend.getSelectionStart()==0&jTextSend.getSelectionEnd()==0){
  return;   
 }else
 {
 
 HTMLDocument doc = (HTMLDocument)jTextSend.getStyledDocument();     
 SimpleAttributeSet sas = new SimpleAttributeSet();    
 
 if(AttrName.matches("Bold")){ 
   if(StyleConstants.isBold(jTextSend.getCharacterAttributes())){
   StyleConstants.setBold(sas, false);
   }else{StyleConstants.setBold(sas, true);
   }
 }else{
  if(AttrName.matches("Italic")){ 
   if(StyleConstants.isItalic(jTextSend.getCharacterAttributes())){
   StyleConstants.setItalic(sas, false);
   }else{StyleConstants.setItalic(sas, true);}
  }else{
   if(AttrName.matches("UnderLine")){ 
    if(StyleConstants.isUnderline(jTextSend.getCharacterAttributes())){
    StyleConstants.setUnderline(sas, false);
    }else{StyleConstants.setUnderline(sas, true);}
   }   
  }   
 }
  
 jTextSend.setCharacterAttributes(sas, false);
 
  HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
  try{
  htmlEditorKit.write(System.out, doc, 0, doc.getLength());
  }catch(Exception Ex){}
 
 }      

}


Но тоже работает через раз, помогите пожалуйста.


Это сообщение отредактировал(а) filipp76 - 11.3.2008, 09:14
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 11.3.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



вот так вроде лучше срабатывает:
Код

   if(AttrName.matches("Bold"))
   { 
    if(StyleConstants.isBold(jTextSend.getCharacterAttributes()))
    {
     StyleConstants.setBold(sas, false);
    }
    else if( ! StyleConstants.isBold(jTextSend.getCharacterAttributes())) // !!!!!!!!!!!
    {
     StyleConstants.setBold(sas, true);
    }
   }


Это сообщение отредактировал(а) dorogoyIV - 11.3.2008, 12:18
PM MAIL   Вверх
dorogoyIV
Дата 11.3.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



да, вот исправил кое что, а то Exception вылетал

Код

 private void setTextSendAttr(String AttrName)
 {
  if(jTextSend.getSelectedText() == null)
  {
   return;   
  }

  else
  {
   DefaultStyledDocument document =
       (DefaultStyledDocument)jTextSend.getStyledDocument();
   Document doc=(Document)document;
   SimpleAttributeSet sas = new SimpleAttributeSet();    
 
   if(AttrName.matches("Bold"))
   { 
    if(StyleConstants.isBold(jTextSend.getCharacterAttributes()))
    {
     StyleConstants.setBold(sas, false);
    }
    else
    {
     StyleConstants.setBold(sas, true);
    }
   }
   if(AttrName.matches("Italic"))
   { 
    if(StyleConstants.isItalic(jTextSend.getCharacterAttributes()))
    {
     StyleConstants.setItalic(sas, false);
    }
    else
    {
     StyleConstants.setItalic(sas, true);
    }
   }
  
   jTextSend.setCharacterAttributes(sas, true);
   HTMLEditorKit htmlEditorKit = new HTMLEditorKit();

   try
   {
    htmlEditorKit.write(System.out, doc, 0, doc.getLength());
   }
   catch(Exception Ex){}
  }      
 }

PM MAIL   Вверх
filipp76
Дата 11.3.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Все также работает через раз
Например есть предложение: Привет вашему форуму !, в нем я выделяю первое и последнее слово жирным, после этого снять выделение не получаеться (, если выделить всё предложение тогда работает. Вроде все правильно но никак не получаеться ( . Даже если выделить одно слово и потом попыаться снять выделение то ничего не работает. 
Код

StyleConstants.isBold(jTextSend.getCharacterAttributes())

Вечно возвращает false.

Это сообщение отредактировал(а) filipp76 - 11.3.2008, 14:35
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 11.3.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



у меня нормально работает
Код

 private void setTextSendAttr(String AttrName)
 {
  boolean bold=false;
  boolean italic=false;
  boolean underLine=false;

  if(jTextSend.getSelectedText() == null)
  {
   return;   
  }

  else
  {
   DefaultStyledDocument document = (DefaultStyledDocument)jTextSend.getStyledDocument();
   Document doc=(Document)document;
   SimpleAttributeSet sas = new SimpleAttributeSet();    
 
   if(AttrName.matches("Bold"))
   { 
    if(!StyleConstants.isBold(jTextSend.getCharacterAttributes()))
    {
     bold=!bold;
    }
    StyleConstants.setBold(sas, bold);
   }

   if(AttrName.matches("Italic"))
   { 
    if(!StyleConstants.isItalic(jTextSend.getCharacterAttributes()))
    {
     italic=!italic;
    }
    StyleConstants.setItalic(sas, italic);
   }

   if(AttrName.matches("UnderLine"))
   { 
    if(!StyleConstants.isUnderline(jTextSend.getCharacterAttributes()))
    {
     underLine=!underLine;
    }
    StyleConstants.setUnderline(sas, underLine);
   }
  
   jTextSend.setCharacterAttributes(sas, true);
   HTMLEditorKit htmlEditorKit = new HTMLEditorKit();

   try
   {
    htmlEditorKit.write(System.out, doc, 0, doc.getLength());
   }
   catch(Exception Ex){}
  }      
 }

PM MAIL   Вверх
filipp76
Дата 11.3.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Цитата(dorogoyIV @ 11.3.2008,  15:41)
у меня нормально работает
Код

 private void setTextSendAttr(String AttrName)
 {
  boolean bold=false;
  boolean italic=false;
  boolean underLine=false;

  if(jTextSend.getSelectedText() == null)
  {
   return;   
  }

  else
  {
   DefaultStyledDocument document = (DefaultStyledDocument)jTextSend.getStyledDocument();
   Document doc=(Document)document;
   SimpleAttributeSet sas = new SimpleAttributeSet();    
 
   if(AttrName.matches("Bold"))
   { 
    if(!StyleConstants.isBold(jTextSend.getCharacterAttributes()))
    {
     bold=!bold;
    }
    StyleConstants.setBold(sas, bold);
   }

   if(AttrName.matches("Italic"))
   { 
    if(!StyleConstants.isItalic(jTextSend.getCharacterAttributes()))
    {
     italic=!italic;
    }
    StyleConstants.setItalic(sas, italic);
   }

   if(AttrName.matches("UnderLine"))
   { 
    if(!StyleConstants.isUnderline(jTextSend.getCharacterAttributes()))
    {
     underLine=!underLine;
    }
    StyleConstants.setUnderline(sas, underLine);
   }
  
   jTextSend.setCharacterAttributes(sas, true);
   HTMLEditorKit htmlEditorKit = new HTMLEditorKit();

   try
   {
    htmlEditorKit.write(System.out, doc, 0, doc.getLength());
   }
   catch(Exception Ex){}
  }      
 }

Так стало еще хуже, теперь еще каждый раз вставляеться какой-то тэг <p></p>  
Код

  <body>
    <p style="margin-top: 0">
       <b>
      <p>
      </b> dear <b>
      <p>
      </b>
    </p>
  </body>

Вот такая лабуда получаеться (

Ничего не пойму, теперь всегда добавляеться этот тэг и появляються страшные разрывы в тексте , блин полтергейст ничего же не менял ((( Может с  компонентой у меня чтот не так?

Это сообщение отредактировал(а) filipp76 - 11.3.2008, 16:18
PM MAIL WWW ICQ   Вверх
filipp76
Дата 11.3.2008, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Проблемы с тегами это мой не досмотр, но проблема остаеться, все равно метод работает через раз. Помогите пожалуйста.

Это сообщение отредактировал(а) filipp76 - 11.3.2008, 21:11
PM MAIL WWW ICQ   Вверх
filipp76
Дата 21.3.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

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



Уже 2 недели бьюсь с этой простой задачей но никак не могу решить. Помогите пожалуйста.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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