2014-12-06 2 views
0

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

мой слайдерX - это слайдер с информацией о данных, установите минимальное значение как минимальный день (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 цен и т. Д.

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

Спасибо.

ответ

0

За последние несколько дней я работал над аналогичным вопросом, и я нашел решение, которое может лучше помочь вам адаптировать свой код в следующей ссылке: 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 подсвечника для панорамирования/прокрутки (с помощью события перетаскивания, а не слайдер но математика должна оставаться неизменной)

Смежные вопросы