Я пытаюсь добавить всплывающие подсказки к различным узлам линейной диаграммы JavaFX. Моя диаграмма состоит из двух разных серий; каждая серия имеет несколько точек данных. Каждая точка данных относится к объекту. Мне нужно получить доступ к связанному объекту точки данных, чтобы добавить информацию в его всплывающую подсказку.
Из того, что я понимаю, всплывающие подсказки должны быть установлены после добавления данных в диаграмму. Я создал HashMap, который отслеживает добавленные точки данных относительно соответствующего объекта, чтобы я мог получить объект после добавления точек данных на диаграмму.
Ниже приведен пример добавления данных в серию:
dataToAdd = new XYChart.Data(Integer.toString(count), timeSpent);
addedData.put(dataToAdd, object); // Store a reference in a HashMap<XYChart.Data, DataObject>
series1.getData().add(new XYChart.Data(Integer.toString(count), timeSpent));
После запуска lineChart.getData().addAll(series1, series2);
я перебираю серию графика и каждую серию, соответствующую XYChart.Data
. Затем я пытаюсь сопоставить эти данные с данными в моем HashMap
, чтобы я смог извлечь Question
, который содержит данные, которые я хочу предоставить для всплывающей подсказки. Ниже приведен фрагмент кода, демонстрирующий это:
for (XYChart.Series<String, Number> s : lineChart.getData()) {
for (XYChart.Data<String, Number> d : s.getData()) {
// This if statement never evaluates to true
if (addedData.containsKey(d)) {
Tooltip tooltip = new Tooltip();
tooltip.setText("Difficulty: " + addedData.get(d).difficulty.toString());
Tooltip.install(d.getNode(), tooltip);
}
}
}
Я понятия не имею, почему я не могу сопоставить значение с моим Hashmap. Я пробовал все виды вещей, такие как сравнение с методом XY.Data.getNode()
, но это также не дает никаких совпадений. Я подтвердил, что мой HashMap заполняется ссылками на объекты XY.Data. Что я здесь не так делаю?
Редактировать: Как указал Седрик, я добавлял new
экземпляр объекта XYChart.Data, а не предоставлял ссылку на объект, который я добавлял в HashMap, не знаю, как я это пропустил!