spacedemo.java

来自「全面实现ilog地功能,没有使用第三方lib.」· Java 代码 · 共 140 行

JAVA
140
字号
/*
 * This source code is part of TWaver 1.3.1
 *
 * SERVA Software PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * Copyright 2000-2005 SERVA Software, Inc. All rights reserved.
 */

package demo.network;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.util.Random;

import javax.swing.SwingUtilities;

import twaver.Element;
import twaver.MovableFilter;
import twaver.Node;
import twaver.TDataBox;
import twaver.TWaverConst;
import twaver.background.TextureBackground;
import twaver.network.TNetwork;
import demo.DemoPane;

public class SpaceDemo extends DemoPane {
    public SpaceDemo() {
        final Random random = new Random();

        class Planet extends Node {
            int diameterX = (random.nextInt(10) + 1) * 30;
            int diameterY = (random.nextInt(10) + 1) * 30;
            int offset = random.nextInt(360);

            Planet(String image) {
                setImage(image);
            }
        }

        final TNetwork network = new TNetwork();
        TDataBox box = network.getDataBox();

        final Planet[] planets = new Planet[5];
        for (int i = 0; i < planets.length; i++) {
            planets[i] = new Planet("/demo/resource/space/node" + (i + 1) + ".png");
            box.addElement(planets[i]);
        }

        final Node sun = new Node();
        sun.setLocation(300, 300);
        sun.setImage("/demo/resource/space/sun.png");
        network.getDataBox().addElement(sun);

        network.addMovableFilter(new MovableFilter() {
            public boolean isMovable(Element element) {
                return false;
            }
        });

        network.setNetworkBackground(new TextureBackground("/demo/resource/space/space.png") {
            public void paint(Graphics g, double zoom, Rectangle view) {
                super.paint(g, zoom, view);

                Graphics2D g2d = (Graphics2D) g;
                //paint orbit
                g2d.setStroke(TWaverConst.DASHED_STROKE);
                g.setColor(Color.white);
                for (int i = 0; i < planets.length; i++) {
                    int x = sun.getLocation().x - planets[i].diameterX + sun.getWidth() / 2;
                    int y = sun.getLocation().y - planets[i].diameterY + sun.getHeight() / 2;
                    if (planets[i].getImageURL().equals("/demo/resource/space/node1.png")) {
                        x += planets[i].getWidth() / 2;
                        y += planets[i].getHeight() / 2;
                    }
                    Ellipse2D e = new Ellipse2D.Float(x,
                        y,
                        planets[i].diameterX * 2,
                        planets[i].diameterY * 2);
                    g2d.draw(e);
                }
            }
        });
        
        this.add(network, BorderLayout.CENTER);

        Thread thread = new Thread() {
            public void run() {
                while (true) {
                    for (int i = 0; i < 360; i+=5) {
                        final int temp = i;
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                            	float alpha = Math.abs(temp - 180) / 180.0f;
                                for (int j = 0; j < planets.length; j++) {
                                    Planet planet = planets[j];
                                    int width = planet.diameterX;
                                    int height = planet.diameterY;
                                    int angle = temp;
                                    angle += planet.offset;
                                    int x = (int) (Math.cos(Math.toRadians(angle)) * width);
                                    x += sun.getLocation().x;
                                    int y = (int) (Math.sin(Math.toRadians(angle)) * height);
                                    y += sun.getLocation().y;
                                    planets[j].setLocation(x, y);
                                    planet.putClientProperty(TWaverConst.PROPERTYNAME_ELEMENT_ALPHA, new Float(alpha));
                                }
                                if(0.6 < alpha && alpha < 0.7){
                                	network.setAlpha(0.4f);
                                }else if(0.7 < alpha && alpha < 0.8){
                                	network.setAlpha(0.1f);
                                }else{
                                	network.setAlpha(1.0f);
                                }
                            }
                        });
                        try {
                            Thread.sleep(100);
                        }
                        catch (InterruptedException ex) {
                        }
                    }
                }
            }
        };
        thread.start();
    }

    public String getHelp() {
        return "This demo demonstrate the path of several " +
            "planets revolves around the sun.";
    }

    public String getTitle() {
        return "Space Demo";
    }
}

⌨️ 快捷键说明

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