JAVAFX - Управление графиком CandleStick с помощью ползунка

Я пытался использовать старый известный свечной график JAVA-FX, и у меня возникли проблемы. Когда я когда-либо пытаюсь изменить размер своего графика с помощью ползунка, который я прикрепил к нему, по какой-то причине свечи начинают становиться больше (толще) или становиться очень маленькими (тоньше).

мой sliderX - это ползунок с информацией о данных, минимальное значение устанавливается как минимальный день (1), а максимальное значение - как максимальный день.

У меня есть следующий код в качестве слушателя моего слайдера:

    sliderX.valueProperty().addListener(new ChangeListener<Number>() {
        public void changed(ObservableValue<? extends Number> ov,
            Number oldValue, Number newValue) {
                xAxis.setLowerBound(newValue.doubleValue());
                xAxis.setUpperBound(newValue.doubleValue() + 100);
                xAxis.setTickMarkVisible(true);
                chart.updateAxisRange();
        }

Идея заключалась в том, чтобы каждый раз смотреть на 100 дней вперед и перемещать данные с интервалом +100. поэтому вначале график будет показывать цены 0-100, а одним щелчком ползунка влево он покажет цены 1-101 и т. д.

Мне явно чего-то не хватает, но я не видел нормального объяснения этой проблемы, возможно, вы можете направить меня к учебнику / документу, который я могу прочитать и поучиться. Не ищу волшебного решения (но оно может быть хорошим), а скорее место, чтобы узнать, что было моим заблуждением в этой области.

Спасибо.


person Sielar    schedule 06.12.2014    source источник


Ответы (1)


Последние пару дней я работал над подобной проблемой и нашел решение, которое могло бы лучше помочь вам адаптировать код по следующей ссылке: https://community.oracle.com/message/11143490#11143490

Я думаю, проблема в том, что вы используете newValue как на нижней, так и на верхней границе, который, кажется, регулирует видимую область оси, а не панорамирует / прокручивает из стороны в сторону.

Вы можете попробовать реализовать это так:

sliderX.valueProperty().addListener(new ChangeListener<Number>() {
    public void changed(ObservableValue<? extends Number> ov, Number oldValue, Number newValue) {

            Delta = newValue.doubleValue() - oldValue.doubleValue(); 

            xAxis.setLowerBound(xAxis.getLowerBound() + Delta);
            xAxis.setUpperBound(xAxis.getUpperBound() + Delta);
            xAxis.setTickMarkVisible(true);
            chart.updateAxisRange();
    }
}

Я успешно использовал аналогичную версию этого кода в реализации свечной диаграммы JavaFX8 для панорамирования / прокрутки (с использованием события перетаскивания, а не ползунка, но математика должна остаться прежней)

person autronix    schedule 20.09.2015