📄 sampleqnanimation.java
字号:
/**
* Copyright (C) 2006, Laboratorio di Valutazione delle Prestazioni - Politecnico di Milano
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package jmt.gui.common.startScreen.sampleAnimation;
import jmt.gui.common.animation.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
/**
* Created by IntelliJ IDEA.
* User: OrsotronIII
* Date: 2-mar-2005
* Time: 19.02.36
* To change this template use Options | File Templates.
*/
public class SampleQNAnimation extends QueueNetAnimation{
//Thread controller that repaints animation.
Animator controller;
public SampleQNAnimation(){
super(new SampleIconsToolkit());
setBounds(new Rectangle(198,98));
prepareQueueNet();
}
private void prepareQueueNet(){
int x=16, y=-3;
Point[][] linkPts={{new Point(70+x,60+y),new Point(90+x,60+y),new Point(90+x,75+y),new Point(100+x,75+y)},
{new Point(70+x,60+y),new Point(90+x,60+y),new Point(90+x,40+y),new Point(100+x,40+y)},
{new Point(140+x,40+y),new Point(150+x,40+y),new Point(150+x,95+y),new Point(15+x,95+y),new Point(15+x,60+y),new Point(30+x,60+y)},
{new Point(140+x,75+y),new Point(150+x,75+y),new Point(150+x,95+y),new Point(15+x,95+y),new Point(15+x,60+y),new Point(30+x,60+y)},
{new Point(70+x,60+y),new Point(80+x,60+y),new Point(80+x,35+y),new Point(20+x,35+y),new Point(20+x,60+y),new Point(30+x,60+y)}};
ColoredStationAnimation[] stations = {new ColoredStationAnimation(new Point(120+x,40+y), 500),
new ColoredStationAnimation(new Point(50+x,60+y), 100),
new ColoredStationAnimation(new Point(120+x,75+y), 500)};
for(int i=0; i<stations.length; i++) addStation(stations[i]);
EdgeAnimation[] links = new EdgeAnimation[linkPts.length];
for(int i=0; i<linkPts.length; i++) links[i] = new EdgeAnimation(linkPts[i], 20);
ColoredStationAnimation[] sourceStations = {stations[1],stations[1],stations[0],stations[2],stations[1]};
ColoredStationAnimation[] targetStations = {stations[2],stations[0],stations[1],stations[1], stations[1]};
for(int i=0; i<links.length; i++) addEdge(links[i], sourceStations[i], targetStations[i]);
for(int i=0; i<10; i++){
addJob(new JobAnimation(0.075,
new JobPath[]{new RandomPath(this, stations[i%stations.length])},
new Rectangle(6,6),new SampleIconsToolkit()),
stations[i%stations.length]);
}
controller = new Animator(30, this);
}
public void start(){
controller.start();
}
public void stop(){
controller.terminate();
}
}
class ColoredStationAnimation extends StationAnimation{
private static Color[] colors = {new Color(255,0,0,150),
new Color(0,255,0,150),
new Color(0,0,0,150),
new Color(255,255,0,150),
new Color(0,0,255,150)
};
private double cpuPhase = Math.random()*360,
queuePhase = Math.random()*16;
private int colorPhase = (int)(Math.random()*colors.length),
jobLength = 6;
private Image overlayedShading=null;
public ColoredStationAnimation(Point location, long residenceTime){
super("server", new Rectangle(location.x-20, location.y-10, 40, 20), residenceTime);
createOverlayImage();
}
public void paint(Graphics g, ImageObserver io){
createQueue(g);
createCPU(g);
g.drawImage(this.overlayedShading,getBounds().x,getBounds().y,io);
}
private void createOverlayImage(){
int height = getBounds().height*2,
width=getBounds().width*2,
qLength = width-(height*4)/5,
qHeight = (height*4)/5,
yOffs = (height-qHeight)/2;
overlayedShading = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
Color[] shades = new Color[7], lights = new Color[7];
for(int i=0; i<shades.length; i++){
shades[i] = new Color(0,0,0, 160-(i*160)/shades.length);
lights[i] = new Color(255,255,255, 200-(i*200)/lights.length);
}
Graphics g = overlayedShading.getGraphics();
for(int i=0; i<shades.length;i++){
g.setColor(lights[i]);
g.drawPolyline(new int[]{i,i,qLength-i}, new int[]{height-i-yOffs,i+yOffs,i+yOffs}, 3);
g.drawArc(width-height+i,i,height-2*i,height-2*i,45+4*i,180-8*i);
g.setColor(shades[i]);
g.drawPolyline(new int[]{i,qLength-i,qLength-i}, new int[]{height-i-yOffs,height-i-yOffs,i+yOffs}, 2);
g.drawArc(width-height+i,i,height-2*i,height-2*i,225+4*i,180-8*i);
}
overlayedShading = overlayedShading.getScaledInstance(getBounds().width,getBounds().height,Image.SCALE_SMOOTH);
}
private void createCPU(Graphics g){
cpuPhase = (cpuPhase-6)%360;
int width=getBounds().width,
height=getBounds().height,
x=getBounds().x,
y=getBounds().y,
turn=colors.length;
g.setColor(Color.WHITE);
g.fillOval(width-height+x+1, y+1, height-2, height-2);
for(int i=0; i<turn; i++){
g.setColor(colors[i%colors.length]);
g.fillArc(width-height+x,y,height,height, (int)cpuPhase+(i*360)/turn, 360/turn);
}
}
private void createQueue(Graphics g){
queuePhase = queuePhase+1;
if(queuePhase>jobLength){
queuePhase = queuePhase-jobLength;
colorPhase = (colorPhase+colors.length-1)%colors.length;
}
int width=getBounds().width,
height=getBounds().height,
x=getBounds().x,
y=getBounds().y,
turn=(width-(height*4)/5),
qHeight = (height*4)/5,
yOffs = (height-qHeight)/2;
for(int i=0, col=colorPhase, offsX = (int)queuePhase;
offsX <= turn+queuePhase;
i++, col=(col+1)%colors.length, offsX+=jobLength){
g.setColor(colors[col]);
int offs = offsX - jobLength;
if(i==0)offs = offsX - (int)queuePhase;
g.fillRect(x+offs, y+yOffs, offsX-offs, qHeight);
}
}
}
class SampleIconsToolkit extends DefaultIconsToolkit{
private static Color[] colors = {new Color(255,0,0,150),
new Color(255,255,0,150),
new Color(0,0,255,150),
new Color(100,100,100,150),
new Color(0,255,0,150)
};
public Image getJobIcon(Rectangle bounds){
BufferedImage bi = new BufferedImage(100,100,BufferedImage.TYPE_4BYTE_ABGR);
Graphics jig = bi.getGraphics();
Color col= colors[(int)(colors.length*Math.random())];
int red=(255-col.getRed())*2/5+col.getRed(),
green=(255-col.getGreen())*2/5+col.getGreen(),
blue=(255-col.getBlue())*2/5+col.getBlue();
Color[] colGradient = new Color[10];
//Build a color gradient from black to selected color
for(int i=0; i<colGradient.length; i++){
colGradient[i]= new Color(channelGradient(i, colGradient.length, red),
channelGradient(i, colGradient.length, green),
channelGradient(i, colGradient.length, blue));
}
for(int i=0; i<colGradient.length; i++){
jig.setColor(colGradient[i]);
jig.fillOval(i*3,i*3,100-(i*9), 100-(i*9));
}
return bi.getScaledInstance(bounds.width, bounds.height,Image.SCALE_SMOOTH);
}
private int channelGradient(int x, int rangeX, int rangeY){
return (int)(rangeY*Math.pow((double)(x)/rangeX, 0.44));
}
public Image getBGTileIcon(Rectangle bounds){
BufferedImage bi = new BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_4BYTE_ABGR);
Graphics g = bi.getGraphics();
g.setColor(new Color(150,150,150,200));
g.fillRect(0,0, bounds.width, bounds.height);
return bi;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -