package kukaWii.wiiHandle.consumer; import java.awt.GridLayout; import java.util.Date; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import kukaWii.wiiHandle.packet.AbstractPacket; import kukaWii.wiiHandle.packet.AccelerometerPacket; import kukaWii.wiiHandle.packet.MotionPlusPacket; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.XYPlot; import org.jfree.data.time.Millisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.time.TimeSeriesDataItem; public class ChartConsumer extends AbstractPacketConsumer{ private TimeSeries xAccelSeries; private TimeSeries yAccelSeries; private TimeSeries zAccelSeries; private TimeSeries mPlusPitchSpeedSeries; private TimeSeries mPlusRollSpeedSeries; private TimeSeries mPlusYawSpeedSeries; private JFrame frame; public ChartConsumer(){ super(); frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTabbedPane tabbedPane = new JTabbedPane(); JPanel accelPanel = new JPanel(); JPanel mpPanel = new JPanel(); tabbedPane.addTab("Accelerometer", accelPanel); tabbedPane.addTab("MotionPlus", mpPanel); accelPanel.setLayout(new GridLayout(2,2)); mpPanel.setLayout(new GridLayout(2,3)); xAccelSeries = createChart(accelPanel, "Accelerometer X"); yAccelSeries = createChart(accelPanel, "Accelerometer Y"); zAccelSeries = createChart(accelPanel, "Accelerometer Z"); mPlusPitchSpeedSeries = createChart(mpPanel, "Pitch Speed"); mPlusRollSpeedSeries = createChart(mpPanel, "Roll Speed"); mPlusYawSpeedSeries = createChart(mpPanel, "Yaw Speed"); frame.add(tabbedPane); frame.pack(); frame.setVisible(true); } @Override protected void consume(AbstractPacket packet) { if(packet instanceof AccelerometerPacket){ AccelerometerPacket accelPacket = (AccelerometerPacket) packet; addPacketToSeries(xAccelSeries, accelPacket, accelPacket.getX()); addPacketToSeries(yAccelSeries, accelPacket, accelPacket.getY()); addPacketToSeries(zAccelSeries, accelPacket, accelPacket.getZ()); }else if(packet instanceof MotionPlusPacket){ MotionPlusPacket motionPacket = (MotionPlusPacket) packet; addPacketToSeries(mPlusPitchSpeedSeries, motionPacket, motionPacket.getPitchDownSpeed()); addPacketToSeries(mPlusRollSpeedSeries, motionPacket, motionPacket.getRollLeftSpeed()); addPacketToSeries(mPlusYawSpeedSeries, motionPacket, motionPacket.getYawLeftSpeed()); } } private void addPacketToSeries(TimeSeries series, AbstractPacket packet, double value){ series.addOrUpdate(new TimeSeriesDataItem(new Millisecond(new Date(packet.getTimestampMillis())), value)); } private TimeSeries createChart(JPanel panel, String heading){ XYPlot plot = new XYPlot(); TimeSeriesCollection timeSeriesColl = new TimeSeriesCollection(); plot.setDataset(timeSeriesColl); TimeSeries timeSeries = new TimeSeries("Werte"); timeSeriesColl.addSeries(timeSeries); JFreeChart chart = ChartFactory.createTimeSeriesChart(heading, "Zeitpunkt", "Wert", timeSeriesColl, false, false, false); ChartPanel chartPanel = new ChartPanel(chart); panel.add(chartPanel); return timeSeries; } public static void main(String[] args) { new ChartConsumer(); } }