package View; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.util.ArrayList; import javax.swing.JPanel; import Model.LayeredGraphEdge; public class EdgeView extends JPanel { /** * */ private static final long serialVersionUID = 1L; private LayeredGraphEdge model; public EdgeView( LayeredGraphEdge model ) { this.model = model; } @Override public int getX() { ArrayList bps = model.getLinePoints(); double min = bps.get( 0 ).getX(); for( Point p : bps ) min = Math.min( min, p.getX() ); return (int)min - 5; } @Override public int getY() { ArrayList bps = model.getLinePoints(); double min = bps.get( 0 ).getY(); for( Point p : bps ) min = Math.min( min, p.getY() ); return (int)min - 5; } @Override public int getWidth() { ArrayList bps = model.getLinePoints(); double max = bps.get( 0 ).getX(); for( Point p : bps ) max = Math.max( max, p.getX() ); return (int)max + 10; } @Override public int getHeight() { ArrayList bps = model.getLinePoints(); double max = bps.get( 0 ).getY(); for( Point p : bps ) max = Math.max( max, p.getY() ); return (int)max + 10; } @Override public void paint( Graphics g ) { paintComponent( g ); for( Component c : getComponents() ) c.paint( g.create( c.getX() + 10, c.getY() + 10, Math.min( getWidth() - 10, c.getWidth() + c.getX() + 10 ), Math.min( getHeight() - 10, c.getHeight() + c.getY() + 10 ) ) ); } @Override public void paintComponent( Graphics g ) { System.out.println( "Clipping: x:" + g.getClip().getBounds().getX() + " y:" + g.getClip().getBounds().getY() + " w:" + g.getClip().getBounds().getWidth() + " h:" + g.getClip().getBounds().getHeight() ); g.setColor( Color.GREEN ); ArrayList bps = model.getLinePoints(); for( int i = 1; i < bps.size(); i++ ) { System.out.println( "Draw a Line from (" + (int)bps.get( i - 1 ).getX() + "," + (int)bps.get( i - 1 ).getY() + ") to (" + (int)bps.get( i ).getX() + "," + (int)bps.get( i ).getY() + ")" ); g.drawLine( (int)bps.get( i - 1 ).getX() - getX(), (int)bps.get( i - 1 ).getY() - getY(), (int)bps.get( i ).getX() - getX(), (int)bps.get( i ).getY() - getY() ); } ((Graphics2D)g).fill( RenderHelper.createArrowShape( new Point( bps.get( bps.size() - 2 ).x - getX(), bps.get( bps.size() - 2 ).y - getY() ), new Point( bps.get( bps.size() - 1 ).x - getX(), bps.get( bps.size() - 1 ).y - getY() ) ) ); } }