package de.androbin.lib.plotter;
import de.androbin.lib.plotter.shuntingyard.*;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Plotter extends JPanel implements ActionListener {
// Deklarationen
private static final long serialVersionUID = 1L;
protected JTextField term;
protected ArrayList<Point> graph = new ArrayList<Point>();
// Konstruktoren
public Plotter() {
setFocusable( true );
setLayout( null );
term = new JTextField();
term.setBounds( 10, 10, 200, 50 );
term.addActionListener( this );
setVisible( true );
}
// Methoden
public static void main( String[] args ) {
JFrame frame = new JFrame( "Plotter" );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 500, 500 );
frame.setLocationRelativeTo( null );
Plotter plotter = new Plotter();
plotter.setBounds( 10, 10, frame.getWidth() - 10, frame.getHeight() - 10 );
frame.add( plotter );
frame.setVisible( true );
}
@Override
public void paint( Graphics g ) { super.paint( g ); for ( int i = 0; i < graph.size(); i++ ) { g.drawOval( graph.get( i ).x - 1, graph.get( i ).y, 2, 2 ); } }
@ Override
public void actionPerformed( ActionEvent e ) {
double result;
for ( int i = 0; i < getWidth(); i++ ) {
String expr = term.getText().replaceAll( "x", String.valueOf( i ) );
List<Token> rpn = ShuntingYardScience.parse(expr);
result = ShuntingYardScience.evalRPN(expr, rpn);
graph.add( new Point( i, (int) result ) );
}
}
}