LINUX.ORG.RU

[JAVA SWING] Разноцветный текст в jTable


0

1

Как можно реализовать? Например юзер вводит в текст поле строку вода, и это слово должно подчеркнуться цветом во всех ячейках таблицы, не строка целиком, а именно это слово... без использования html так как это динамически меняется и хтмл тут не спасет, и без jxtable

Не понимаю, почему нельзя использовать HTML в DefaultTableCellRenderer (JLabel <font color=red>My </font><font color=green>label</font>). Если это требование, но написать свой компонент, который выводит строчку текста, изменяя цвет для заданного слова (возможно отнаследоваться от DefaultTableCellRenderer и переписать прорисовку).

olegk ★★
()
Ответ на: комментарий от olegk

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

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от olegk

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

class JHTMLText
{
    private String _text = "";
    private int hl_1 = 0;
    private int hl_2 = 0;
    private JButton assigned = null;

    public String getText()
    {
        return _text;
    }

    public void setText(String text)
    {
        _text = text;
    }

    public void setHighLightRange(int start, int length)
    {
        hl_1 = start;
        hl_2 = length;
        if(assigned!=null)
        {
            assigned.setText(getHtmlText());
        }
    }

    public void assign(JButton button)
    {
        assigned = button;
    }

    public String getHtmlText()
    {
        String str = _text;
        String fnt1 = "<font color=red>";
        String fnt2 = "</font>";
        String sub1 = str.substring(0, hl_1);
        String sub2 = str.substring(hl_1, hl_2);
        String sub3 = str.substring(hl_2,str.length());
        str = sub1+fnt1+sub2+fnt2+sub3;
        str = "<html><body>"+str+"</body></html>";
        return str;
    }
}
pozitiffcat ★★★
() автор топика
Ответ на: комментарий от pozitiffcat

Да, будет жрать кучу ресурсов, но не из-за html (тэги убирать не надо). Дело в том, что компонент для рендеринга используется __один__ для всех клеток. Т.е. вам нужно создать компонент для рендеринга который принимает на вход слово. Далее создать модель данных, которая тоже принимает на вход слово и по команде (нажат ввод в поле или кнопка) сообщит, какие клетки нужно перекрасить (TableEvent). Вот модель надо сделать эффективной, чтобы она не заставляла перекрашивать все, а только то, что нужно.

olegk ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.