Interval Marker-JFreeChart中的工具提示

时间:2017-12-04 09:55:14

标签: swing jfreechart intervals markers itemrenderer

我正在使用区间标记在x轴上标记[a,b]的区域。我现在需要做两件事: 1.)我需要为该区域添加工具提示,即如果用户悬停在x的[a,b]值之间的任何绘图区域,我应该能够显示工具提示。据我所知,我可以通过检测mouseover的坐标并检查它们是否位于[a,b]之间并相应地显示来实现。但是,是否存在间隔标记本身的任何属性或其他一些方法呢?

2.)我需要将标签添加到该区域。我使用setLabel()做到了。但它会水平显示标签。我想垂直标签。我搜索了一下,发现添加XYTextAnnotation或覆盖情节渲染器的drawDomainMarker()功能的建议。 我尝试使用前一种方法(注释),注释不会出现在正确的x值上。但是当我放大我的图表时,它们就在正确的位置。当间隔标记能够在正确的位置正确绘制间隔时,为什么会发生这种情况?

编辑1:

示例,我有这段代码:

public class Test extends ApplicationFrame {
public Test(final String title) {
    super(title);
    IntervalXYDataset dataset = createDataset();
    JFreeChart chart = createChart(dataset);
    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    setContentPane(chartPanel);
}

private IntervalXYDataset createDataset() {
    final XYSeries series = new XYSeries("Random Data");
    series.add(1.0, 400.2);
    series.add(5.0, 294.1);
    series.add(4.0, 100.0);
    series.add(12.5, 734.4);
    series.add(17.3, 453.2);
    series.add(21.2, 500.2);
    series.add(21.9, null);
    series.add(25.6, 734.4);
    series.add(30.0, 453.2);
    final XYSeriesCollection dataset = new XYSeriesCollection(series);
    return dataset;
}

private JFreeChart createChart(IntervalXYDataset dataset) {
    final JFreeChart chart = ChartFactory.createXYBarChart("XY Series Demo", "X", false, "Y", dataset,
            PlotOrientation.VERTICAL, true, true, false);
    XYPlot plot = (XYPlot) chart.getPlot();
    ValueMarker vm = new ValueMarker(20);
    vm.setLabelOffsetType(LengthAdjustmentType.EXPAND);
    vm.setPaint(Color.black);
    vm.setStroke(new BasicStroke(2.0F));
    vm.setLabel("FLAPS 20");
    vm.setLabelFont(new Font("SansSerif", 0, 11));
    vm.setLabelPaint(Color.black);
    vm.setLabelAnchor(RectangleAnchor.TOP_LEFT);
    vm.setLabelTextAnchor(TextAnchor.BOTTOM_LEFT);
    plot.addDomainMarker(0, vm, Layer.FOREGROUND);

    XYTextAnnotation textLabel = new XYTextAnnotation("Target Range", 5, 200);
    textLabel.setFont(new Font("Sans Serif", Font.BOLD, 10));
    textLabel.setRotationAnchor(TextAnchor.CENTER);
    textLabel.setTextAnchor(TextAnchor.CENTER_LEFT);
    textLabel.setRotationAngle(-3.14 / 2);
    textLabel.setPaint(Color.red);
    plot.addAnnotation(textLabel);
    return chart;
}

public static void main(final String[] args) {

    final Test demo = new Test("XY Series Demo 3");
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);

}

}

如果我们在上面看到,在坐标(x = 5和y = 200)处添加了XYTextAnnotation,但是如果我在图中看到它看起来不在该位置。为什么这样?它是如何解决的?

编辑2:关于编辑1中提出的问题,我想到的是旋转发生在标签的中心周围。这就是为什么在textLabel旋转后,位置会发生变化的原因。我需要将textLabel.setTextAnchor(TextAnchor.CENTER_LEFT);更改为textLabel.setTextAnchor(TextAnchor.TOP_LEFT);才能生效。此外,textAnchor应更改为TOP_LEFT,以使文字标签与我的地图中所需的坐标对齐。

但仍然无法实现怀疑1。

请随意纠正以上内容。

由于

0 个答案:

没有答案