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 + -
显示快捷键?