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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> И снова подсветка синтаксиса 
V
    Опции темы
gibbzy
Дата 29.3.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вопрос по SWING
Приветствую всех. 
Передомной встал вопрос создания подсветки синтаксиса в текстовом редакторе. 
Я беру JScrollPane 
Размещаю там JEditorPane
Далее беру Plain Document 
помещаю его в JEditorPane
Дале вешаю на него documentListener

Дальше по логике он должен парсить при каждом введёном символе докумет на слова слова разделяються либо Пробелом либо скобкой "(" или ")" ну и там все возможные варианты 
распарсенные слова сравниваються с базой данных тех слов которые нужно подсвечивать. 

если совпадает тогда подсвечиваем тем или иным цветом 
вопрос: 
как установить цвет для определённого слова? 
ну или скажем для определённого набора символов начинающихся с определённой позиции и заканчивающихся определённой позицией ?

пока имею вот что : 
Код



package jte;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Action;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.*;

public class JTEFrame extends javax.swing.JFrame {

    /** Creates new form JTEFrame */
    public JTEFrame() {
        initComponents();
      //  jEditorPane1.setEditorKit(EKit);
        jEditorPane1.setDocument(doc);
        doc.addDocumentListener( new DocLis());
      
    }
  
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jEditorPane1 = new javax.swing.JEditorPane();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jScrollPane1.setViewportView(jEditorPane1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>

    /**
    * @param args the command line arguments
    */
 
public void doit(){
System.out.println(EKit.getContentType());

}

    // Variables declaration - do not modify
    public static javax.swing.JEditorPane jEditorPane1;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration
    public static  PlainDocument doc = new PlainDocument();
    public StyledEditorKit EKit = new StyledEditorKit();
     Document d = EKit.createDefaultDocument();
}


class DocLis implements DocumentListener {

    public void insertUpdate(DocumentEvent e) {
     
    }

    public void removeUpdate(DocumentEvent e) {
    
    
    }

    public void changedUpdate(DocumentEvent e) {
      
      
    }


}


PM MAIL WWW ICQ   Вверх
gibbzy
Дата 29.3.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



И ещё пожалуйста киньте ктонибудь описание EditorKit PlainDocument Element VievFactory, помимо java docs API и Портянкина.
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 30.3.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



реагирует на набор символов "red"
Код

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

public class JTEFrame extends JFrame
                      implements KeyListener
{
 String string="red";
 JTextPane jtp;
 int start=0, end=0;

 public JTEFrame()
 {
  initComponents();
  jtp.addKeyListener(this);
 }
  
 private void initComponents()
 {
  jtp = new JTextPane();
  setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  setSize(400, 300);
  add(new JScrollPane(jtp));
 }

 public void setRed()
 {
  SimpleAttributeSet red = new SimpleAttributeSet();
  StyleConstants.setForeground(red, Color.red);
  StyledDocument doc = jtp.getStyledDocument();
  doc.setCharacterAttributes(start, end, red, false);
 }

 public void keyTyped(KeyEvent e){} 
 public void keyPressed(KeyEvent e){}
 public void keyReleased(KeyEvent e)
 {
  if(jtp.getText().length() >= string.length())
  {
   String s=jtp.getText();

   if(s.substring(s.length()-string.length(),
                  s.length()).equals(string))
   {
    start = s.length() - string.length();
    end = start + string.length();
    setRed();
   }
  }
 }

 public static void main(String [] args)
 {
  new JTEFrame().setVisible(true);
 }
}

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


Шустрый
*


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

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



Большое спасибо. Выслал бы вам банку пива по почте  smile 
PM MAIL WWW ICQ   Вверх
Кайне
Дата 8.11.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



насколько я понял такой способ не работает если текст вставляется копипастом.
попробовал сделать такое в DocumentListener  - не работает.Выдает ошибку связанную с AbstractDocument, говорит что-то вроде(исходника под рукой нет) attempt to mutate че-то в AbstractDocument.
PM MAIL   Вверх
dorogoyIV
Дата 8.11.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



там идет сбой при вставке символа - "переход на новую строку" (когда ентер нажали)

Цитата(Кайне @  8.11.2009,  13:45 Найти цитируемый пост)
если текст вставляется копипастом

надо добавить к обработчику сочетание клавиш...
PM MAIL   Вверх
leskar
Дата 14.11.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(gibbzy @ 29.3.2008,  19:40)
И ещё пожалуйста киньте ктонибудь описание EditorKit PlainDocument Element VievFactory, помимо java docs API и Портянкина.

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


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

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