This question already has an answer here:
JFreechart candlestick chart weird behaviour on drag
(1个答案)
4年前关闭。
如标题所示:如何向使用JFreeChart创建的烛台图表中添加水平滚动条?我希望用户在放大时能够在图表中水平滚动。现在可以进行放大,但不能向左或向右移动。我尝试将ChartPanel放入JScrollPane中,但这是一个图表面板,而不是图表本身。我的自定义ChartPanel构造函数:
我的自定义Jpanel,用于创建Chart和ChartPanel并将ChartPanel放在JScrollPane中:
然后,将MyCandleStickChart JPanel添加到主应用程序框架:
(1个答案)
4年前关闭。
如标题所示:如何向使用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);
最佳答案
如果在setDomainPannable(true)
上调用XYPlot
,则实际上可以左右移动它。在您的情况下看起来像chart.getXYPlot().setDomainPannable(true)
。还有一种方法setRangePannable(boolean pannable)
分别用于沿范围方向平移。我很久以前使用它时,通过拖动鼠标中键可以移动图表。我现在不知道您的情况会如何:)但是,如果您没有其他想法,则此方法是一个不错的起点。如果您在其中查看源代码,则可以为相同的功能创建自己的自定义滚动条。
更新:或者,您可以仅通过鼠标滚轮或其他方式自行增加/减小ChartPanel的大小,而无需使用JFreeChart的缩放功能。然后JScrollPane将完成这项工作。如果您只想在全球范围内扩展,那很好又容易。但是,如果您希望对用户选择的区域进行良好的缩放,那么我将研究定制JFreeChart的“平移”。
Upd2:我可能对鼠标中键有误。可能是CTRL
+鼠标拖动,就像@trashgod提供的链接一样
09-11 18:43