将水平滚动添加到 JFreeChart

End*_*rew 1 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();
}
Run Code Online (Sandbox Code Playgroud)

我的自定义 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);
}
Run Code Online (Sandbox Code Playgroud)

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

myCandleStickChart=new MyCandleStickChart();
applicationFrame.add(myCandleStickChart, BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)

Sto*_*ker 5

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

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

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