Java 将水平滚动添加到JFreeChart

Java 将水平滚动添加到JFreeChart,java,swing,jfreechart,Java,Swing,Jfreechart,正如标题所说:如何将水平滚动条添加到我用JFreeChart创建的烛台图表中?我希望用户能够在放大时水平滚动图表。现在放大可以了,但我不能向左或向右移动。我尝试将ChartPanel放入JScrollPane,但那是一个ChartPanel,而不是图表本身。我的自定义图表面板构造函数: public MyChartPanel(JFreeChart chart) { super(chart); lineDrawingControllers =new EventListenerLis

正如标题所说:如何将水平滚动条添加到我用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,我在其中创建图表和图表面板,并将图表面板放在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(布尔值pannable)
分别用于范围方向的平移。当我很久以前使用它时,通过拖动鼠标中键可以移动图表。我不知道你现在的情况会是怎样的:)但是如果你没有其他想法,这个方法是一个很好的开始。可能是,如果您查看那里的源代码,那么您可以为相同的功能创建自己的自定义滚动条

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


Upd2:我可能对鼠标中键有误解。很可能是在@trashgood提供的链接中,鼠标拖动了
CTRL
+鼠标,如果在
XYPlot
上调用
setDomainPannable(true)
,实际上可以左右移动它。在您的案例中,看起来像是
chart.getXYPlot().setDomainPannable(true)
。还有一种方法
setRangePannable(布尔值pannable)
分别用于范围方向的平移。当我很久以前使用它时,通过拖动鼠标中键可以移动图表。我不知道你现在的情况会是怎样的:)但是如果你没有其他想法,这个方法是一个很好的开始。可能是,如果您查看那里的源代码,那么您可以为相同的功能创建自己的自定义滚动条

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


Upd2:我可能对鼠标中键有误解。可能是鼠标拖动“@trashgood”提供的链接“我试图将ChartPanel放入JScrollPane,但那是一个ChartPanel,而不是图表本身。”。。什么非挥发性物质。发布一个(最小的完整的可验证示例)&这将是清楚的。“我尝试将ChartPanel放入JScrollPane,但那是一个ChartPanel,而不是图表本身。”。。什么非挥发性物质。发布一个(最小的完整的可验证的例子)&这将是清楚的。谢谢回复,很遗憾我不能让它工作。用任何按钮拖动都不起作用。已经检查了一个完整的示例。@Endrew在我的旧代码中,我还看到一行
panel。setMouseWheelEnabled(true)
其中panel是ChartPanel。也许这会有帮助。但不管怎么说,我只是指出了要看的地方,你们可能会想用你们自己的方式重新实现它。@Stocker:是的,pan随平台而变化;这是Mac OS X上的选项键/中键。@Stocker:Thx,拖动可以很好地使用CTRL键,就像你说的。Thx用于回复,很遗憾我无法让它工作。用任何按钮拖动都不起作用。已经检查了一个完整的示例。@Endrew在我的旧代码中,我还看到一行
panel。setMouseWheelEnabled(true)
其中panel是ChartPanel。也许这会有帮助。但不管怎么说,我只是指出了要看的地方,你们可能会想用你们自己的方式重新实现它。@Stocker:是的,pan随平台而变化;这是Mac OS X上的选项键/中键。@Stocker:Thx,拖动可以很好地使用CTRL键,就像你说的那样。