package View; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.*; import Model.LayeredGraphNode; /** * A drawable representation of a node. * @author kolja * */ public class NodeView extends JPanel { private static final long serialVersionUID = 1L; private LayeredGraphNode model; public NodeView( LayeredGraphNode model ) { this.model = model; model.setView( this ); setSize( (int)model.getWidth(), (int)model.getHeight() ); } @Override public int getX() { return (int)model.getX(); } @Override public int getY() { return (int)model.getY(); } @Override public Dimension getPreferredSize() { return new Dimension( (int)model.getWidth(), (int)model.getHeight() ); } @Override public void paint( Graphics g ) { System.out.println( super.getWidth() + " " + super.getHeight() ); double scale = Math.min( (double)super.getWidth() / (int)model.getWidth(), (double)super.getHeight() / (int)model.getHeight()); System.out.println( scale ); ((Graphics2D)g).scale( scale, scale ); paintComponent( g ); for( Component c : getComponents() ) { c.paint( g.create( c.getX() + 25, c.getY() + 25, Math.min( (int)model.getWidth() - 25, c.getPreferredSize().width + c.getX() + 25 ), Math.min( (int)model.getHeight() - 25, c.getPreferredSize().height + c.getY() + 25 ) ) ); System.out.println( c.getX() + " " + c.getY() + " " + c.getPreferredSize() + " " + scale ); } } @Override public void paintComponent( Graphics g ) { /*else { g.setColor( Color.WHITE ); g.fillRect( 0, 0, getWidth()-1, getHeight()-1 ); }*/ Graphics2D g2 = (Graphics2D)g; g2.setColor( model.getColor() ); g2.setStroke(new BasicStroke(5)); if( model.getContainedNodes().size() == 0 ) g2.fillRect( 0, 0, (int)model.getWidth()-1, (int)model.getHeight()-1 ); if( model.isSelected() ) { g.setColor( Color.GRAY ); g.fillRect( 0, 0, (int)model.getWidth()-1, (int)model.getHeight()-1 ); } g2.setColor( model.getColor() ); g2.drawRect( 0, 0, (int)model.getWidth()-1, (int)model.getHeight()-1 ); } }