JFreeChart создает всплывающую подсказку в ChartPanel

Как создать всплывающую подсказку при наведении курсора на график в JFreeChart? Я пробовал это:

chartPanel.setToolTipText("this is the string");

но это не работает. Должен ли я сделать что-то еще раньше? Что-то вроде этого:

chartPanel.createToolTip().

Я вызываю эти методы в событии chartMouseMoved.


person jpo    schedule 20.07.2011    source источник


Ответы (1)


Большинство методов ChartFactory включают параметр boolean tooltips. Просто загляните в исходный код выбранной вами фабрики, чтобы узнать, как создать генератор всплывающих подсказок по умолчанию, подходящий для назначенного средства визуализации. Вам не нужно обрабатывать события самостоятельно.

Приложение: Поскольку вы используете createXYLineChart, экземпляр StandardXYToolTipGenerator предоставляется по умолчанию. DEFAULT_TOOL_TIP_FORMAT это {0}: ({1}, {2}); символы MessageFormat представляют собой dataset, series и item соответственно. Вы можете использовать эти символы в своем собственном генераторе, как показано в этом XYItemLabelGenerator, или вы можете переопределить generateToolTip(), чтобы вернуть что-либо вообще.

Приложение: Вот пример, который показывает только dataset:

XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setLegendItemToolTipGenerator(
    new StandardXYSeriesLabelGenerator("Legend {0}"));
person trashgod    schedule 21.07.2011
comment
Спасибо,. Я использую createXYLineChart и устанавливаю для свойства всплывающей подсказки значение true. Но как определить, где и что показывать в каждой из всплывающих подсказок. Я пытался сделать это в chartmouseclick и chartMouseMoved, но это не сработало. Пробовал делал с помощью методов описанных выше. - person jpo; 21.07.2011
comment
Спасибо. Но моя строка всплывающей подсказки на самом деле связана не с какой-либо серией или набором данных, а с позицией, в которой находится мышь, и некоторым вычисленным значением. Допустим, я хочу отобразить координаты мыши в подсказке... - person jpo; 21.07.2011
comment
Просто сохраните MouseEvent от вашего слушателя в подклассе StandardXYToolTipGenerator. - person trashgod; 21.07.2011
comment
Я использовал XYItemLabelGenerator, но значение отображается в каждой точке серии, а не в месте расположения мыши :( Кроме того, могу ли я отображать его поверх любой аннотации, которая может быть на моем графике? - person jpo; 22.07.2011
comment
Вместо реализации XYItemLabelGenerator вы должны расширить StandardXYToolTipGenerator и добавить его через setBaseToolTipGenerator() рендерера. - person trashgod; 22.07.2011
comment
Пример будет очень признателен - person jpo; 25.07.2011