// Convergence.java package lt.ktu.gmj.analysis; import java.awt.*; import java.util.*; import javax.swing.*; import lt.monarch.chart.*; import lt.monarch.chart.chart2D.*; import lt.monarch.swing.*; import lt.ktu.gmj.*; public class Convergence extends ResultFrame { protected Chart2D chart; protected ConnectedSeries series; protected Provider provider; class Provider extends AbstractChartPointProvider { public int pointCount () { return results.progressResultCount()+1; } public ChartPoint point (int i) { return i==0 ? new InvisibleDot ( new Double(0), new Double(results.maxValue()) ) : pointFromResult ( results.progressResultAt(i-1) ); } public void newResult (Result r) { ChartPoint pt=pointFromResult(r); if (pt.registerOn (series)) firePointsChanged (); firePointAdded (pt); } protected ChartPoint pointFromResult (Result r) { ChartPoint pt=new InvisibleDot ( new Double(r.iteration), new Double(r.value) ); return pt; } }; public Convergence () { super ("Convergence"); chart=new Chart2D(); getContentPane().add(BorderLayout.CENTER, new JChartPanel(chart)); } protected void setupChart () { provider=new Provider (); MathAxisMapper yMapper=new MathAxisMapper(); MathAxisMapper xMapper=new MathAxisMapper(); Axis2DX axisX=new Axis2DX (xMapper); Axis2DY axisY=new Axis2DY (yMapper); series=new ConnectedSeries (provider, axisX, axisY); Grid grid=new Grid (axisX, axisY); axisY.setLabel ("f(x)"); axisX.setLabel ("Iteration"); yMapper.range.setRange (results.minValue(), results.maxValue()); xMapper.range.setRange (0, results.method().iterations()); if (System.getProperty("java.version").compareTo("1.2")>=0) series.setStroke (new BasicStroke(2)); chart.reset (); chart.setLAxis (axisY); chart.setXAxis (axisX); chart.setObjects (new ChartObject[]{ grid, axisX, axisY, series }); chart.invalidate (); } public void newResult (ResultRepository n) { } public void newProgressResult (ResultRepository n) { provider.newResult (n.lastResult()); } public void finalResult (ResultRepository n) { newProgressResult (n); } public void prepare (ResultRepository results) { super.prepare (results); setupChart (); show (); results.addObserver (this); } };