Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > TextLayout


Автор: dre 16.11.2006, 14:27
Короче есть объект TextLayout в нем храниться строчка для вывода, а надо обратно из этого TextLayout получить string, перекопал все методы и пришел к выводу что это сделать нельзя, очень хочется ошибаться. Может кто подскажет чего?
P.S. метод toString не работает, он выводит другую информацию.

Автор: powerOn 16.11.2006, 15:39
Цитата(dre @  16.11.2006,  14:27 Найти цитируемый пост)
надо обратно из этого TextLayout получить string,

Никак не получите. TextLayout - это своего рода помошник для прорисовки текста. 
Заведите String переменную и храните текущий текст в ней.

Автор: dre 16.11.2006, 15:58
Цитата

Заведите String переменную и храните текущий текст в ней

легко сказать, если бы было так просто я бы и не спрашивал...
Очень жаль конечно... Буду пробовать другие варианты.

Автор: Metal_Heart 16.11.2006, 16:01
Цитата(dre @  16.11.2006,  14:27 Найти цитируемый пост)
TextLayout в нем храниться строчка для вывода

dre, а что за строчка и как она храниться?


Автор: dre 16.11.2006, 16:18
проведу код:
 
Код

 TextLayout layout;
        ArrayList lines = new ArrayList();
        ArrayList layouts = new ArrayList();
        Graphics2D g2d = (Graphics2D) g;
        g2d.setFont(font);
        StringTokenizer tokenizer = new StringTokenizer(string, "\n", false);
        while (tokenizer.hasMoreElements()) {
            lines.add(tokenizer.nextToken());
        }
        for (int i = 0; i < lines.size(); i++) {
            AttributedString paragraphText = new AttributedString((String) lines.get(i));
            AttributedCharacterIterator characterIterator = paragraphText.getIterator();
            paragraphText.addAttribute(TextAttribute.FONT, font);
            LineBreakMeasurer lineBreaker = new LineBreakMeasurer(characterIterator, new FontRenderContext(null, false, true));
            layout = lineBreaker.nextLayout((float) tabWidth);
            layout.draw(g2d, point.x + 46, y);
            y += fontHeight;
            layouts.add(layout);
            while (lineBreaker.getPosition() != characterIterator.getEndIndex()) {
                layout = lineBreaker.nextLayout((float) width);
                layout.draw(g2d, point.x, y);
                layouts.add(layout);
                y += fontHeight;
            }
        }


Этот код берет строчку и выводит ее согласно абзацам с отступами и заданой шириной (для разных форматов страниц), строчка целиком есть, а вот как получить подстрочки с нужной шириной, причем с учетом абзацев?

Автор: LSD 16.11.2006, 16:44
Можно через reflection вытащить эти данные.

Автор: dre 16.11.2006, 17:02
через reflection это уже совсем некрасиво будет, можно конечно попробовать, но здается мне что геморно это будет, в TextLayout строка хранится если не ошибаюсь в объекте TextLine а в нем private массив char где находятся символы.

Автор: LSD 16.11.2006, 17:17
Цитата(dre @  16.11.2006,  17:02 Найти цитируемый пост)
через reflection это уже совсем некрасиво будет, можно конечно попробовать, но здается мне что геморно это будет, в TextLayout строка хранится если не ошибаюсь в объекте TextLine а в нем private массив char где находятся символы.

Да. Но пока я другого выхода не вижу, может попозже, что придумаю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)