Java JFreeChart图表面板中间的区域图表
我有一个动态区域图表,我希望它显示在面板的中间,这意味着我希望数据从X轴的中间添加,但不是从图表的右侧添加。 我正在使用所示的一个示例。如何做到这一点? 这是我的密码:Java JFreeChart图表面板中间的区域图表,java,jfreechart,Java,Jfreechart,我有一个动态区域图表,我希望它显示在面板的中间,这意味着我希望数据从X轴的中间添加,但不是从图表的右侧添加。 我正在使用所示的一个示例。如何做到这一点? 这是我的密码: public class essaijfree2 extends ApplicationFrame { private static final String TITLE = "Dynamic Series"; private static final String START = "Start"; private stati
public class essaijfree2 extends ApplicationFrame {
private static final String TITLE = "Dynamic Series";
private static final String START = "Start";
private static final String STOP = "Stop";
private static final float MINMAX = 100;
private static final int COUNT = 2 * 60;
private static final int FAST = 100;
private static final int SLOW = FAST * 5;
private static final Random random = new Random();
private Timer timer;
public essaijfree2(final String title) {
super(title);
final DynamicTimeSeriesCollection dataset =
new DynamicTimeSeriesCollection(1, COUNT, new Second());
dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 2011));
dataset.addSeries(gaussianData(), 0, "Gaussian data");
JFreeChart chart = createChart(dataset);
XYPlot xyPlot = (XYPlot) chart.getPlot();
XYDifferenceRenderer r = new XYDifferenceRenderer(Color.green,Color.red, true);
xyPlot.setRenderer(r);
final JComboBox combo = new JComboBox();
combo.addItem("Fast");
combo.addItem("Slow");
combo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if ("Fast".equals(combo.getSelectedItem())) {
timer.setDelay(FAST);
} else {
timer.setDelay(SLOW);
}
}
});
this.add(new ChartPanel(chart), BorderLayout.CENTER);
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(combo);
this.add(btnPanel, BorderLayout.SOUTH);
timer = new Timer(FAST, new ActionListener() {
float[] newData = new float[1];
@Override
public void actionPerformed(ActionEvent e) {
newData[0] = randomValue();
dataset.advanceTime();
dataset.appendData(newData);
}
});
}
private float randomValue() {
return (float) (random.nextGaussian() * MINMAX / 3);
}
private float[] gaussianData() {
float[] a = new float[COUNT];
for (int i = 0; i < a.length; i++) {
a[i] = randomValue();
}
return a;
}
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createXYAreaChart(
TITLE, "hh:mm:ss", "milliVolts", dataset,PlotOrientation.VERTICAL, true, true, false);
final XYPlot plot = result.getXYPlot();
ValueAxis domain = plot.getDomainAxis();
domain.setAutoRange(true);
ValueAxis range = plot.getRangeAxis();
range.setRange(-MINMAX, MINMAX);
return result;
}
public void start() {
timer.start();
}
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
essaijfree2 demo = new essaijfree2(TITLE);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
demo.start();
}
});
}
公共类essaijfree2扩展了ApplicationFrame{
私有静态最终字符串TITLE=“动态系列”;
私有静态最终字符串START=“START”;
私有静态最终字符串STOP=“STOP”;
专用静态最终浮动最小值=100;
私有静态最终整数计数=2*60;
专用静态最终整数FAST=100;
专用静态最终整数慢=快*5;
私有静态最终随机=新随机();
私人定时器;
公共essaijfree2(最终字符串标题){
超级(标题);
最终DynamicMiseriesCollection数据集=
新的DynamicMiseriesCollection(1,COUNT,new Second());
setTimeBase(新秒(0,0,0,1,1,2011));
addSeries(Gaussianada(),0,“高斯数据”);
JFreeChart chart=createChart(数据集);
XYPlot XYPlot=(XYPlot)chart.getPlot();
xydifferencenderr=新的xydifferencender(Color.green,Color.red,true);
xyPlot.setRenderer(r);
最终JComboBox组合=新JComboBox();
combo.addItem(“快速”);
组合添加项(“慢”);
combo.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
if(“Fast”.equals(combo.getSelectedItem())){
定时器设置延迟(快速);
}否则{
定时器设置延迟(慢);
}
}
});
添加(新图表面板(图表),边框布局.CENTER);
JPanel btnPanel=newjpanel(newflowlayout());
btnPanel.add(组合);
添加(btnPanel,BorderLayout.SOUTH);
计时器=新计时器(快速,新ActionListener(){
浮动[]新数据=新浮动[1];
@凌驾
已执行的公共无效操作(操作事件e){
newData[0]=randomValue();
dataset.advanceTime();
dataset.appendData(新数据);
}
});
}
私有浮点值(){
返回(浮动)(random.nextGaussian()*MINMAX/3);
}
私有浮点[]高斯数(){
浮动[]a=新浮动[计数];
for(int i=0;i
设置域轴上的上边距:
domain.setUpperMargin(0.5);
交叉发布。