Использование RichTextFX

234
05 октября 2018, 02:50

У меня есть консоль, которая реализована на TextFlow. В ней меняется цвет, в зависимости от типа сообщения (ERROR - red, WARNING - yellow и тд).

Появилась необходимость выделения и копирования сообщений оттуда. Искал способы реализации данной задачи и чаще всего встречал RichTextFX, но мне не понятно его использование. Вот как выглядит моя консоль:

Чем из RichTextFX можно заменить мою реализацию в TextFlow?

И если есть какой-то туториал по RichTextFX кроме того что на GitHub - буду рад его получить!

Answer 1

Насчет другого руководства, кроме указанного на github, я не знаю. Но указанного там достаточно для вашей задачи:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.fxmisc.richtext.InlineCssTextArea;
import java.util.Random;
public class Main extends Application {
    private static final String ERROR_STYLE = "-fx-fill: red;";
    private static final String WARN_STYLE = "-fx-fill: blue;";
    public void start(Stage primaryStage) throws Exception {
        final InlineCssTextArea inlineCssTextArea = new InlineCssTextArea();
        primaryStage.setScene(new Scene(inlineCssTextArea));
        primaryStage.show();
        // Этот сделан для демонстрации
        // Будут выведены 30 сообщение, тип сообщения (WARN, ERROR) определяется произвольно
        new Thread(() -> {
            Random random = new Random();
            for (int i = 0; i < 30; i++) {
                // Выбрали стиль
                final String style = random.nextBoolean() ? ERROR_STYLE : WARN_STYLE;
                // Сгенирировали сообщение
                final String message = String.valueOf(i).concat("\n");
                Platform.runLater(() -> {
                    // получаем границы нового сообещения
                    int from = inlineCssTextArea.getLength();
                    int to = from + message.length();
                    // добавили сообещние
                    inlineCssTextArea.appendText(message);
                    // указали для него стиль
                    inlineCssTextArea.setStyle(from, to, style);
                });
                try {
                    Thread.sleep(500);
                } catch (InterruptedException ex) { /* NOP */ }
            }
        }).start();
    }
}

и соответственно

    <dependency>
        <groupId>org.fxmisc.richtext</groupId>
        <artifactId>richtextfx</artifactId>
        <version>0.9.1</version>
    </dependency>
READ ALSO
Navigation Drawer переход к фрагментам или активити

Navigation Drawer переход к фрагментам или активити

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

158
retrofit 2, экранирование двойных кавычек

retrofit 2, экранирование двойных кавычек

Имеется строка вида {"asdasd":"adsasd"}Формируется данная строка с помощью символа экранирования

161
Перерисовка маркеров google maps api

Перерисовка маркеров google maps api

Имеется класс, реализующий поиск ближайших мест на карте путем отправки запроса и получения результатов в jsonЗапросы отправляются и получаются...

188
Retrofit2 Android Java

Retrofit2 Android Java

ЗдраствуйтеНе как не могу вникнуть как отправлять изоброжения на сервер с помощью retrofit2

154