nodegroup.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 129 行

JAVA
129
字号
     import java.applet.*;
     import java.awt.*;
     import java.awt.geom.*;
     import java.awt.image.*;

     import magic.actor2d.*;
     import magic.graphics.*;   
     import magic.util.*;

     public class NodeGroup extends ActorGroup2D
     {
          // 节点图像的目标宽和高
          public static final int NODE_WIDTH  = 48;
          public static final int NODE_HEIGHT = 48;

          // 节点可能用的前景色--对于大多数的层来说够了
          public static final Color[] COLORS = 
               {
               Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.LIGHT_GRAY, 
               Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW,
               Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.LIGHT_GRAY, 
               Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW
               };

          // 节点的最大数目          
          public static final int NUM_NODES = COLORS.length;

          // '标记'节点的静态图像
          public static BufferedImage flag;

          public NodeGroup()
          {
               super();

               animations = new AnimationStrip[NUM_NODES];
          }

          public void init(Applet a)
          {
               MagicUtils.buildTrigTables();

               final Stroke outline = new BasicStroke(2.0f);

               // 为节点创建形状
               Polygon p = new Polygon();
               for(int angle = 0; angle <= 360; angle += 10)
               {
                    p.addPoint((int) ((double)NODE_WIDTH/2 *MagicUtils.cos(angle)), 
                               (int) ((double)NODE_HEIGHT/2*MagicUtils.sin(angle))); 
               }

               // 为Node类设置形状--这将对鼠标选取等有利
               Node.geometry = p;

               // 创建'高亮'选择所用的内部形状
               Polygon hilite = new Polygon();
               for(int angle = 0; angle <= 360; angle += 45)
               {
                    hilite.addPoint((int) ((double)NODE_WIDTH/4 *MagicUtils.cos(angle)), 
                                    (int) ((double)NODE_HEIGHT/4*MagicUtils.sin(angle))); 
               }

               Graphics2D g2d;
               // 用COLORS数组中的颜色填充节点 
               for(int i = 0; i < NUM_NODES; i++)
               {
                    // *** 用有效的颜色填充节点 (frame 1)

                    BufferedImage image = new BufferedImage(NODE_WIDTH, NODE_HEIGHT, BufferedImage.TYPE_INT_ARGB);
                    g2d = image.createGraphics();

                    // 由于图像将被预绘制,所以让它们尽可能漂亮
                    g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 

                    g2d.setPaint(COLORS[i]);
                    g2d.translate(NODE_WIDTH/2, NODE_HEIGHT/2);
                    g2d.fill(p);

                    // 绘制节点的轮廓
                    g2d.setPaint(Color.WHITE);
                    g2d.setStroke(outline);
                    g2d.draw(p);

                    // *** 创建一个图像的一个'底片' (frame 2)

                    BufferedImage negative = new BufferedImage(NODE_WIDTH, NODE_HEIGHT, BufferedImage.TYPE_INT_ARGB);
                    g2d = negative.createGraphics();

                    g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 

                    g2d.setPaint(COLORS[i]);
                    g2d.translate(NODE_WIDTH/2, NODE_HEIGHT/2);
                    g2d.fill(p);

                    g2d.setPaint(Color.WHITE);
                    g2d.setStroke(outline);
                    g2d.draw(p);

                    // 填充高亮区域 
                    g2d.setPaint(COLORS[COLORS.length-1-i]);
                    g2d.setTransform(AffineTransform.getTranslateInstance(NODE_WIDTH/2.0, NODE_HEIGHT/2.0));
                    g2d.fill(hilite);
                    g2d.setPaint(Color.BLACK);
                    g2d.draw(hilite);

                    // 添加包含新节点图像的动画条
                    animations[i] = new AnimationStrip();
                    animations[i].addFrame(image);
                    animations[i].addFrame(negative);
                    animations[i].setAnimator(new Animator.Looped());
               }

               // 创建标记
               flag = new BufferedImage(NODE_WIDTH/4, NODE_HEIGHT/2, BufferedImage.TYPE_INT_ARGB);
               g2d  = flag.createGraphics();

               Polygon triangle = new Polygon();
               triangle.addPoint(NODE_WIDTH/4, 0);
               triangle.addPoint(NODE_WIDTH/4, NODE_HEIGHT/8);
               triangle.addPoint(0, NODE_HEIGHT/8);

               g2d.setPaint(Color.WHITE);
               g2d.drawLine(NODE_WIDTH/4-1, 0, NODE_WIDTH/4-1, NODE_HEIGHT/2);

               g2d.setPaint(Color.RED);
               g2d.fill(triangle);
          }

     }    // NodeGroup     

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?