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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTextArea метод select. 
:(
    Опции темы
Wildklas
Дата 24.3.2012, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.  Я хотел сделать посик в JTextArea, решил сделать так: найти индекс начала искомого слова, и выделить само слова с помощью select.

Вот что я сделал:




Код
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 *
 * @author Wild_klas
 */

public class Search extends javax.swing.JDialog implements ActionListener {
    private JButton okButton;
    private JButton cancelButton;
    private JTextField srcText;
    private JTextArea area;

    public Search() {
        okButton = new JButton();
        cancelButton = new JButton();
        srcText = new JTextField();
        area = new JTextArea();

        srcText.setText("поиск");
        okButton.setText("Ok");
        cancelButton.setText("Cansel");
        okButton.setActionCommand("ok");
        cancelButton.setActionCommand("cansel");
        
        okButton.addActionListener(this);
        cancelButton.addActionListener(this);

        add(srcText, BorderLayout.NORTH);
        add(area, BorderLayout.CENTER);
        add(okButton, BorderLayout.EAST);
        add(cancelButton, BorderLayout.WEST);
        
        setBounds(400, 350, 370, 100);

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        
        area.setForeground(Color.blue);
        add(area, BorderLayout.CENTER);
        area.setText("Тест на поиск и выдиление текста.");
        area.select(5, 15);
        area.setSelectedTextColor(Color.red);
        area.repaint();

        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if ("ok".equals(e.getActionCommand())) {
            String word = srcText.getText().trim();
            String document = area.getText();
            System.out.println(document.indexOf(word));
            area.select(document.indexOf(word), word.length());
            area.repaint();
        } else {
            this.dispose();
        }
    }

    public static void main(String args[]) {
        new Search();
    }
}


Как видите метод select, вызывается 2 раза, но ничего собственно не выделяется. Подскажите что я делаю не правильно.

И еще вопрос: подскажите пожалуйста, можно ли в jtextArea сделать что - то по типу маркера? (выделяем текст, и по нажатию кнопочки он выделен к примеру желтым)
PM MAIL WWW ICQ Skype   Вверх
dorogoyIV
Дата 25.3.2012, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

    public void actionPerformed(ActionEvent e) {
        if ("ok".equals(e.getActionCommand())) {
            String word = srcText.getText().trim();
            String document = area.getText();
int start = document.indexOf(word);
            System.out.println(document.indexOf(word));
//            area.select(document.indexOf(word), word.length());
//            area.repaint();
area.select(start, start + word.length());
area.grabFocus();
        } else {
            this.dispose();
        }
    }

PM MAIL   Вверх
Wildklas
Дата 25.3.2012, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



dorogoyIV, спасибо за помощь.  smile 


А по поводу маркера кто - нибудь может помочь с идеей?
PM MAIL WWW ICQ Skype   Вверх
Mirkes
Дата 26.3.2012, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нужно взять кусок и поменять ему стиль.
Типа вот такого
Код

    SimpleAttributeSet errors = new SimpleAttributeSet();
    StyleConstants.setBackground(errors, Color.YELLOW);
    StyledDocument doc = log.getStyledDocument();
    doc.setCharacterAttributes(start, word.length(), errors, true);


Прошу прощения за дурацкие имена, выдирал из своей программы, менять не было времени.


--------------------
Mirkes
PM MAIL   Вверх
Wildklas
Дата 26.3.2012, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Mirkes @  26.3.2012,  03:59 Найти цитируемый пост)
Нужно взять кусок и поменять ему стиль.
Типа вот такого

Код

    SimpleAttributeSet errors = new SimpleAttributeSet();
    StyleConstants.setBackground(errors, Color.YELLOW);
    StyledDocument doc = log.getStyledDocument();
    doc.setCharacterAttributes(start, word.length(), errors, true);



Прошу прощения за дурацкие имена, выдирал из своей программы, менять не было времени. 


Mirkes, насколько я понял log - это у вас JTextPane?


Это сообщение отредактировал(а) Wildklas - 26.3.2012, 23:34
PM MAIL WWW ICQ Skype   Вверх
Mirkes
Дата 27.3.2012, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Wildklas @  26.3.2012,  23:33 Найти цитируемый пост)
Mirkes, насколько я понял log - это у вас JTextPane?

Совершенно верно.


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


Новичок



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

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



Mirkes, спасибо, работает. Подскажите, а в jTextArea можно сделать что - то подобное? Я так понимаю что нет smile 
Ну тогда переделаю свою модель под jTextpane  smile 

Это сообщение отредактировал(а) Wildklas - 27.3.2012, 22:53
PM MAIL WWW ICQ Skype   Вверх
Wildklas
Дата 27.3.2012, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все хорошо, но если например я провожу поиск, выделяю найденное слово,и если печатать дальше в jTextpane, то все выделяется, как это исправить?

Это сообщение отредактировал(а) Wildklas - 28.3.2012, 08:16
PM MAIL WWW ICQ Skype   Вверх
Mirkes
Дата 28.3.2012, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Wildklas @ 27.3.2012,  23:09)
Все хорошо, но если например я провожу поиск, выделяю найденное слово,и если печатать дальше в jTextpane, то все выделяется, как это исправить??

По идее, должно выделяться если вы печатаете в том фрагменте, который выделен. Поскольку это не совсем выделение - это изменение стиля. Например если вы в Word выделите фрагмент жирным и начнете в этот фрагмент что-то вставлять, то вставка будет тоже жирным.
Как я понял работу JTextArea и JTextPane.
1. Выделение (Select) видно только в том случае, когда фокус в соответсвующем поле. Поэтому я в свое время и отказался от использования этого метода.
2. Выделение за счет изменения стиля видно всегда. Но убирать его прихдится ручками. И при печати в выделенном фрагменте все вводится выделенным.
Дальнейшее вопрос того, что нужно.
Насчет использования JTextArea. Замена атрибутов там тоже есть. Но я не нашел варианта, как добиться результата. Особо долго не искал. Возможно там следует сменить тип документа.


--------------------
Mirkes
PM MAIL   Вверх
Wildklas
Дата 28.3.2012, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Mirkes, еще раз большое спасибо за толковое обьяснение) smile 
PS: хотел поставить Вам +, но мне еще нельзя (там 100 сообщений нужно) 
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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