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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подчеркивание красным волнистой линией. spellcheck 
:(
    Опции темы
physicist
Дата 19.8.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как сделать подчеркивание красной волнистой линией определенных слов в панели редактирования? В каких библиотеках это реализовано?
PM MAIL   Вверх
mgarin
Дата 20.8.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я, например, использую набор Jide библиотек (правда они платные) - jidesoft.com
Там это в более поздних версиях появилось. Плюс куча разных других полезных компонентов/надстроек

Если непосредственно необходима только данная фича, то проще ее дописать расширив JTextField, например...

Вот как например можно дополнить JTextField:
Код
        JTextField left = new JTextField( "Text..." )
        {

            public void paint ( Graphics g )
            {
                super.paint ( g );

                Graphics2D g2d = ( Graphics2D ) g;

                FontMetrics fm = getFontMetrics ( getFont () );
                g2d.setPaint ( Color.RED );
                g2d.drawLine ( 2, getHeight () / 2 + fm.getAscent ()/2, fm.stringWidth ( getText () ),
                        getHeight () / 2 + fm.getAscent ()/2 );
            }
        };
        left.setHorizontalAlignment ( JTextField.LEFT );
        getContentPane ().add ( left, BorderLayout.CENTER );


Подчеркивание текста красной линией


Даже вот так лучше будет:

Код
                g2d.drawLine ( 2, getHeight () / 2 + fm.getAscent () / 2,
                        Math.min ( fm.stringWidth ( getText () ), getWidth () - 4 ),
                        getHeight () / 2 + fm.getAscent () / 2 );


Ну, естественно, если тебе нужна подчеркнутая волнистая линия - делаешь метод который ее рисует в заданных координатах.
Например по функции sin() или просто "/\/\/\/\/\/\/" вручную отрисовывать в цикле

Возможностей куча - все зависит от желания smile


Еще можно используя стандартные средства рисования подкрутить всяких настроек, типа:

Код
                BasicStroke dashed =
                        new BasicStroke ( 1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                                10.0f, new float[]{ 5, 3 }, 0.0f );
                g2d.setStroke ( dashed );

                g2d.setPaint ( Color.RED );
                g2d.drawLine ( 2, getHeight () / 2 + fm.getAscent () / 2,
                        Math.min ( fm.stringWidth ( getText () ), getWidth () - 4 ),
                        getHeight () / 2 + fm.getAscent () / 2 );


Это сообщение отредактировал(а) mgarin - 20.8.2009, 10:46
PM MAIL WWW ICQ   Вверх
physicist
Дата 21.8.2009, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



mgarin, эх, неужто нет ничего опенсорсного? А-то как-то не очень хочется писать очередной велосипед.
PM MAIL   Вверх
mgarin
Дата 21.8.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Предполагаю, что есть...

Просто как всегда: open source = -расходы +геморрой
А платные библиотеки стоят довольно умеренно, по сравнению с различным софтом, 
но дают высокого качества выхлоп плюс постоянный фикс багов и новые фичи...

Ну это дело вкуса...


Поискал библиотеки - большинство бесплатных слишком страшные,
да и нет в них этого подчеркивания

Все же, чем подключать целую библиотеку ради 1 черточки под филдом, не проще ее сделать?
Исходя из здравого смысла - больше времени потратишь на поиск и разборки с библиотекой...
Другое дело если бы нужно было много разных нашлепок на интерфейс

Это сообщение отредактировал(а) mgarin - 21.8.2009, 10:47
PM MAIL WWW ICQ   Вверх
mgarin
Дата 21.8.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот, я изобрел велосипед, если нужно: 
(Можно ставить любой алигмент текста внутри, код подстроится, также любой фонт текста)
(Антиалиас - опционально - без него, просто, страшновато выглядит)

Код
        JTextField left = new JTextField( "Text... Any text..." )
        {
            private int lineHeight = 1;

            public void paint ( Graphics g )
            {
                super.paint ( g );

                Graphics2D g2d = ( Graphics2D ) g;

                g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON );

                FontMetrics fm = getFontMetrics ( getFont () );
                g2d.setPaint ( Color.RED );

                int xStart = 1;
                if ( getHorizontalAlignment () == JTextField.LEFT )
                {
                    xStart = 1;
                }
                else if ( getHorizontalAlignment () == JTextField.RIGHT )
                {
                    xStart = getWidth () / 2 - fm.stringWidth ( getText () ) / 2 - 2;
                }
                else if ( getHorizontalAlignment () == JTextField.CENTER )
                {
                    xStart = getWidth () / 4 - fm.stringWidth ( getText () ) / 4 - 1;
                }
                int yStart = getHeight () / 2 + fm.getAscent () / 2 + 2;
                for ( int i = xStart; i < xStart + fm.stringWidth ( getText () ); i++ )
                {
                    g2d.drawLine ( xStart + i, yStart + Integer.parseInt ( "" +
                            Math.round ( lineHeight * Math.sin ( ( i - xStart ) * Math.PI / 5 ) ) ),
                            xStart + i + 1, yStart + Integer.parseInt ( "" + Math.round (
                                    lineHeight *
                                            Math.sin ( ( i + 1 - xStart ) * Math.PI / 5 ) ) ) );
                }

                g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_OFF );
            }
        };
        left.setHorizontalAlignment ( JTextField.CENTER );


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


Новичок



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

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



mgarin, спасибо, конечно, большое. Но вот, что я думаю: исходники Eclipse и NetBeans открыты, следовательно у них должны быть готовые мощные редакторы текста. Думаю в ближайшее время покопаться в них --- возможно таким образом удастся заполучить хороший редактор.

Либо тогда придется писать это дело на базе jEdit'a. Но писать велосипеды... это только лишняя трата времени.

P. S. "Аппетит приходит во время еды". Возможно, кроме подчеркивания понадобятся в дальнейшем элементы автоподстановки и сворачивания блоков.
PM MAIL   Вверх
mgarin
Дата 21.8.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(physicist @ 21.8.2009,  19:15)
P. S. "Аппетит приходит во время еды". Возможно, кроме подчеркивания понадобятся в дальнейшем элементы автоподстановки и сворачивания блоков.

Ну, видимо не всем нравится писать такие вещи, как мне smile
Хотя, конечно, это все полный примитив, но зато можно сделать 1в1 так как тебе нравится и потом не ссылаться на недостатки используемой библиотеки 

Цитата
Либо тогда придется писать это дело на базе jEdit'a. Но писать велосипеды... это только лишняя трата времени.


Это не написание велосипедов (конечно, конкретно ЭТО может и велосипед, даже колесо),
Сколько разных библиотек не видел - везде разные реализации, разные возможности
Потому их продолжают писать те, кому не лень (видимо)
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.0773 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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