Я пытаюсь создать прокручиваемую диаграмму, где ось Y остается в поле зрения независимо от положения курсора в полосе прокрутки (по умолчанию, поскольку информация о оси Y находится в конце от точки зрения, вы увидите его только после того, как вы выделите достаточно, чтобы увидеть конец)Линейная диаграмма прокрутки с фиксированным видом y ось JavaFX
Вот пример того, что им пытаются достичь:
Обратите внимание, что даже если позиция полосы прокрутки на полпути -through, текст оси Y (цена) все еще остается в поле зрения
Я просмотрел веб-сайт и смог найти только один пример чего-то подобного, но он, похоже, не работает с линейной диаграммой внутри scrollPane.
Always visible when scrolled anchored Node in Java FX 2.0?
Вышеперечисленные работы с объектом Circle, но изменения в диаграмму линии приведет в «Исключение: Связанное значение не может быть установлено», как это кажется автоматический вызов установлен макет при использовании линии диаграммы внутри scrollpane
public class FancyScrollPane extends Application {
private LineChart<String, Number> qChart;
@Override
public void start(Stage primaryStage) {
ScrollPane scrollPane = new ScrollPane();
Pane content = new Pane();
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis(12, 20, 1);
yAxis.setSide(Side.RIGHT);
qChart=new LineChart<String,Number>(xAxis, yAxis);
qChart.setPrefSize(3000, 250);
content.getChildren().add(qChart);
scrollPane.setContent(content);
Circle immovableObject = new Circle(30, Color.RED);
content.getChildren().add(immovableObject);
primaryStage.setScene(new Scene(scrollPane, 300, 300));
primaryStage.show();
yAxis.layoutXProperty().bind(
scrollPane.hvalueProperty()
.multiply(
content.widthProperty()
.subtract(
new ScrollPaneViewPortWidthBinding(scrollPane))));
}
// we need this class because Bounds object doesn't support binding
private static class ScrollPaneViewPortWidthBinding extends DoubleBinding {
private final ScrollPane root;
public ScrollPaneViewPortWidthBinding(ScrollPane root) {
this.root = root;
super.bind(root.viewportBoundsProperty());
}
@Override
protected double computeValue() {
return root.getViewportBounds().getWidth();
}
}
public static void main(String[] args) { launch(); }
}
Любые идеи, чтобы обойти вышеупомянутую проблему или лучший способ добиться этого?
Благодаря