java - 向 JFreeChart 添加水平滚动

标签 java swing jfreechart

<分区>

如标题所述:如何将水平滚动条添加到我使用 JFreeChart 创建的烛台图表?我希望用户在放大时能够水平滚动图表。现在放大有效,但我不能向左或向右移动。我尝试将 ChartPanel 放入 JScrollPane 但那是一个图表面板,而不是图表本身。我的自定义 ChartPanel 构造函数:

public MyChartPanel(JFreeChart chart) {
    super(chart);
    lineDrawingControllers =new EventListenerList();
    this.setMouseZoomable(false);
    this.addMouseListener(mouseHandler);
    this.addMouseMotionListener(mouseHandler);
    this.setPopupMenu(null);
    this.linePopupMenu=new JPopupMenu();
    linePopupMenuListener=new LinePopupMenuListener();
}

我的自定义 Jpanel,我在其中创建了 Chart 和 ChartPanel,并将 ChartPanel 放在 JScrollPane 中:

public MyCandleStickChart() {
    ohlcSeries = new OHLCSeries("Test data");
    ohlcSeriesCollection = new OHLCSeriesCollection();
    ohlcSeriesCollection.addSeries(ohlcSeries);
    ohlcSeries=ohlcSeriesCollection.getSeries(0);

    chart= ChartFactory.createCandlestickChart("Default Chart", "Time", "Value", ohlcSeriesCollection, true);
    chart.getXYPlot().setOrientation(PlotOrientation.VERTICAL);
    chartPanel=new MyChartPanel(chart);
    chartPanel.setDisplayToolTips(false);
    jScrollPane=new JScrollPane(chartPanel);
    jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    add(jScrollPane);
    add(tooltipPanel);
}

然后我将 MyCandleStickChart JPanel 添加到主应用程序框架:

myCandleStickChart=new MyCandleStickChart();
applicationFrame.add(myCandleStickChart, BorderLayout.CENTER);

最佳答案

如果您在 XYPlot 上调用 setDomainPannable(true),您实际上可以左右移动它。在您的情况下看起来像 chart.getXYPlot().setDomainPannable(true)。还有一个方法 setRangePannable(boolean pannable) 分别用于范围方向的平移。当我很久以前使用它时,这导致能够通过拖动鼠标中键来移动图表。我不知道现在你的行为会是什么 :) 但如果你没有其他想法,这种方法是一个很好的起点。可能如果您在那里查看源代码,那么您可以为相同的功能创建您自己的自定义滚动条。

Upd.:或者,您可以自己通过鼠标滚轮或其他方式增加/减小 ChartPanel 的大小,而无需使用 JFreeChart 的缩放功能。然后 JScrollPane 将完成这项工作。如果您只想在全局范围内扩展,这很好也更容易。但是,如果您想要很好地缩放用户选择的区域,那么我会考虑自定义 JFreeChart 的“平移”。

Upd2.:我对鼠标中键的理解可能是错误的。可能是 CTRL + 鼠标拖动,就像@trashgod 提供的链接一样

关于java - 向 JFreeChart 添加水平滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604898/

相关文章:

java - 自定义 JFreeChart 标题字体太小

java - 将数组对象传递给struts2中的action类

java - java中的ImageIcon

java - BigQuery 写入完成后数据流发送 PubSub 消息

java - 如何在java中创建可检查的 ListView

java - 覆盖动态创建的各个 JTable 单元格的单元格编辑器

java - 如何在 jsp 上显示呈现为图像的 jfreecharts 的工具提示

java - 如何从 jfreechart 中的盒须图中删除异常值(小圆圈)

java - 如何在 Java 中使用套接字发送 JSON 响应

java - 单元/集成测试由通用方法组成的 dao