NodeView.java 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package View;
  2. import java.awt.BasicStroke;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Graphics;
  7. import java.awt.Graphics2D;
  8. import java.awt.Point;
  9. import javax.swing.*;
  10. import javax.swing.border.Border;
  11. import Algorithms.Animated.BK.ExtremalLayoutCalc.LayoutType;
  12. import Model.LayeredGraphNode;
  13. /**
  14. * A drawable representation of a node.
  15. * @author kolja
  16. *
  17. */
  18. public class NodeView extends JPanel {
  19. private static final long serialVersionUID = 1L;
  20. private LayeredGraphNode model;
  21. private LayoutType layout;
  22. public NodeView( LayeredGraphNode model, LayoutType lt ) {
  23. this.model = model;
  24. layout = lt;
  25. setSize( (int)model.getWidth( layout ), (int)model.getHeight( layout ) );
  26. }
  27. @Override
  28. public Point getLocation()
  29. {
  30. return new Point( (int)model.getX( layout ), (int)model.getY( layout ) );
  31. }
  32. @Override
  33. public Dimension getPreferredSize()
  34. {
  35. return new Dimension( (int)model.getWidth( layout ), (int)model.getHeight( layout ) );
  36. }
  37. @Override
  38. public void paint( Graphics g )
  39. {
  40. double scale = Math.min( (double)super.getWidth() / (int)model.getWidth( layout ), (double)super.getHeight() / (int)model.getHeight( layout ));
  41. ((Graphics2D)g).scale( scale, scale );
  42. paintComponent( g );
  43. for( Component c : getComponents() )
  44. {
  45. c.paint( g.create(
  46. c.getLocation().x + 25,
  47. c.getLocation().y + 25,
  48. Math.min( (int)model.getWidth( layout ) - 25, c.getPreferredSize().width + c.getLocation().x + 25 ),
  49. Math.min( (int)model.getHeight( layout ) - 25, c.getPreferredSize().height + c.getLocation().y + 25 ) ) );
  50. }
  51. }
  52. @Override
  53. public void paintComponent( Graphics g )
  54. {
  55. Graphics2D g2 = (Graphics2D)g;
  56. g2.setColor( model.getColor( layout ) );
  57. g2.setStroke(new BasicStroke(5));
  58. if( model.getContainedNodes().size() == 0 )
  59. g2.fillRect( 0, 0, (int)model.getWidth( layout )-1, (int)model.getHeight( layout )-1 );
  60. if( model.isSelected( layout ) )
  61. {
  62. g.setColor( Color.GRAY );
  63. g.fillRect( 0, 0, (int)model.getWidth( layout )-1, (int)model.getHeight( layout )-1 );
  64. }
  65. Border linebor = BorderFactory.createLineBorder(model.getColor( layout ), 5);
  66. linebor.paintBorder( this, g2, 0, 0, (int)model.getWidth( layout )-1, (int)model.getHeight( layout )-1 );
  67. }
  68. }