1

ボールの動きをシミュレートすることになっています。プロットのスポットは私のボールです。今のところ、ランダムなデータセットを生成しましたが、後で、ボールの位置を継続的に与える入力ファイルを読み取ります。

私の質問は、ボールが動いているように見えるようにチャートを継続的に更新するにはどうすればよいですか?

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
//import java.security.PublicKey;
import java.util.Random;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;


public class visualize {

    private static XYSeriesCollection createDataset() {
            Random rgenX = new Random(); 
            Random rgenY = new Random();
            XYSeriesCollection dataset = new XYSeriesCollection();
            for (int i = 999; i >= 0; i-=10) {
            int x = rgenX.nextInt(i+1);
            int y = rgenY.nextInt(i+1);
            XYSeries series1 = new XYSeries(i);
            series1.add(x, y);
            dataset.addSeries(series1);
            }
            final XYSeries series3 = new XYSeries("line1");
            series3.add(300, 400);
            series3.add(500, 300);
            dataset.addSeries(series3);
            final XYSeries series4 = new XYSeries("line2");
            series4.add(500, 200);
            series4.add(700, 300);
            dataset.addSeries(series4);

            return dataset;
    }

private static JFreeChart createChart(XYSeriesCollection dataset) {
      JFreeChart chart = ChartFactory.createXYLineChart(
                "", // chart title
                "", // x axis label
                "", // y axis label
                dataset, // data  ***-----PROBLEM------***
                PlotOrientation.VERTICAL,
                false, // include legend
                true, // tooltips
                false // urls
                );
            XYPlot xyPlot = (XYPlot) chart.getPlot();
            final XYLineAndShapeRenderer renderer0 = new XYLineAndShapeRenderer();
            renderer0.setSeriesShapesVisible(100, false);
            renderer0.setSeriesShapesVisible(101, false);
            renderer0.setSeriesStroke(100, new BasicStroke(5.0f));
            renderer0.setSeriesStroke(101, new BasicStroke(5.0f));

            xyPlot.setRenderer(renderer0);

            Shape shape  = new Ellipse2D.Double(0,0,20,20);

            XYItemRenderer renderer = xyPlot.getRenderer();
            renderer.setBaseShape(shape);
            renderer.setBasePaint(Color.red);
            renderer.setSeriesPaint(100, Color.black);
            renderer.setSeriesPaint(101, Color.black);
            for (int i = 0; i < 99; i++) {
                renderer.setSeriesShape(i, shape);

            }
            NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis();
            domain.setRange(0, 1000);
            domain.setTickUnit(new NumberTickUnit(50));
            domain.setVerticalTickLabels(true);
            NumberAxis range = (NumberAxis) xyPlot.getRangeAxis();
            range.setRange(0, 1000);
            range.setTickUnit(new NumberTickUnit(50));
            xyPlot.setBackgroundPaint(Color.white);

            return chart;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ChartFrame frame = new ChartFrame("DropBalls", createChart(createDataset()));
    frame.pack();
    frame.setVisible(true); 
}
}
4

1 に答える 1

1

ScatterMoveボタンのアクション リスナーで散布図を更新する 1 つの方法を示します。継続的な更新には、ここjavax.swing.Timerに示されている を使用します。

于 2013-11-12T07:40:04.603 に答える