javafx рисует одновременно на нескольких холстах - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть сетка с тремя столбцами (имя, сумма, позиция) и ~ 20 строк (A, B, C, ...).В третьем столбце я рисую обводку для каждой отметки времени в списке для этой строки.В функции я только перебираю список и конвертирую метку времени в позицию.Вот как это выглядит сейчас.

for (int row = 0; row < timestamps.size(); row++)
{
    drawTimestamps(timestamps.get(row), duration, canvas, row);
}

Теперь, поскольку запись, которую я хочу отобразить, может быть относительно длинной, это может занять некоторое время.Чтобы нарисовать позиции быстрее, я подумал о том, чтобы нарисовать все строки одновременно.Я пытался сделать это с AnimationTimer, но это не сработало, как планировалось (я думаю, что сделал это неправильно).Будет ли это даже способ нарисовать несколько строк одновременно или есть другой подход, который сделает это быстрее?

    for (int row = 0; row < timestamps.size(); row++)
    {
        DrawTimer dt = new DrawTimer(timestamps.get(row), duration, canvas, row);
        dt.start();
    }


    private class DrawTimer extends AnimationTimer
    {
        private List<long> timeStamps;
        private int duration;
        private Canvas canvas;
        private int row;

        public DrawTimer(List<Long> timestamps, int duration, Canvas canvas, int row)
        {
            this.timestamps = timestamps;
            this.duration = duration;
            this.canvas = canvas;
            this.row = row;
        }

        @Override
        public void handle(long now)
        {
            drawTimeStamps(timestamps, duration, canvas, row);
            stop();
        }
    }

    private void drawTimestamps(List<Long> timestamps, int duration, Canvas canvas, int row)
    {
        double width = canvas.getWidth();
        double height = canvas.getHeight();

        final GraphicsContext gc = canvas.getGraphicsContext2D();
        gc.setStroke(Color.DARKBLUE);
        for (long timestamp : timestamps)
        {
            double timestampPosition = timestamp * 1d / duration;
            gc.strokeLine(width * timestampPosition, height - height / 2, width * timestampPosition,
                height);
        }
    }

Вот как это выглядит, когда значения выводятся на холст.Теперь каждый штрих - это отметка времени, и эта запись длится ~ 7 дней.Во втором столбце отображается количество временных меток.

gridpane with timestamps

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...